bagging、boosting,adaboost,随机森林和GBDT

关于采样:

bagging:总的训练样本个数P,每次随机抽取N(N<=P)个样本做训练集,训练完了把N个样本重新放回总样本中。显然当前抽取的样本的某些样本可能与前一次抽取的某些样本是相同的。如果有M个分类器(需要训练M次),则抽取M次。

boosting:总的训练样本个数P,每次用全部样本做训练集,每个样本人为的赋于一个权重。

样例权重:

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

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

预测函数:

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

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

并行计算:

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

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

思想:

Bagging:Bagging的途径是降低 方差。是要降低过拟合。因为Bagging是并行的生成一堆决策树,这些决策树可以不做剪枝。它其实是生成了一堆 强学习器。也就是每个学习器都会有过拟合的问题,但是多个组合在一起,可以降低过拟合。

Boosting:Boosting的途径是降低 偏差。是要降低欠拟合。因为Bossting,包括Adaboost和GBDT,都是生成了一堆弱学习器,甚至是只有一层的决策树(这也是为什么叫做树桩)。它是串行的生成一系列的弱学习器,但是彼此之间能够相互学习。

算法核心思想:

bagging:

A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本。共进行m轮抽取,得到m个训练集。(m个训练集之间是相互独立的)

B)每次使用一个训练集得到一个模型,m个训练集共得到m个模型。(又叫分类器,又叫某个算法【ID3,C4.5,CART,KNN,SVM,感知器,BN】)

C)对分类问题:将上步得到的m个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

  boosting:

Boosting(提升)是一族可将弱学习器提升为强学习器的算法。提升算法基于这样一种思想:对于一个复杂的任务,将多个专家的判断总和得出的结果要比任何一个专家单独的判断好。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器表现对训练样本分布进行调整,是的先前基学习器做错的样本在后续收到更多关注(赋予做错的样本更大的权值),然后基于调整后的样本分布来训练下一个基学习器,一直反复进行,直到达到指定值。boosting方法通过分步迭代(stage-wise)的方式来构建模型,在迭代的每一步构建的弱学习器都是为了弥补已有模型的不足。

      通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。 通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

 

关于实现:

     bagging:典型实现Bagging和随机森林。

     boosting:Adaboost和GBDT

随机森林

   RF在实际中使用非常频繁,其本质上和bagging并无不同,只是RF更具体一些。一般而言可以将RF理解为bagging和DT(CART)的结合。RF中的基学习器使用的是CART树,由于算法本身能降低方差(variance),所以会选择完全生长的CART树。抽样方法使用bootstrap,除此之外,RF认为随机程度越高,算法的效果越好。所以RF中还经常随机选取样本的特征属性、甚至于将样本的特征属性通过映射矩阵映射到随机的子空间来增大子模型的随机性、多样性。RF预测的结果为子树结果的平均值。RF具有很好的降噪性,相比单棵的CART树,RF模型边界更加平滑,置信区间也比较大。一般而言,RF中,树越多模型越稳定。

随机森林算法

随机森林训练过程如下:

(1)给定训练集S,测试集T,特征维数F。确定参数:使用到的CART的数量t,每棵树的深度d,每个节点使用到的特征数量f,终止条件:节点上最少样本数s,节点上最少的信息增益m
对于第1-t棵树,i=1-t:
(2)从S中有放回的抽取大小和S一样的训练集S(i),作为根节点的样本,从根节点开始训练
(3)如果当前节点上达到终止条件,则设置当前节点为叶子节点,如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j),概率p为c(j)占当前样本集的比例;如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。利用这f维特征,寻找分类效果最好的一维特征k及其阈值th,当前节点上样本第k维特征小于th的样本被划分到左节点,其余的被划分到右节点。继续训练其他节点。有关分类效果的评判标准在后面会讲。
(4)重复(2)(3)直到所有节点都训练过了或者被标记为叶子节点。
(5)重复(2),(3),(4)直到所有CART都被训练过。

利用随机森林的预测过程如下:

对于第1-t棵树,i=1-t:
(1)从当前树的根节点开始,根据当前节点的阈值th,判断是进入左节点(=th),直到到达,某个叶子节点,并输出预测值。
(2)重复执行(1)直到所有t棵树都输出了预测值。如果是分类问题,则输出为所有树中预测概率总和最大的那一个类,即对每个c(j)的p进行累计;如果是回归问题,则输出为所有树的输出的平均值。

 

adaboost:

bagging、boosting,adaboost,随机森林和GBDT_第1张图片

bagging、boosting,adaboost,随机森林和GBDT_第2张图片

 

bagging、boosting,adaboost,随机森林和GBDT_第3张图片

GBDT与adaboost

GBDT的做法是:每轮迭代结束时(生成了一棵树),会改变样本的标签(也就是Y值);即每一轮的样本标签不相同,是之前的学习残差作为样本的新标签。
adaboost的做法是:每轮迭代结束时(生成了一棵树),会改变样本的权重,换句话说对每个样本判断对错的惩罚不再一样,同时,每个树的权重也不一样。

adaboost用于解决是二分类问题。损失函数是sign(符号函数的)。所以adaboost不改变样本的标签。

adaboost和gbdt的区别
1、gbdt更新的是样本标签 , adaboost更新的是样本的权重

2、gbdt 生成一个新的弱模型时,输入是依赖于之前生成的全部弱模型的结果;而adaboost每个新的弱模型仅依赖于上一个弱模型

3、样本有权重:adaboost中样本的权重其实就是样本的分布权重,不同分布的样本就会产生不同的弱模型;每轮学习的结果是改变每个样本的权重,改变这些权重的目地是希望把在这一轮学习器上学习表现最差的样本的权重加大。也就是说,希望进到下一轮学习的样本中,那些本轮表现差的样本会更被重视。

4、模型有权重
各个权重相同(也可以不同):gbdt
各个权重不同:adaboost

GBDT原理:参考 https://blog.csdn.net/zpalyq110/article/details/79527653

 

参考:

https://www.cnblogs.com/roadofstudy/p/7218745.html

https://blog.csdn.net/liulina603/article/details/78742614

https://www.jianshu.com/p/3b512ca9035b

https://blog.csdn.net/zwqjoy/article/details/80424783

http://www.cnblogs.com/ModifyRong/p/7744987.html

https://blog.csdn.net/zpalyq110/article/details/79527653

你可能感兴趣的:(机器学习)