最近开始学习机器学习和数据挖掘的知识 对boosting和bagging算法进行了部分比较 在此做个总结 分享给大家。 初学不久 如果有哪里地方理解的不到位或者错误的地方 欢迎大家不吝指正。
言归正传。决策树可以分为分类树和回归树两大类。分类树以信息增益(率)来选择feature,构建树,用作分类;而回归树则是以均方差来选择feature,构建树,用作预测。boosting思想和bagging思想 都是属于回归树。这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法
框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。
下面主要谈谈两者的不同:
1.样本的选择上
bagging:有放回的抽样,多个训练集时间是相互独立的,使用多个独立的训练集训练出多颗回归树
Boosting:每次都是用相同的训练集,只是改变训练集中训练数据的权重
2.样本的权重
bagging:bagging中所有的样本都是相同权重的
boosting:boosting中的样本权重一般不是都相同的,算法是通过增大错误数据的权重来修正分类器的。
3.预测函数的权重:
bagging:bagging的思想在于完全随机的线性无关的样本、完全相等的概率,所以得到的预测函数权重也是一样的
boosting:它的思想是通过增大错误样本的权重让分类器把重点放在分类错误的样本上来提高准确率;在预测函数权重上,给正确率高的分类器更高的权重以保证整体的正确性。
4.计算的并行性
bagging:由于训练样本是完全独立的,所以多个分类器的训练可以并行执行。
boosting:由于下一个分类器的训练要依赖上一个分类器的分类结果,所以训练只能是顺序进行。
5.树的深度
bagging:一般来讲bagging树深度较大,常常大于15甚至更高
boosting:构建的树深度较小。一般为6即可。
5的解释:泛化误差一般包括两部分:偏差和方差。偏差是指预测值和实际值之间的差距,表征目标函数的准确性;而方差是衡量数据的离散程度,或者说预测函数能不能很好的拟合具有一定离散度的训练数据,它表征着目标函数的抗干扰性(泛化能力)。所以:
(a) bagging算法在样本选择初期就选择了很多的样本,所以能一定程度上保证预测函数的抗干扰性即方差,在整体方差得到了保证的基础上,它就把每个分类器的重点放在了尽量的降低偏差,即提高准确性,提高准确性就需要做更细致的分类和拟合,所以bagging算法可能会把树建的非常深。
(b):boosting算法刚好相反,boosting算法一直使用一组训练数据,通过错误数据的权重来重点关注分类出错的数据,层层迭代,最后能够得到很高的拟合度,即偏差非常低。所以在偏差得到保证的情况下,每个单独的分类器需要保证方差即泛化能力。所以就把树建立的比较浅。