目录
一、什么是集成学习
集成学习,顾名思义就是将多个学习器结合起来以完成学习任务的一种学习思想。俗话说,三个臭皮匠,顶一个诸葛亮,集成学习就是运用了这种思想。一个模型的结果存在一定的随机性,那么就采用多个模型来抵消这种随机性,大家都说好才是真的好。所以理论上集成学习的思想可以提高模型的性能。
以分类任务为例,我们可以训练m个分类器,每个分类器可以采用相同的算法,也可以采用不同的算法。如果每个分类器均选择决策树算法,那么这个集成学习算法就叫做随机森林。各个分类器之间可以有联系,也可以没有联系。如果没有联系,称为bagging思想,如果有联系,称为boosting(提升)。
集成学习思想运用在分类中的示意图如下:
如上图所示,我们经常把个体学习器称为弱分类器, 这里的弱主要是相对于集成后的分类器来说,效果更弱一些。但集成后的分类器的性能只是在理论上更好,实际中也存在效果变差的情况,当然这只是少数。
对于集成后分类器的性能,假设我们训练了三个二分类器,集成模块采用的是少数服从多数的投票法(voting)产生,那么可能产生以下的集成结果:
因此,要想让集成后性能有所提升,个体学习器应该“好而不同”,即个体学习器要要有一定的准确性,并且应该有“多样性”,各个学习器之间有差异。
二、bagging
我们已经知道,要想集成后性能提升,最好要个体学习器之间有差异。对于给定的数据集,怎样才能使差异尽可能的大呢?一种可能的做法是对训练样本进行采样,差生若干个不同的子集,从每个子集中训练出一个个体学习器。但我们又不能让每个个体学习器之间差异过大,假如每个个体学习器只学到了一小部分数据,虽然做到了不同,但没有做到好,所以最终集成后效果也不会太理想。为了解决这个问题,我们采用了自主采样法(bootstrap sampling)。
bagging是并行式集成学习的著名代表,它基于自助采样法,在给定的数据集中,每次有放回的随机取出m个数据,这样有的数据会被采样到,有的则不会,经过证明,初始训练集中约有63.2%的数据出现在采样集中。然后我们重复进行T次,就可以得到T个子集,每个子集有m个数据,对每个子集训练一个基学习器,然后将基学习器集成,这就是bagging的基本流程。
从偏差—方差的角度来看,bagging更关注于降低方差,因此它在不剪枝的决策树、神经网络等易受样本样本扰动的学习器上应用效果更为明显。bagging有一个典型的应用便是随机森林(Random Forest简称RF),我们将在后面的博客中介绍。
下面我们介绍一个bagging的示例程序:鸢尾花数据集的分类
首先导入库和数据、划分训练集与测试集,为了让效果提升更为明显,所以只采用