集成学习01_介绍

1. 集成学习(Ensemble Learning)简介

在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有缺陷,效果一般的模型(弱学习器或者基学习器)。集成学习理论中,我们将用这些弱学习器去设计更复杂模型,以期得到一个更好更全面的强监督模型。集成学习中的基学习器通常具有以下特点:

  • 在大多数情况下,这些基学习器本身的性能并不是非常好,但也要有一定的准确率,通常大于50%。
  • 基学习器具有一定差异性:为了得到不同的基学习器,常用的方法有,采用训练样本差异化(行采样),训练特征差异化(列采样),学习方法差异化,参数差异化等。

集成学习并不算是一种分类器,而是一种分类器结合使用的方法。其思想是——三个臭皮匠顶个诸葛亮,博采众长。集成学习的数学理论背后原理可以用大数定律和中心极限定律解释。集成学习的学习路线最好从bagging—> Boosting—>Stacking来逐步深入。

2. Bagging

Bagging是bootstrap aggregating的简写。先说下这两个单词的含义:bootstrap翻译成中文是独自创立,靠一己之力做成,独自完成,在数理统计中引申为自助法。Aggregating是聚合。什么叫自助法,说白了就是资源不够,想办法自己解决。假设你有1000个样本,要训练50个“不同“的分类器,数理统计要求你每个分类器使用样本超过100个,那么要“完全独立”至少需要5000个样本,怎么办,“不同“又没说“完全不同“,两个分类器98个样本相同,2个样本不同,也是不同啊、所以一种有放回的抽样方法就诞生了。但是这是有代价的,两个基学习器,有大部分样本是一样的,还叫独立吗?但是穷鬼的资源有限,为了得到统计量的分布以及置信区间也只能这样做。

  • 采用重抽样方法(有放回抽样)从原始样本中抽取一定数量的样本
  • 根据抽出的样本计算想要得到的统计量T
  • 重复上述N次(一般大于1000),得到N个统计量T
  • 根据这N个统计量,即可计算出统计量的置信区间

在Bagging方法中,利用bootstrap方法从整体数据集中采取有放回抽样得到N个数据集,在每个数据集上学习出一个模型,最后的预测结果利用N个模型的输出得到,具体地:分类问题采用N个模型预测投票的方式,回归问题采用N个模型预测平均的方式。
Bagging的代表是随机森林(Random Forest)。随机森林简单地来说就是用随机的方式建立一个由很多的决策树组成的森林,随机森林的每一棵决策树之间是没有关联的。我们学习每一棵决策树的时候就需要用到Bootstrap方法。但是仅仅对样本进行随机,基学习器的差异依旧是不够的,犯同样错误的概率依旧很大,毕竟从同一个大样本池子中抽取多批,各批之间的样本有很大的重复率。为了增加基分类器的差异,特征随机也要应用。在随机森林中,就有两个随机采样的过程:对输入数据的行(数据的数量)与列(数据的特征)都进行采样。对于行采样,采用有放回的方式,若有N个数据,则采样出N个数据(可能有重复),这样在训练的时候每一棵树都不是全部的样本,相对而言不容易出现overfitting;接着进行列采样从M个feature中选择出m个(m< Bagging 中bootstrap aggregating 结合起来的简单理解就是同一份任务,做多个有差异且有一定效果的基学习器,然后组合使用,可以达到更好的效果。

3. Boosting

基学习器独立且有差异bagging的精华,那么独立是是好事吗?事物都有两面性,就像孩子可以自主独立学习,独立思考,但如果过于独立,就会失去吸取他人失败的经验,世间上有太多的错误和苦难,没必要每一个都去亲身体验,要学会从别人的失败中总结经验,这远比亲身去体验总结更重要。社会之所以进步,人类之所以智商高于很多动物,就是人类可以借助前人通过失败总结的经验和知识,更快速地找到相对较优的结果,比如化学实验,生物医药。Boosting的就是采用类似的思想改造bagging。提升方法(Boosting)是一种可以用来减小监督学习中偏差的机器学习算法。主要也是学习一系列弱分类器,并将其组合为一个强分类器。与Bagging的显著差异,是在训练第n个基学习器的时候,借鉴了前面已经训练的n-1个学习器的经验。就像一个负责任的老师,在教第n届学生时,应该总结前n-1届学生的错误和教学中的问题。如果一个老师对你说,你家孩子经常犯一些错误,这些错误他教的前几届也有学生常犯,这不是你和你孩子的问题,是这个老师不负责的问题。那么如果改进“独立”,Boosting中有代表性的是AdaBoost和GBDT。

  • AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个样本赋相等的权重,然后用该算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。简单理解就是,老师对待学生刚开始一视同仁 ,每个学生的关注度一样。通过考试发现,某些学生在某些学科成绩较差,需要多关注,帮助其改进,减少关注那些预测正确的样本(考试满分的同学)的时间占比。AdaBoost就是通过提高预测错的样本的权重占比,从而提升整体效果。至于学校……
  • GBDT(Gradient Boost Decision Tree)也是一种Boosting的方法,与AdaBoost不同,GBDT每一次的计算是为了减少上一次的残差,GBDT在残差减少(负梯度)的方向上建立一个新的模型。简单理解就是,老师教给了学生很多知识,考试前假设所学生对所有知识点的掌握是一样的。通过考试发现,前面教的n-1届学生在某些知识点掌握较差,在教第n届时,就应该利用这些信息,对前n-1届学生常犯的错误就行修正。GBDT 就是利用了这个思想。

4. Stacking

Stacking方法是先训练一批及学习器,再用这些基学习器构建一个模型,很类似于一个两层神经网络。首先我们先训练多个不同的模型,然后各个模型的输出为输入来训练一个模型,以得到一个最终的输出。Stacking也可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,通常使用logistic回归作为组合策略。

如上图所示,首先在整个训练数据集上通过bootstrap抽样得到各个基学习器,称之为Tier 1基学习器,然后将Tier 1中各个基学习器的结果作为输出训练Tier 2 学习器。

本章到此结束:下一章将从数学的角度推理证明为何集合学习通常好于单个分类器。

你可能感兴趣的:(Python集成学习,集成学习)