集成学习,就是机器学习里面的协同作战。
如果训练出一个模型比较弱,又训练出一个模型还是比较弱,但是,几个不大一样的模型组合起来,很可能其效率会好过一个单独的模型。这个思路导出的随机森林、梯度提升决策树,以及XGBoost等算法,都是常用的、有效的、经常在机器学习竞赛中夺冠的“法宝”。
它的核心策略是通过模型的集成减少机器学习中的偏差(bias)和方差(variance)。
方差是从统计学中引入的概念,方差定义的是一组数据距离其均值的离散程度。而机器学习里面的偏差用于衡量模型的准确程度。
注:机器学习内部参数w和b中的参数b,英文也是bias,它是线性模型内部的偏置。而这里的 bias是模型准确率的偏差。两者英文相同,但不是同一个概念。
偏差评判的是机器学习模型的准确度,偏差越小,模型越准确。它度量了算法的预测与真实结果的离散程度,刻画了学习算法本身的拟合能力。也就是每次打靶,都比较靠近靶心。
方差评判的是机器学习模型的稳定性(或称精度),方差越小,模型越稳定。它度量了训练集变动所导致的学习性能变化,刻画了数据扰动所造成的影响。也就是每次打靶,不管打得准不准,击中点都比较集中。
低偏差和低方差,是我们希望达到的效果,然而一般来说,偏差与方差是鱼与熊掌不可兼得的,这被称作偏差-方差窘境(bias-variance dilemma )。
机器学习性能优化领域的最核心问题,就是不断地探求欠拟合-过拟合之间,也就是偏差 - 方差之间的最佳平衡点,也是训练集优化和测试集泛化的平衡点。
如图所示,如果同时为训练集和测试集绘制损失曲线,大概可以看出以下内容。
在训练初期,当模型很弱的时候,测试集和训练集上,损失都大。这时候需要调试的是机器学习的模型,或者甚至选择更好算法。这是在降低偏差。
在模型或者算法被优化之后,损失曲线逐渐收敛。但是过了一段时间之后,发现损失在训练集上越来越小,然而在测试集上逐渐变大。此时要集中精力降低方差。
因此,机器学习的性能优化是有顺序的,一般是先降低偏差,再聚焦于降低方差。
通过调整数据集的大小来观测损失的情况,进而判定是偏差还是方差影响着机器学习效率。
这是因为,数据集越大,越能够降低过拟合的风险。数据集越大,训练集和测试集上的损失差异理论上应该越小,因为更大的数据集会导致训练集上的损失值上升,测试集上的损失值下降。
知道偏差大还是方差大,就知道应该把模型往哪个方向调整。
不同的模型,有不同的复杂度,其预测空间大小不同、维度也不同。一个简单的线性函数,它所能够覆盖的预测空间是比较有限的,其实也可以说简单的函数模型方差都比较低。这是好事儿。那么如果增加变量的次数,增加特征之间的组合,函数就变复杂了,预测空间就随着特征空间的变化而增大。再发展到很多神经元非线性激活之后组成神经网络,可以包含几十万、几百万个参数,它的预测空间维度特别大。这个时候,方差也会迅速增大。
简单的线性函数虽然方差低,但是偏差高。对于稍微复杂的问题,根本不能解决。那么只能用威力比较大的、覆盖面比较大的‘大杀器’来解决问题了。而神经网络就像是原子弹,一旦被发射,肯定能够把要打击的目标击倒。但是如何避免误伤无辜,降低方差,就又回到如何提高精度的问题了。这样,偏差一方差窘境就又出现了。
集成学习之所以好,是因为它通过组合一些比较简单的算法来保留这些算法低方差的优势。在此基础之上,它又能引入复杂的模型来扩展简单算法的预测空间。这样,我们就就理解为何集成学习是同时降低方差和偏差的大招。
集成学习算法有:
(1).Bagging:集成多个模型,以降低整体的方差
(2).Boosting:提升较弱的模型,以降低弱模型的偏差
(3).Stacking/Blending:利用基模型的预测结果,作为新特征训练新模型
(4).Voting/Averating:集成基模型的预测结果
学习机器学习的参考资料:
(1)书籍
利用Python进行数据分析
西瓜书
百面机器学习
机器学习实战
阿里云天池大赛赛题解析(机器学习篇)
白话机器学习中的数学
零基础学机器学习
图解机器学习算法
…
(2)机构
光环大数据
开课吧
极客时间
七月在线
深度之眼
贪心学院
拉勾教育
博学谷
…