机器学习之集成学习

集成学习通过结合多个学习器提升预测性能,包括Boosting(如AdaBoost)、Bagging(如随机森林)等方法。AdaBoost通过迭代调整样本权重以减少偏差,而Bagging通过并行训练多个子模型降低方差。随机森林在Bagging基础上引入随机属性选择。在Scikit-learn中,可以使用这些方法实现模型构建。在鸢尾花数据集实验中,集成学习可能对已有高分模型提升不明显。
摘要由CSDN通过智能技术生成

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system) 。ensemble 读音似"昂桑宝"。集成方法的目标是把多个使用给定学习算法构建的基估计器的预测结果结合起来,从而获得比单个估计器更好的泛化能力/鲁棒性。
集成学习方法大致可分为两大类:
个体学习器间存在强依赖关系、必须串行生成的序列化方法;比如:Boosting
个体学习器间不存在强依赖关系、可同时生成的并行化方法。代表是Bagging 和"随机森林" (Random Forest)

1、模型介绍

1.1、Boosting

Boosting 是一族可将弱学习器提升为强学习器的算法。工作机制:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T 个基学习器进行加权结合。
AdaBoost是Boosting 族算法的代表,它采用基学习器的线性组合来最小化指数损失函数(exponentialloss function) 。
Boosting 算法的两种实施方法:“重赋权法” (re-weighting)和"重采样法" (re-sampling)。从偏差一方差分解的角度看, Boosting 主要关住降低偏差。

1.2、Bagging (Bootstrap AGGregatlNG)

Bagging是并行式集成学习方法最著名的代表,它直接基于自助来样法(bootstrap sampling)。对分类任务使用简单投票法,对回归任务使用简单平均法。
标准AdaBoost 只适用于二分类任务, Bagging能用于多分类、回归等任务。从偏差方差分解的角度看, Bagging 主要关注降低方差。

1.3、随机森林(Random Forest,简称RF)

随机森林是Bagging的一个扩展变体。RF在以决策树为基学习器构建Bagging 集成的基础上,在决策树的训练过程中引入了随机属性选择。
参数k 控制随机性的引入程度。如下d是集合属性个数。
若令k=d,则基决策树的构建与传统决策树相同;
若令k=1, 则是随机选择一个属性用于划分;
一般情况下,推荐值 k = l o g 2 d k=log_{2}d k=log2d

1.4、结合策略

集成学习结果的常见结合策略,如下:
平均法:简单平均法和加权平均法
技票法:绝对多数投票法、相对多数投票法和加权投票法
学习法:略
1.5、多样性:略

2、Sklearn代码实现

在 scikit-learn 中,包括基于 随机决策树 的平均算法: RandomForest 算法(RandomForestClassifier 和 RandomForestRegressor 类)和 Extra-Trees 算法;bagging 方法使用 BaggingClassifier 元估计器(或者 BaggingRegressor ),基估计器和随机子集抽取策略由用户指定,以及 AdaBoost等。
示例:鸢尾花数据集分类任务

from sklearn import datasets
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
import sklearn.metrics as sm
from sklearn.model_selection import train_test_split


def print_score(name, estimator):
    """
    模型评分
    :return:
    """
    print(name)
    print('score', estimator.score(x_test, y_test))
    pred_y = estimator.predict(x_test)
    print('accuracy_score', sm.accuracy_score(y_test, pred_y))
    print('precision_score', sm.precision_score(y_test, pred_y, average='macro'))


if __name__ == '__main__':
    # 加载数据
    iris = datasets.load_iris()
    x = iris.data
    y = iris.target
    # 划分训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=3, test_size=0.3)

    # 创建模型 - 单个决策树
    model = DecisionTreeClassifier()
    model.fit(x_train, y_train)
    # 模型评分
    print_score('DecisionTreeClassifier', model)

    # 集成学习建模 AdaBoostClassifier
    ada = AdaBoostClassifier(base_estimator=model, n_estimators=200, learning_rate=0.2, random_state=7)
    ada.fit(x_train, y_train)
    # 模型评分
    print_score('AdaBoostClassifier', ada)

运行结果,如下:
score
从控制台输出,可以看出针对鸢尾花玩具数据集,决策树本身已经具有很高的分数,再使用集成学习效果并不明显。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值