熟悉集成学习的读者,肯定对bagging和boosting都比较熟悉。在学习这二者的时候,肯定都知道一句话:即bagging是减少variance,而boosting是减少bias。那么,为什么是这样的效果呢?
本篇博客在总结网上多个回答的基础上,加入了自己的理解。
1 variance和bias
先看一下什么是variance和bias
High variance 是model过于复杂overfit,记住太多细节noise,受outlier影响很大;high bias是underfit,model过于简单,cost function不够好。
2 bagging为何减少variance?
Bagging对样本重采样(有放回),对每一重采样得到的子样本集训练一个模型,最后取平均。由于子样本集的相似性以及使用的是同种模型,因此各模型有近似相等的bias和variance(事实上,各模型的分布也近似相同,但不独立,如何理解模型不是独立?下面会有解答)。
为了方便进行讲解,不妨认为各个子模型的bias和variance完全相等。因此,所以bagging后的bias和单个子模型的接近,一般来说不能显著降低bias。另一方面,若各子模型独立,则有,此时可以显著降低variance。若各子模型完全相同,则,此时不会降低variance。bagging方法得到的各子模型是有一定相关性的,属于上面两个极端状况的中间态,因此可以一定程度降低variance。
为了进一步降低variance,Random forest通过随机选取变量子集做拟合的方式de-correlated了各子模型(树),使得variance进一步降低。用公式可以一目了然:设有i.d.(同分布)的n个随机变量,方差记为,两两变量之间的平均相关性为,则的方差为,bagging降低的是第二项,random forest是同时降低两项。详见ESL p588公式15.1)
A:在这里,我简单推导下公式,肯定很多同学不大理解我上述的关于均值和方差的公式来的,先奉上维基百科的均值和方差的知识点。在知识点的基础上,为了方便推导,我们假设只有2个随机变量和
①
②当和完全独立时,参看(方差Sum of uncorrelated variables (Bienaymé formula))
③当和完全相关时,参看(方差Sum of correlated variables)
④的方差,参看(方差Sum of correlated variables)
B: 如何理解各个子模型是不独立的?
可能有的读者认为bagging的重采样的子模型之间是独立的,理由是:每一次抽样都与前一次抽样无关,这样bagging的子模型当然是独立的,这里的误区是认为对训练集(总体的子集)进行子抽样就是描述模型的随机性。
正确的理解应该是:模型可以看做n个独立同分布随机样本的函数f(X1,X2,...,Xn),其中X1,X2,...,Xn是独立同分布的随机变量。如果我们预先设置好,取X1,X2,..,Xn训第一个模型,Xn+1,Xn+2,X2n训第二个模型,那么这两个模型是两组不重叠的独立随机变量集合的函数,因此是独立的。但现在bagging相当于从(1,2,...,m)里抽n个数出来,形成模型f(Xk1,Xk2,...Xkn),那么这样选取的随机变量集合有交叠,就会导致两个模型是两组重叠的随机变量集合的函数,从而不独立。可以考虑一个极端的情形,样本总量是n+1个,每一次重采样取n个样本,那么任意两次的样本都几乎一样,模型也因此几乎一样。
3 boosting为何减少bias?
boosting从优化角度来看,是用forward-stagewise这种贪心法去最小化损失函数。例如,常见的AdaBoost即等价于用这种方法最小化exponential loss:。所谓forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步长a(或者叫组合系数),来最小化,这里
是前n-1步得到的子模型的和。因此boosting是在sequential地最小化损失函数,其bias自然逐步下降。但由于是采取这种sequential、adaptive的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低variance。所以说boosting主要还是靠降低bias来提升预测精度。
参考文献:
为什么说bagging是减少variance,而boosting是减少bias?
机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?