写点什么

机器学习 - 集成学习

作者:AIWeker
  • 2022 年 7 月 21 日
  • 本文字数:2085 字

    阅读完需:约 7 分钟

机器学习-集成学习

1.什么是集成学习

监督机器学习的目标为训练一个在各个方面都稳定的模型,但是往往由于算法和数据本身的缺乏完美的鲁棒性,模型不一定十分理想。


集成学习的通俗说法可以用一句话来概括: 三个臭皮匠,顶一个诸葛亮。集成学习通过构建多个有偏好的模型(弱模型),来组合构建强模型。集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。


集成学习主要有两种:Bagging,Boosting。

  • Bagging 为【放回抽样】方法来创建训练集,来分别构建多个分类器。通过多个分类器的投票来预测新数据。 典型算法为随机森林。

  • Boosting 为【提升方法】,即不断的减少监督学习的偏差来构建强分类器,越到后面的弱分类越关注前一个弱分类器出错的样本。典型算法有 AdaBoost 和 GBDT(梯度迭代决策树)


Bagging 和 Boosting 采用的都是采样-学习-组合的方式,但在细节上有一些不同,如

  • Bagging 中每个训练集互不相关,也就是每个基分类器互不相关,而 Boosting 中训练集要在上一轮的结果上进行调整,也使得其不能并行计算

  • Bagging 中预测函数是均匀平等的,但在 Boosting 中预测函数是加权的


来自周志华老师的机器学习教科书( 机器学习-周志华):Boosting 主要关注降低偏差,因此 Boosting 能基于泛化性能相当弱的学习器构建出很强的集成;Bagging 主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。



模型越复杂,偏差越小(预测值和训练集真实值越拟合),此时如果换一个训练集,模型的变动就很大(方差大),对数据扰动影响大。


经典集成学习算法主要包括

  • 随机森林

  • AdaBoost

  • GBDT(梯度迭代决策树)


2. 随机森林

通过对数据的行(样本随机放回抽样)和列抽样(属性放回抽样)来训练多个决策树(无剪枝)组成的多分类器(森林)来对新样本投票决策识别

  • (1)每一棵决策树就是一个精通于某一个窄领域的专家(因为我们从 M 个 feature 中选择 m 让每一棵决策树进行学习),这样在随机森林中就有了很多个精通不同领域的专家,

  • (2)对一个新的问题(新的输入数据),可以用不同的角度去看待它,最终由各个专家,投票得到结果

  • (3) 关键参数: n_estimators 决策树个数, max_features 随机选择的特征数

优势:

>在数据集上表现良好

> 在当前的很多数据集上,相对其他算法有着很大的优势

> 它能够处理很高维度(feature 很多)的数据,并且不用做特征选择

> 在训练完后,它能够给出哪些 feature 比较重要

> 在创建随机森林的时候,对 generlization error 使用的是无偏估计

> 训练速度快

> 在训练过程中,能够检测到 feature 间的互相影响

> 容易做成并行化方法

> 实现比较简单



X = iris.data
y = iris.target
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1)
model.fit(X,y)
model.score(X, y)
print(model.predict([X[1,],X[2,]]))
复制代码


重要输出指标: oob_score_: [out of  bagger score] 

oob 样本为每棵树的训练样本外的其他的剩余的样本

1)对每个样本,计算它作为 oob 样本的树对它的分类情况(约 1/3 的树);

2)然后以简单多数投票作为该样本的分类结果;

3)最后用误分个数占样本总数的比率作为随机森林的 oob 误分率即 oob_score_。


2.Adaboost

提高哪些被前一个弱分类器错误分类样本的权重,而降低哪些备正确分类样本的权重。没有正确分类的样本就会得到下一轮弱分类器的更大的关注


训练多个弱分类,进行加权投票表决。加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的表决权重

每一次基础分类模型都是在上一个分类模型基础上


最终的模型为众多学习模型的加权详细组合,分类误差率越小的基础分类器的权重越大,表决权也越大。


Adaboost 每一个基础分类器一步一步的优化错误分类。其基础分类器可以是简单的弱分类器,如果是决策树,树的层级可以很少。



关键参数:n_estimators 分类器个数,base_estimator 基本分类器为决策树分类器,max_depth=1 的弱分类器

from sklearn.ensemble  import AdaBoostClassifier
X = iris.data
y = iris.target
model=AdaBoostClassifier(n_estimators=20)
model.fit(X,y)
model.score(X, y)
print(model.predict([X[100,],X[2,]]))
复制代码


3.GBDT(梯度迭代决策树)算法

GBDT 通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。


每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。

GBDT 和 Adaboost 不同是,每一个决策树的对象是上一个决策树模型的残差。


 每一次的计算是为了减少上一次的残差(residual),,而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型;这样后面的树就能越来越专注那些前面被分错的 instance

关键参数:n_estimators 迭代次数(决策树个数)



from sklearn.ensemble import GradientBoostingClassifier
X = iris.data
y = iris.target
model=GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1,random_state=0)
model.fit(X,y)
model.score(X, y)
print(model.predict([X[100,],X[2,]]))
复制代码


发布于: 刚刚阅读数: 4
用户头像

AIWeker

关注

公众号:人工智能微客(aiweker) 2019.11.21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
机器学习-集成学习_机器学习_AIWeker_InfoQ写作社区