机器学习中的集成方法简记(Bagging和Boosting)

这里只简单记录所提方法的基本原理和区别,如果想深入学习请移步。

机器学习中的集成方法主要分为两种:Bagging和Boosting。从名称上可以得出大概的判断,Bagging无论是从数据的构造或者是模型的组合形式上来说,都是以袋装的方式进行的,也就是说此算法的基模型是相对独立的,可以并行得到。而对于Boosting来讲,是需要一步步来提升算法的性能,对于涉及到的提升思路而言也可以大致分为两类:(1)数据入手,如adaBoost使用的是改变数据分布来产生不同的模型;(2)结果入手,从对残差的拟合,逐步得到提升模型。

Bagging

  • 原始的Bagging方法这里将给出一个算法过程:引用链接(https://www.cnblogs.com/earendil/p/8872001.html)
    (1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到(有放回的抽取),而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
    (2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
    (3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
  • 随机森林(RF)是Bagging的一个扩展变体
    RF是以决策树为基学习器构建Bagging集成的基础上,进一步在决策树训练的过程中引入了随机属性选择。具体来说,传统的决策树在选择划分属性时是在当前节点的属性集合(假设共包含d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。k控制了随机性的引入程度,推荐值k=log2(d).(摘自西瓜书)

Boosting

引用链接(http://www.360doc.com/content/18/0101/17/40769523_718161675.shtml)

  • AdaBoost原理
    原始的AdaBoost算法是在算法开始的时候,为每一个样本赋上一个权重值,初始是一样重要的。在每一步训练中得到的模型,会使得数据点的估计有对有错,就在每一步结束后,增加分错的点的权重,减少分对的点的权重,这样使得某些点如果老是被分错,那么就会被“重点关注”。然后等进行了N次迭代(由用户指定),将会得到N个简单的分类器(basic learner),然后我们将它们组合起来(比如加权、投票等),得到一个最终的模型。
  • GBDT原理
    GBDT(Gradient Boosting Decison Tree)中的树都是回归树,GBDT用来做回归预测,调整后也可以用于分类(设定阈值,大于阈值为正例,反之为负例),可以发现多种有区分性的特征以及特征组合。GBDT是把所有树的结论累加起来做最终结论的,GBDT的核心就在于,每一棵树学的是之前所有树结论和的残差(负梯度),这个残差就是一个加预测值后能得真实值的累加量。
    Boosting的最大好处在于,每一步的残差计算其实变相地增大了分错instance的权重,而已经分对的instance则都趋向于0。这样后面的树就能越来越专注那些前面被分错的instance。

比如A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。

  • XGBoost
    XGBoost能自动利用cpu的多线程,而且适当改进了gradient boosting,加了剪枝,控制了模型的复杂程度。传统GBDT以CART作为基分类器,特指梯度提升决策树算法,而XGBoost还支持线性分类器(gblinear),这个时候XGBoost相当于带L1(树的叶子节点个数)和L2(每个叶子节点上输出的score的L2模的平方和)正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
    传统GBDT在优化时只用到一阶导数信息(对残差进行拟合时使用的是负梯度),XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。
    XGBoost-Obj.png

总结

Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。(摘自西瓜书)

你可能感兴趣的:(机器学习中的集成方法简记(Bagging和Boosting))