集成学习
1.Bagging
1.1 随机森林RF
1.2 随机森林优缺点
1.3 Bagging与RF区别
2.Boosting
2.1 Boosting和Bagging区别
2.2 AdaBoost
2.3 提升树Boosting Tree
2.4 梯度提升决策树Gradient Boosting Decision Tree
2.4 GBDT与RF的区别
2.5 XGBoost
2.6 XGBoost和GBDT区别
3.Stacking
集成学习:
将弱学习器或较强学习器集成起来获得一个更强的学习器。要获得更好的集成效果,要求个体学习“好而不同”,即要求个体学习器具有不错的准确率,并且个体学习器之间具有差异性。分为不同个体学习器之间的集成(异质集成,eg:Stacking)和相同个体学习器之间的集成(同质集成)。
主要分为两类:
- 个体学习器之间存在强大的依赖关系,必须串行生成的序列化方法,代表:boosting算法。
- 个体学习器之间不存在依赖关系,可以同时生成的并行化方法,代表:bagging 算法。
1)Bagging + 决策树 = 随机森林
2)Boosting +决策树 = 提升树
3)Gradient Boosting + 决策树 = GBDT(梯度提升决策树)
1.Bagging
并行化集成学习方法,基于“自助采样法”(bootstrap sampling)。工作机制:重复k次从容量为n的原始数据集中随机有放回地抽取n个样本得到k个独立同分布的训练数据集,然后基于这k个训练数据集分别训练出k个个体学习器,集成结果对分类问题采用投票法,对回归问题采用平均值法。代表:随机森林。
1.1 随机森林RF
以决策树为基学习器构建Bagging集成,在决策树的训练过程中进一步引入随机特征选择。(两层随机采样 + 完全分裂)。
工作机制:1)从容量为n的原始数据集中
随机有放回
地去n个样本(其余未取到的样本作为对应测试集进行误差率评估),并从m个特征中
随机不放回
地抽取m'个特征(m'<
2)重复1)操作k次,构造出k个相互独立的决策树,最后对这k个决策树进行线性组合,集成结果对分类问题采用投票法,对回归问题采用平均值法。
1.2 随机森林优缺点
优点: (1)能够处理高维数据集,并且不用做特征选择;
(2)可以解决多分类问题、回归问题和非线性问题;
(3)能够有效处理大量数据集,可以并行化训练,训练和预测速度快;
(4)能够有效估计缺失值,即使数据集中存在大量缺失数据,也能保证良好性能;
(5)两次随机采样过程保证了充分的随机性,使得不容易出现过拟合,模型泛化能力强;
(6)在样本不平衡情况下,可以平衡误差;
(7)能够输出特征的重要程度和特征之间的相关性;
(8)对噪声和异常值不敏感。
缺点: (1)对小样本数据集和低维数据集不一定得到很好的效果。
(2)执行速度虽然比Boosting等快,但是比单个的决策树慢很多。
(3)可能会出现一些差异度非常小的树,淹没了一些正确的决策。
1.3 Bagging与RF区别
bagging算法通过样本扰动的方法保证个体学习器的多样性,rf在此基础上增加了特征扰动,两个随机采样的过程充分保证了随机性,所以随机森林不需要剪枝,也不会出现过拟合。个体学习器的差异性使得随机森林随着个体学习器的增加性能大幅度增加,且强于bagging。
2.Boosting
串行化集成学习方法。工作机制:先从初始训练集中学习一个个体学习器,再根据个体学习器的表现调整训练样本的权重,提高被分错的样本的权重,而减小被分对样本的权重,使得下一个个体学习器对分错样本有更好的效果,重复上述操作直到得到k个个体分类器,最后对它们进行线性加权组合,每个个体学习器的权重与其分类错误率成反比。代表:AdaBoost、 GBDT、XGBoost。
2.1 Boosting和Bagging区别
1)样本选择:Bagging训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是相互独立的。Boosting每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重:Bagging每个样例的权重相等,Boosting根据错误率不断调整样例的权值,提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值 。
3)个体学习器权重:Bagging所有个体学习器的权重相等,Boosting每个个体学习器的权重不同,与其分类错误率成反比。
4)并行计算:Bagging各个个体学习器可以并行生成。Boosting各个个体学习器只能串行生成,因为后一个个体学习器的训练需要前一轮训练的结果。
5)泛化能力:Bagging减小了方差,Boosting减小了偏差。
2.2 AdaBoost
AdaBoost算法在训练过程中不断减少了偏差。它可以认为是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习算法。
2.3 提升树Boosting Tree
提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式:残差 = 真实值 - 预测值 。提升树即是整个迭代过程生成的回归树的累加。
2.4 梯度提升决策树
Gradient Boosting Decision Tree
提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。
但对于一般的损失函数,往往每一步优化没那么容易,如上图中的绝对值损失函数和Huber损失函数。针对这一问题,Freidman提出了梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。
2.4 GBDT与RF的区别
(1) RF个体学习器可以是回归树或分类树,GBDT个体学习器只能是回归树;
(2) RF个体学习器可以并行生成,GBDT个体学习器只能串行生成;
(3) 对于集成结果,RF采用多数表决法/平均值罚,GBDT采用累加/加权累加;
(4) RF对异常值和噪声不敏感,GBDT对异常值和噪声很敏感;
(5) RF减少了方差,GBDT减少了偏差。
2.5 XGBoost
http://note.youdao.com/noteshare?id=134afc84da2e26b62b4a158906bc4b9b&sub=E9DBBE9BA36B4F4DBA9D12A01E6E9F33
2.6 XGBoost和GBDT区别
(1) xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数和每个叶子节点权重的L2模的平方和。从bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
(2) 传统GBDT以CART作为个体分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
(3) 传统GBDT在优化时只用到一阶导数信息,xgboost则对目标函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义目标函数,只要函数一阶可导和二阶可导。
(4) xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
(5) 可以处理缺失数据,xgboost可以自动学习出它的分裂方向。
(6) xgboost支持并行化处理。注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的,xgboost的并行是在特征粒度上的。决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
(7) 可并行的近似直方图算法。树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效率就会变得很低,所以xgboost还提出了一种可并行的近似直方图算法,用于高效地生成候选的分割点。
(8) xgboost支持交叉验证,GBDT不支持。
(9) xgboost实现了面向体系结构的优化,针对cache和内存做了优化。
(10) xgboost基于分布式通信框架rabit,可以运行于yarn和MPI。
3.Stacking
Stacking是stacked generalization的缩写,一般分为两层学习过程:第一层在原始数据集中通过交叉验证法分别使用T种算法学习T个个体学习器,产生T组维度为1的预测结果,然后堆积得到T维特征向量作为第二层的输入,和原始样本真实值组成的数据集进行第二层训练。
stacking框架强大的地方在于:1)在第一层训练中可以选择许多不同的分类器,2)在第二层训练中可以加入额外的特征扩充特征向量,3)可以把整个框架扩展为3层训练或更多层训练,但是一般只采用两层训练。