集成学习、AdaBoost、GBDT

集成学习

集成学习包含了boosting和bagging,boosting是串行的,bagging是并行的。
boosting:例如adaboost,基本思路是通过基分类器的层层叠加,每一层在训练的时候,对前一层的基分类器分错的样本给予更高的权重,测试时,对所有分类器的结果进行加权得到最后的结果。—串行。

bagging: 也就相当于我们的模型融合,最简单的就是投票。通过对数据集进行采样(数据可以相同可以不同),对基础模型分别进行训练,最后进行集成。

boosting是聚焦于上一次分错的样本,目的是减少集成分类器的偏差。—偏差的原因是分类器表达能力有限导致的系统性错误。
bagging是分而治之,再对模型做综合,目的是减少集成分类器的方差。—方差的原因是分类器对样本的分布过于敏感导致的过拟合。

基分类器

常用的基分类器是决策树,基分类器肯定是要样本不同的情况下得到的模型尽可能区别开来,才有集成的意义。
所以选择决策树有几方面的原因:
1、数据样本的权重可以整合到训练过程中
2、样本的扰动对决策树的影响较大—不稳定的分类器更加适合于集成学习。
3、决策树的表达能力和泛化能力可以通过调节树的层数进行调整。–所以模型可以实现较多的变化。

随机森林(bagging)能否把决策树改成 线性分类器或者是K-means?
不可以,因为线性分类器和K-means对数据的扰动影响不大,本身的方差不大,所以不合适。对于较为稳定,不受样本分布影响的分类器来说,bagging更加不利。增大偏差。
bagging适用于本身的方差较大,对样本的分布较为敏感的,这样集成之后 方差就比基分类器的方差更小,可以获得更好的表现。

从偏差和方差理解boosting和bagging?
boosting是再上一个分类器分错的样本上进行的增强,loss不断减小,可以看出是在减少偏差,与方差的减少无关–模型之间是强相关的,因为上一个模型的错误输入到下一个模型中去了;
bagging针对的是 方差较大,对样本的分布比较敏感的模型,所以集成是有助于减少模型的方差,模型之间的独立性较大,相关性较小。各模型越独立,最后得到的集成模型的方差越小,完全独立的时候就相当于方差除以模型数目。

模型的复杂度越高,偏差越小,方差越大; 复杂度越低,偏差可能越大,方差越小。

Bagging和Boosting的区别:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5)、总结

这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

(1)Bagging + 决策树 = 随机森林

(2)AdaBoost + 决策树 = 提升树

(3)Gradient Boosting + 决策树 = GBDT

Gradient Boosting

boosting是一种思想,Gradient Boosting是一种实现Boosting的方法,它的主要思想是,每一次建立模型,是在之前建立模型损失函数的梯度下降方向。损失函数描述的是模型的不靠谱程度,损失函数越大,说明模型越容易出错。如果我们的模型能够让损失函数持续的下降,说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度的方向下降。
一般的梯度下降是以一个样本点(xi,yi)作为处理的粒度,w是参数,f(w;x)是目标函数,即减小损失函数L(yi,f(xi;w)),优化过程就是不断处理参数w(这里用到梯度下降),使得损失函数L最小GB是以一个函数作为处理粒度,对上一代得到的函数或者模型F(X)求梯度式,即求导,决定下降方向。

转自:https://blog.csdn.net/u014755493/article/details/70225437

Adaboost

AdaBoost是通过组合一系列弱分类器来得到强分类器的算法:
首先, AdaBoost的两个关键,增大分类错误样本的权重降低上一轮分类正确的样本的权重集成的时候采用加权多数表决,分类误差率小的模型权重大。----通过加入新的分类器,分类器错误数目越少,分类器所占的权重越高; 增加分类错误的样本的权重。

1、初始化模型参数,刚开始可以是wi = 1/ N (N是训练数据的数目)
2、计算模型G(x)在训练数据集上的分类误差率。em = wi * (G(xi) ≠Yi) ,也就是分错的乘以样本对应的权重。
3、由分类误差率计算模型的权重系数,αm = 1/2 * log((1-em)/em).-----误差率越小,权重越大。
4、由模型的权重和本轮数据集的权重,更新数据集的权重。
在这里插入图片描述

最终的停止时看总的分类器的集成在数据集上误分类的个数小于阈值,则分类完成。

CART决策树

CART算法包括两个步骤,一是决策树的生成;而是决策树的剪枝。
下面介绍的GBDT使用最多的是CART(GINI指数),回归树。
  CART分类回归树是一种典型的二叉决策树,可以做分类或者回归。如果待预测结果是离散型数据,则CART生成分类决策树;如果待预测结果是连续型数据,则CART生成回归决策树。数据对象的属性特征为离散型或连续型,并不是区别分类树与回归树的标准,例如表1中,数据对象xi的属性A、B为离散型或连续型,并是不区别分类树与回归树的标准
  作为分类决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本所属类别最多的那一类(即叶子节点中的样本可能不是属于同一个类别,则多数为主);作为回归决策树时,待预测样本落至某一叶子节点,则输出该叶子节点中所有样本的均值。
Gini指数越小,分类越纯,说明越能够准确地把样本分成对应的类别,二叉树的两个分支尽可能是不同的类别–纯度高。
分类树:
在这里插入图片描述
在这里插入图片描述
回归树:待预测结果为连续型数据—每次根据方差选择一个最小方差的属性来分类。-----选择最小方差等同于平方损失最小,所以等价于回归树是根据平方损失最小来决策的。

区别于分类树,回归树的待预测结果为连续型数据。同时,区别于分类树选取 Gain_GINI为评价分裂属性的指标,回归树选取 Gain_σ为评价分裂属性的指标。选择具有最小 Gain_σ的属性及其属性值,作为最优分裂属性以及最优分裂属性值。 Gain_σ值越小,说明二分之后的子样本的“差异性”越小,说明选择该属性(值)作为分裂属性(值)的效果越好。
在这里插入图片描述
在这里插入图片描述

GBDT

在每一轮的迭代中,首先计算出当前模型在所有样本上 的负梯度–上一轮的输出与目标值的差,然后以该负梯度(也就是残差)作为目标训练一个新的决策树来拟合残差,并计算出该弱分类器的权重,实现对模型的更新。

实例解析
注意这里的决策树得到的结果是相加的关系,因为后续是相当于预测了之前的残差。最终的分类器是所有基分类器的和。

假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。最后将每次拟合的岁数加起来便是模型输出的结果。

将上一次预测的残差作为下一次预测的真实值(label)进行预测。
在这里插入图片描述
是在损失函数最小的情况下,拟合残差的结果。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
写得好
在这里插入图片描述

残差与负梯度相同的原因

因为GBDT采用的是平方损失,所以求导之后等于残差。
在这里插入图片描述
1.对任何任何机器学习里面的损失函数优化,最简单的就是求梯度,沿着负梯度方向迭代;
2.当损失函数是mse的时候,(y - f)^2,求负梯度恰好就是2(f - y),这个又恰好被叫做残差;只不过人们先发明了提升树,在找到了更一般的梯度提升树罢了;

梯度提升与梯度下降

梯度提升和梯度下降法的关系就是:殊途同归。梯度提升的目的也是梯度下降,只不过相比于普通梯度下降通过直接更新参数来梯度下降梯度提升通过累加弱学习器来梯度下降
梯度提升就是每次针对误差进行拟合,得到新的弱学习器,累加的过程中不断减少误差。

注意不要把梯度提升望文生义地理解成"梯度上升"。

猜你喜欢

转载自blog.csdn.net/caihuanqia/article/details/113762398
今日推荐