介绍Stacking、Bagging和Boosting三种方式。
一、Stacking
思想:由原始的训练集训练出若干个单模型,将单模型的输出结果作为样本特征进行整合,并把原始样本标记作为新数据样本标记,生成新的训练集。再根据训练集训练一个新模型,并对样本进行预测。
注意:模型训练时,如果直接使用一级模型对初始的训练样本进行预测来产生二级训练集,会产生较大的过拟合风险。因而,常采用"交叉验证法"或"留一法"来由一级模型未使用的样本产生二级模型的训练集。将样本划分为K份,选择K-1份作为"训练集",剩余的一份作为"测试集",因而总共有K种组合方式。每次使用一种方式来训练T个模型(模型可以是"异质的",也可以是"同质的"),利用测试集产生一份训练数据作为样本特征,对应的原始测试集数据的样本标记被作为新数据样本标记来使用。最后,将由一级模型产生的K次结果组合到一起,作为二级模型的输入进行训练模型。
二、Bagging
思想:对训练集进行有放回的抽样得到子训练集,比较著名的是0.632自助法。每个基学习器基于不同的子训练集进行训练,然后综合所有基学习器的预测值得到最终的预测结果。常采用"投票法",即将票数最多的类别作为预测类别。
三、Boosting
思想:模型的训练是按照顺序的,每个基模型都会在前一个基模型的基础上进行学习,最终总和所有基模型的预测结果得到最终的预测结果。常采用"加权法"。
四、为何集成学习的效果比单个学习器的效果好呢?
(1) 无法得到最好的单个学习器,不如组合到一起来使用;
(2)可以得到最好的学习器,但是由于算法运算本身的局限性而无法找到最优解,采用集成学习可以找到近似解来弥补上述的不足。
五、集成学习中的"偏差"和"方差"
Stacking和Bagging中的基模型都是"强模型"(低偏差高方差),Boosting中的基模型都是"弱模型"(低方差高偏差)。
分析基模型和集成模型的"偏差"和"方差":
Bagging:集成模型的偏差和基模型的偏差近似,这也要求了基模型必须是"强模型"。
因为各个基模型之间的相关性<1,所以集成模型的方差<=基模型的方差。
随着基模型数量的增加,集成模型的方差在减少,从而防止过拟合的能力在增强。当基模型的数量到达一定的程度时,防止过拟合的能力也到达了极限。
Random Forest便是通过引入"特征采样"和"样本采样"来降低基模型的相关性的,从而降低集成模型的方差。
Boosting:因为各个基模型之间的相关性=1,所以集成模型的方差=基模型的方差,这也要求了基模型必须是"弱模型"。
由于采用基于贪心的"前向差法",所以随着基模型的数量的增加,集成模型的偏差在减小。
GBDT便是Boosting的集成学习方式。
六、随机森林
由很多决策树组成,彼此之间没有关联。对于新样本,每颗决策树会分别进行判断,然后基于投票法或平均法给出分类结果。
思想:随机选择样本(有放回采样);
随机选择特征:每个节点在分裂时都是随机选择特征的(区别于每棵树随机选择一批特征);
构建决策树;
随机森林投票/平均(分类时采用投票,回归时采用平均)。
优点:易于实现并行化,在大数据集上有明显优势;
可以处理高维度数据,不用做特征选择(特征是随机选择),可以给出特征重要性程度。
由于两种随机,使得每棵树即使不剪枝也不会出现"过拟合"。
对于缺失值和异常值不敏感。
可以处理不平衡数据,平衡误差。
可以用于分类,也可以用在回归中。
缺点:对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响。
当数据噪声比较大时,会产生过拟合现象。
七、AdaBoost(自适应增强)
自适应:前一个基本分类器中分错的样本会得到加强,加权后的样本被再次用来训练下一个基本分类器。同时,在每一轮中加入一个新的"弱分类器",直到达到某个预定的足够小的错误率或预先指定的迭代次数。
思想:初始化所有的训练样本权重,使得每个样本具有相同的权重。
训练若分类器,若样本分类正确,则在下一个训练集中对应的样本的权重就会降低;反之,则会提高。用更新权值后的样本集去训练下一个分类器。
分类器训练完成后,加大分类误差率小的弱分类器的权重,降低分类误差率大的弱分类器的权重。将所有的弱分类器组合成强分类器。
学习过程:学习算法是前向分布学习算法,损失函数是指数的分类问题。
为了防止过拟合,通常会加入正则化,将其称为步长。
较小的步长意味着我们需要更多的弱学习器的迭代次数,我们通常使用步长和迭代次数一起来决定算法的拟合效果。
优点:可以用分类或回归模型来构建弱学习器,用于分类和回归;
不容易发生过拟合;
精度高。
缺点:对异常点敏感,异常点会获得较高的权值。
八、GBDT(梯度提升树)
由三部分组成:回归决策树(CART回归树)、梯度提升和Shringkage。
注:由于只有是回归树,其值加减才是有意义的GBDT,所以GBDT中的所有树都是回归树,而不是分类树。
思想:每棵树都以之前树得到的残差来更新目标值,将每棵树的值进行相关的累加得到最终的GBDT的预测值。
由于要考虑到所有的基模型,所以模型的训练会变得比较复杂。对此,可以采用"贪心"的解决手段,即每次只训练一个基模型。
损失函数:均方损失函数。
残差:均方损失函数关于预测值的反向梯度。
注:由于GBDT对于异常点比较敏感,所以可以将损失函数由"绝对损失"或"Huber损失函数"来代替。
Shringkage(缩减):GBDT不直接用残差来修复误差,而是每次只修复一点点。每棵树进行累加时需要乘以这个"Shringkage",当其减小时,基模型的数量也会增大。
优点:可以自动进行特征组合;
可以给出特征的重要性程度,进行特征选择;
对于缺失值,按照CART树的方式进行"缺失值"处理;
可以处理各种类型的数据。
缺点:对异常值比较敏感。
九、GBDT(梯度提升树)VS AdaBoost VS Random Forest VS XGBoost
1. GBDT(梯度提升树)VS AdaBoost
相同点:都是Boosting的方式来实现,都是弱分类器;
都是采用前向分布算法。
不同点:迭代思路不同:GBDT是使用残差,AdaBoost是利用错分样本;
损失函数不同:GBDT是使用绝对损失或者Huber损失函数,AdaBoost是使用指数损失。
2. GBDT(梯度提升树)VS Random Forest
3. GBDT(梯度提升树)VS Random XGBoost
十、XGBoost VS LightGBM