boosting用多种分类器对比效果
原理学习
Boosting主要就是集成学习的一种,是一种个体学习器间存在强依赖关系、必须串行生成的序列化方法。主要分为了adaboost、GBDT和xgboost这三种。
-
adaboost
adaboost是最著名的boosting算法。开始时所有的样本的权重相同,但是经过第一轮的分类总会出现错误,将错误的样本的权重加大,减小正确样本的权重,这样在下一轮的分类中就可以给予上轮出错样本更多的关注。这样,将结果再叠加到之前的结果中,就会因为权重大而对上轮结果造成的影响大,从而一步步修正结果,最终得到一个好的分类器。
-
GBDT
在学习GDBT的时候,感觉和之前的adaboost是截然不同的,adaboost感觉是在每一轮中都在跑同样的的决策树,但是GDBT则是在跑完全不同的树。GDBT从第二轮开始关注的是之前得出结果的一个残差,通过对残差的拟合最终得到一个较好的结果。在我的理解中,经过第一轮之后就已经不是对结果描述了,描述的是第一轮之后的相对误差。因为最终结果是多样的,但是经过上轮的结果,相对误差的种类则是减少的,从而也就是相当于降低了最终叶子的数量。
-
xgboost
感觉xgboost算法相对较难些,故对xgboost算法的理解相对来说比较浅。GBDT算法只利用了一阶的导数信息,xgboost对损失函数做了二阶的泰勒展开,并在目标函数之外加入了正则项对整体求最优解,用以权衡目标函数的下降和模型的复杂程度,避免过拟合。
小结
就我自己的学习理解看来,从不同的解决策略的角度来看,可将adaboost归为一列,将GDBT和xgboost归位一类。因为,adaboost是通过自适应,不断改变样本的权重的方法来实现的,后两者则都是通过不断的减小残差的方式来达到目的的。后两者即GDBT和xgboost有存在着区别,主要就是在于降低残差的方式,前者是只利用了一阶导,后者则利用了二阶泰勒展开。