Press "Enter" to skip to content

集成学习之如何由弱变强

Last updated on 2019年3月15日

 

写在前面

 

在所有的机器学习算法中,集成学习算是最“励志”的典型了,因为它是把一系列的很简单的模型集成起来,最终组成强大的模型。

 

正文:

 

Part 0

 

弱学习器

 

学习器是一个机器学习领域的概念,可以理解为一个用来进行预测判断的模型。那幺, 弱学习器就是一个比随机猜测稍微好那幺一点的模型。

 

打个比方,如果让一个模型做有4个选项的选择题,正确率稍大于25%,比随机猜测好但也好不了多少,那它就是一个弱学习器。

 

其中,值得注意的几点是:

 

弱学习器的正确率要大于随机猜测的正确率,如果两者相等则称之为无效学习器,如果前者小于后者称之为坏学习器(俗称的“猪队友”)。

 

弱学习器的正确率只稍大于随机猜测的正确率,这里的“稍大于”只是一个定性的概念。

 

弱学习器的正确率不能太高,否则就算是强学习器了。

 

Part 1

 

Bagging

 

Bagging全称Bootstrap aggregation,是在原训练集Z的基础上通过Bootstrap抽样,产生B个新的训练集,在每个新的训练集上训练一个模型,最后对这些模型进行平均得到最终模型。

 

其流程示意图如下:

 

 

(1) Bootstrap sampling

 

 

(2) Single model fitting

 

这个过程比较简单,只需要在各个新产生的数据集上拟合模型即可。这些拟合的模型结构是一样的,有差别的仅仅是训练数据不同导致的模型参数差异。

 

(3)  Models aggregation

 

模型集成过程也非常简单,将所有的模型预测结果进行平均即可。

 

(4)  Bagging由弱变强的原因

 

我们在此举个例子,来说明Bagging可以让弱学习器集成强学习器的原因。还是一群很弱的学生做选择题的例子,我们简化一下。

 

 

 

Part 2

 

Boosting

 

Boosting是每次从基模型集合中选择一个,对现有模型逐步做加法扩展,从而得到最终的强学习器的。

 

(1)模型形式

 

 

(2)模型求解

 

 

 

(3)流程示意图

 

 

 

(4)Boosting由弱变强的原因

 

Boosting将弱学习器集成变强的原因非常直观。从上面的流程图可以看出,其实前向分步算法的每次迭代过程,都是在拟合当前模型在训练集上的残差。每次将残差减小一点点,最终会达到完美。

 

Boosting很像一个产品迭代的过程,虽然不能一下子做到完美,但坚持不懈的迭代优化,最终必定能惊艳到用户的。

 

Part 3

 

Stacking

 

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-

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注