集成学习之如何由弱变强
在所有的机器学习算法中,集成学习算是最“励志”的典型了,因为它是把一系列的很简单的模型集成起来,最终组成强大的模型。
也就是说,纵然不是天才,而是普通如我们,也有机会去取得卓越的成就。本文将会对集成学习进行详细介绍,并探讨其将学习器由弱变强的原理。
以下的正文会从介绍弱学习器的概念开始,然后针对集成学习的三种策略bagging、boosting和stacking,分别介绍其原理,并各自举例说明,最后对三者进行比较总结。
正文:
学习器是一个机器学习领域的概念,可以理解为一个用来进行预测判断的模型。那么,弱学习器就是一个比随机猜测稍微好那么一点的模型。
打个比方,如果让一个模型做有4个选项的选择题,正确率稍大于25%,比随机猜测好但也好不了多少,那它就是一个弱学习器。
其中,值得注意的几点是:
弱学习器的正确率要大于随机猜测的正确率,如果两者相等则称之为无效学习器,如果前者小于后者称之为坏学习器(俗称的“猪队友”)。
弱学习器的正确率只稍大于随机猜测的正确率,这里的“稍大于”只是一个定性的概念。
弱学习器的正确率不能太高,否则就算是强学习器了。
Bagging全称Bootstrap aggregation,是在原训练集Z的基础上通过Bootstrap抽样,产生B个新的训练集,在每个新的训练集上训练一个模型,最后对这些模型进行平均得到最终模型。
其流程示意图如下:
(1)Bootstrap sampling
(2)Single model fitting
这个过程比较简单,只需要在各个新产生的数据集上拟合模型即可。这些拟合的模型结构是一样的,有差别的仅仅是训练数据不同导致的模型参数差异。
(3) Models aggregation
模型集成过程也非常简单,将所有的模型预测结果进行平均即可。
(4) Bagging由弱变强的原因
我们在此举个例子,来说明Bagging可以让弱学习器集成强学习器的原因。还是一群很弱的学生做选择题的例子,我们简化一下。
Boosting是每次从基模型集合中选择一个,对现有模型逐步做加法扩展,从而得到最终的强学习器的。
(1)模型形式
(2)模型求解
(3)流程示意图
(4)Boosting由弱变强的原因
Boosting将弱学习器集成变强的原因非常直观。从上面的流程图可以看出,其实前向分步算法的每次迭代过程,都是在拟合当前模型在训练集上的残差。每次将残差减小一点点,最终会达到完美。
Boosting很像一个产品迭代的过程,虽然不能一下子做到完美,但坚持不懈的迭代优化,最终必定能惊艳到用户的。
Stacking 顾名思义,是模型堆叠的意思,即在模型的基础之上建立模型。
模型可以多次堆叠,但实际应用中考虑到计算量可能过大和过拟合问题,一般堆叠不超过3次。以下以2次堆叠为例,进行说明。
(1)模型形式
(2)流程示意图
(3)模型求解
Stacking的过程,可以对各个模型进行分别求解。显然,模型堆叠提升最终的模型容量,让最终模型可以刻画非常复杂的模式,但同时也增加了很多的计算量。
(4)Stacking由弱变强的原因
从stacking的流程图可以看出,其结构和神经网络很相似,stacking每一层堆叠的模型相当于神经网络的激活函数;
如果从特征抽取的角度看神经网络,因为神经网络的上层会共享下层的网络结构和参数,因此神经网络的特征相关性会更强一些,而stacking使用的特征差异性更大。
因此,stacking的过程扩充了特征空间的范围,强化了最终模型的表达能力。
上面,我们回顾了集成学习的3种基本策略,现在做一个简短总结。
Bagging、Boosting和Stacking都是集成策略,是通过将弱学习器按照某种方式集成起来,来最终提升模型预测能力。
1. Bagging通过模型平均,降低了预测方差,提升了模型的稳定性,从而提升模型能力。
Bagging的关键是各个模型之间要尽量独立,并且不能引入坏的学习器。用树模型做Bagging,就得到了随机森林。
2. Boosting通过前向分步的方式建模,每次在现有模型的基础上进行拟合,从而提升模型能力。
Boosting的关键有两点,一个是准确找到残差,第二是要迭代够快。Boosting的过程,如果是在分类问题中使用指数损失函数,就得到AdaBoost;而如果用可导的损失函数,并用梯度来代替残差,就得到GradientBoost。
3. Stacking则是通过对不同模型进行堆叠,通过提取多样化的特征,来提升模型能力。Stacking则更像一个DIY过程,可以根据需要自己组合。
Stacking的关键是模型之间差异要尽量的大(不要是同种类型的模型只是参数不同),这样才能更好地提取特征。
打个比方,可以把Bagging当成是委员会,通过集体决策来提升稳定性,降低风险;Boosting类似于产品迭代的过程,一步步的完善,越做越好;而Stacking则是像汽车生产一样,各个部件有自己的流水线,最后统一简单组装。
天下没有免费的午餐,虽然无论多弱的学习器集成学习都可以使之变强,但变强本身并非毫无代价,其难度和艺术统统都在“集成”的过程中。
看到这里,不妨往生活中延伸一下:
1. 如果你是一个leader,你是更多的是在抱怨自己的下属太弱鸡,还是将他们集成了一个强大的团队?
2. 从个人角度来看,你有没有准确地找到自己当前的不足之处,让今天的你有没有比昨天的你进步一点点,经过若干次的迭代之后彻底变强?
3. 你想做一件事情的时候,比如做一个产品或开一家公司,有没有很好地利用现有的产业成果,最大程度地提高效率?
-end-
还能看点啥?