从集成学习到模型的偏差和方差的理解,集成模型偏差理解


模型的偏差和方差的权衡和讨论其实是贯穿在整个机器学习理论当中的。机器学习的每一个算法或者模型都有对这两方面的判断和取舍。今天在看scikit-learn文档关于集成学习的论述中又提到偏差和方差,所以我想谈一谈我对这两个概念的理解。

集成学习

集成学习是一种组合类型的学习方法。它采用多个基分类器组合成一个总分类器,能够达到单个基分类器所达不到的效果。根据将多个基分类器集成在一起的方式,集成学习主要分为两类:

  • 平均方法:例如随机森林, Bagging methods。在平均方法中,系统分别去建立多个基分类器,分类器之间没有任何联系。然后在分类或者回归阶段,各个分类器根据测试数据给出自己的答案,然后系统根据各个分类器给出的结果去综合出最后的结果,比如可以使投票的形式。
  • 提升方法:例如梯度提升决策树GBDT,AdaBoost。在提升方法中,系统模型在训练过程中会先后建立一系列分类器,这些分类器单个可能是弱分类器,但是组合起来就成为一个强分类器。

平均方法通常比其任何一个基分类器效果好因为尝试去降低模型的方差,而提升方法尝试去降低模型的偏差。

方差和偏差

关于方差和偏差的讨论网上已经有很多,这里给出几个:
http://www.zhihu.com/question/27068705
http://www.cnblogs.com/LeftNotEasy/archive/2010/12/19/mathmatic_in_machine_learning_2_regression_and_bias_variance_trade_off.html
这里我只是谈一下我的理解。

方差和偏差的来源

我们机器学习的模型,必不可少地对数据非常依赖。然而,如果你不知道数据服从一个什么样的分布,或者你没有办法拿到所有可能的数据(肯定拿不到所有的),那么我们训练出来的模型和真实模型之间,就会存在不一致。这种不一致表现在两个方面。

用打靶的例子来说明。偏差好比你的瞄准能力;方差好比你使用的枪的性能。

瞄准的时候,正确的方式除了要考虑到三点一线,还要考虑到风向,子弹的速度和重力,距离的远近等等。如果你只会三点一线,那么就会带来偏差,因为你能力比较弱。

而枪的性能也很重要。好的枪精度高,只要你瞄的准,他都能打到瞄准点附近非常小的范围之内;而差的枪,比如你用弹弓,就算每次都瞄的准,但是它打到瞄准点附近的范围变化就比较大。
这里写图片描述

方差偏差与模型复杂度的关系

那么,既然方差和偏差是这么来的,而且看起来无法完全避免,那么我们有什么办法尽量减小其影响呢?

我觉得,避免偏差的话,首先我们需要尽量选择正确的模型,所谓“对症下药”。我觉得有位同行把机器学习算法的使用比作医生开药方,是非常不错的比喻。我们要根据数据的分布和特点,选择合适的算法。

其次,有了合适的算法,我们还要慎重选择数据集的大小。通常训练数据集越大越好,但是当大到数据集已经对整体所有数据有了一定的代表性之后,再多的数据已经不能提升模型的准确性,反而带来模型训练的计算量增加。但是,训练数据太少的话是一定不好的,这会带来过拟合的问题,过拟合就是模型复杂度太高,方差很大,不同的数据集训练出来的模型变化非常大。尽管针对数据量少的情况有一些补救措施,但这是没有办法的办法。

最后,我们还要正确选择模型的复杂度。复杂度高的模型通常对训练数据有很好的拟合能力,但是对于测试数据就不一定了。而复杂度太低又不能很好地拟合数据。模型复杂度和模型的方差和偏差具有如下的关系。
这里写图片描述

方差偏差与模型选择

关于模型选择的方法,有正则化的方法K折交叉验证的方法。

正则化的方法不用多说,通过为目标优化函数加上一个正则化因子,避免模型的复杂度太高。这里主要谈一下交叉验证。

交叉验证的时候,模型的类型已经定了,我们需要确定模型的参数,所以影响方差偏差的因素只剩下来自数据的影响。有一个相对比较偏的理解:

  • 当K值大的时候, 我们会有更少的Bias(偏差), 更多的Variance。
  • 当K值小的时候, 我们会有更多的Bias(偏差),更少的Variance。

然后有一个还算合理的解释,但是我自己也不能找到更好的解释方法。

具体到K-fold Cross Validation的场景,其实是很好的理解的。首先看Variance的变化,还是举打靶的例子。假设我把抢瞄准在10环,虽然每一次射击都有偏差,但是这个偏差的方向是随机的,也就是有可能向上,也有可能向下。那么试验次数越多,应该上下的次数越接近,那么我们把所有射击的目标取一个平均值,也应该离中心更加接近。

更加微观的分析,模型的预测值与期望产生较大偏差,在模型固定的情况下,原因还是出在数据上,比如说产生了某一些异常点。在最极端情况下,我们假设只有一个点是异常的,如果只训练一个模型,那么这个点会对整个模型带来影响,使得学习出的模型具有很大的variance。但是如果采用k-fold Cross Validation进行训练,只有1个模型会受到这个异常数据的影响,而其余k-1个模型都是正常的。在平均之后,这个异常数据的影响就大大减少了。相比之下,模型的bias是可以直接建模的,只需要保证模型在训练样本上训练误差最小就可以保证bias比较小,而要达到这个目的,就必须是用所有数据一起训练,才能达到模型的最优解。因此,k-fold Cross Validation的目标函数破坏了前面的情形,所以模型的Bias必然要会增大。

集成学习与偏差方差

再回到开头集成学习的两种类型。

平均的方法采用多个分类器集体表决,就算其中一个分类器偏差较大,整体不会受其影响,偏差较小;然后,集体表决意味着模型泛化能力比较强,其分类能力相对于其中的每一个单一分类器是稳定的,所以相当于降低了方差。

提升的方法通过构造一系列的弱分类器对相同的训练数据集的重要性区别对待达到对训练数据的精确拟合,因此是降低了偏差。

到此为止,有了新的理解再补充。

版权声明:本文为博主原创文章,欢迎转载,但请注明出处~

相关内容