集成学习系列目录:
集成学习②——Adaboost算法原理及python实现
集成学习③——Sklearn-Adaboost库参数及实战
一、集成学习的原理
集成学习就是"博采众长",将一组弱学习器通过一定方法给合在一起得到强学习器,这个强学习器的泛化能力相对任何一个弱学习器都要好,甚至还有起到三个臭皮匠,赛过诸葛亮的效果
这里有2个问题,有哪些弱学习器可以用?怎么结合?
弱学习器:以分类来说,分类效果要优于随机分类,也就是准确率高于50%的学习器,且计算速度快,通常以决策树和神经网络为主,一组弱学习器可以是一样的,也可以不一样,目前常用的算法还是以同样的为主。
二、集成学习的分类
如何结合:根据弱学习器之间是否存在依赖性,分为Boosting和Bagging。
① Boosting:使增长,顾名思义,后训练的学习器会比前一个要更强,代表算法有 Adaboost和Gradient Boosting Tree(GBDT);
② Bagging:袋子,源于从袋子里有放回性取样,是说各学习器基于随机样本独立训练,后训练的学习器并比一定比前一个好,代表算法是随机森林
1、Boosting算法原理
Boosting算法可以通过这一张来解释,图来自于机器学习大神 @ 刘健平
从图上可看出,Boosting算法主要有以下几个步骤:
① 先赋予所有样本相同的权重,比如10个样本,每个样本都是1/10
② 先用一个弱分类器训练后,得到误差率
③ 通过误差率更新样本的权重系数
④ 迭代第二步和第三步,直到误差率达到要求的范围
⑤ 通过一定的方法将弱分类器结合,得到最终分类器
Adaboost是将错误分类的样本权重之和作为误差率,基于误差率降低分类正确样本的仅重,提升分类错误样本的权重,同时计算出此弱学习器最终学习器中的权重,误差率越低,权重越高
2、Bagging算法原理
从图上可看出,Bagging算法原理更为简单明了,主要有以下几个步骤:
① 从训练集中随机抽样,得到m个样本
② 基于m个样本训练得到一个弱学习器
③ 重复①和②,直到弱学习器数量达到设定要求
④再通过一定策略将弱学习器结合起来,得到最终的分类器
随机采用使得的是自助采样,即有放回式地采样,因此弱分类器之间的训练样本会有重复的一部分,也会有一部分样本始终没有被抽到。
随机森林在样本随机的基础上,还对每棵树的特征选择上也做了随机,进一步提升了模型的泛化能力。
三、集成学习的组合方法
① 投票法
投票法是用于分类问题,由多个学习器投票,哪个类别最多就是哪个。所谓的少数服从多数,如果出现数量相同,那就在相同中随机选择一个;
升级版:
绝对多数投票法,在相对多数投票结果基础上,还要过半才算有效;
加权投票法:赋予不同学习器不同的权重,再加权求和
② 平均法
平均法用于回归预测问题,对学习器的结果求算法平均,得到最终的预测结果
升级版:加权求和
③ stack法
上2个方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,代表方法是stacking。
当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。