查看原文
其他

集成学习之如何由弱变强

stephenDC 大数据与人工智能 2022-09-09


 

写在前面

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


也就是说,纵然不是天才,而是普通如我们,也有机会去取得卓越的成就。本文将会对集成学习进行详细介绍,并探讨其将学习器由弱变强的原理。


以下的正文会从介绍弱学习器的概念开始,然后针对集成学习的三种策略bagging、boosting和stacking,分别介绍其原理,并各自举例说明,最后对三者进行比较总结。



正文:



Part 0弱学习器


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


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

 

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


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

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

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



Part 1Bagging



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


其流程示意图如下:

 

 

(1)Bootstrap sampling 



(2)Single model fitting 


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


 (3) Models aggregation 


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


 (4) Bagging由弱变强的原因 


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





Part 2Boosting



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


(1)模型形式 


(2)模型求解 



 


(3)流程示意图 





(4)Boosting由弱变强的原因 


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


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



Part 3Stacking



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-



还能看点啥?


 

戳戳戳!!!

1.互联网从业人必须知道的「用户行为数据收集系统」

2.新晋“小白”眼中的大数据世界

3.大数据营销之用户画像

4.机器学习中的维度灾难

5.推荐系统的商业价值



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存