模型优化之模型融合|集成学习

在机器学习训练完模型之后我们要考虑模型的效率问题,常用的模型效率分析手段有:机器学习模型优化之模型融合 简洁易懂超赞.

  • 研究模型学习曲线,判断模型是否过拟合或者欠拟合,并做出相应的调整;

  • 对于模型权重参数进行分析,对于权重绝对值高/低的特征,可以对特征进行更细化的工作,也可以进行特征组合;

  • 进行bad-case分析,对错误的例子分析是否还有什么可以修改挖掘

  • 模型融合:模型融合就是训练多个模型,然后按照一定的方法集成过个模型,应为它容易理解、实现也简单,同时效果也很好,在工业界的很多应用,在天池、kaggle比赛中也经常拿来做模型集成。
    在这里插入图片描述
    一般来说集成学习可以分为三大类:集成学习–bagging、boosting、stacking

  • 用于减少方差的bagging

  • 用于减少偏差的boosting

  • 用于提升预测结果的stacking

use you need!

模型融合的分类: 按照个体学习器的关系可以分为两类:

  • 串行集成方法,这种方法串行地生成基础模型(如boosting: AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。
  • 并行集成方法,这种方法并行地生成基础模型(如bagging: Random
    Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。

模型融合

1.机器学习模型优化之模型融合 简洁易懂超赞.
2.模型融合方法
3.集成学习–bagging、boosting、stacking
4.Ensemble methods 含代码
5.机器学习之Ensemble(Bagging、AdaBoost、GBDT、Stacking)

Bagging

Bagging是引导聚合的意思。减少一个估计方差的一种方式就是对多个估计进行平均。例如,我们可以用训练集的不同子集(随机选择并替代训练集)训练M个不同的树然后计算最后的结果。
做bagging并不会使模型变得更加fit data,我们只是让模型变得更加“圆滑”,方差更小。

Bagging使用装袋采样来获取数据子集训练基础学习器。通常分类任务使用投票的方式集成,而回归任务通过平均的方式集成。
在这里插入图片描述
1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping(有放回)的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(我们这里假设k个训练集之间是相互独立的,事实上不是完全独立)

2)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。但是是同种模型。(注:,k个训练集虽然有重合不完全独立,训练出来的模型因为是同种模型也是不完全独立。这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

3)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

对于Bagging需要注意的是,每次训练集可以取全部的特征进行训练,也可以随机选取部分特征训练,例如随机森林就是每次随机选取部分特征
集成学习–bagging、boosting、stacking

bagging的代价是不用单棵决策树来做预测,具体哪个变量起到重要作用变得未知,所以bagging改进了预测准确率但损失了解释性。

随机森林RF

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随机”,一个就是“森林”。“森林”我们很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了。“随机”: 样本随机与特征随机。随机森林算法及其实现(Random Forest)棒!

每棵树的按照如下规则生成:
1)如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本(这种采样方式称为bootstrap sample方法),作为该树的训练集;

从这里我们可以知道:每棵树的训练集都是不同的,而且里面包含重复的训练样本(理解这点很重要)。
为什么要随机抽样训练集?
如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有bagging的必要;
为什么要有放回地抽样?
博主理解的是这样的:如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",都是绝对"片面的"(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,这样无异于是"盲人摸象"。

2)如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;

3)每棵树都尽最大程度的生长,并且没有剪枝过程。

随机森林中的“随机”就是指的这里的两个随机性。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。

随机森林分类效果(错误率)与两个因素有关:(集成学习通用)

  • 森林中任意两棵树的相关性:相关性越大,错误率越大;
  • 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数

袋外错误率(oob error)
上面我们提到,构建随机森林的关键问题就是如何选择最优的m,要解决这个问题主要依据计算袋外错误率oob error(out-of-bag error)。

随机森林有一个重要的优点就是,没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。

我们知道,在构建每棵树时,我们对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的oob样本。

而这样的采样特点就允许我们进行oob估计,它的计算方式如下:

(note:以样本为单位)

1)对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树);
在这里插入图片描述2)然后以简单多数投票作为该样本的分类结果;

3)最后用误分个数占样本总数的比率作为随机森林的oob误分率。

Put each case left out in the construction of the kth tree down the kth tree to get a classification. In this way, a test set classification is obtained for each case in about one-third of the trees. At the end of the run, take j to be the class that got most of the votes every time case n was oob. The proportion of times that j is not equal to the true class of n averaged over all cases is the oob error estimate. This has proven to be unbiased in many tests.

oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证

1.随机森林算法及其实现(Random Forest)棒!
2.决策树与随机森林(从入门到精通)

Boosting

前面讲的决策树,拟合能力过于强大,容易发生过拟合,这个时候我们就需要使用bagging策略来使得模型对不同数据处理后误差的方差变得小一点,也就是更加稳定一点。
Boosting,则是针对一个学习能力弱的模型,该模型不能很好拟合训练集的数据。
在这里插入图片描述在这里插入图片描述

boosting是一种集成学习算法,由一系列基本分类器按照不同的权重组合成为一个强分类器,这些基本分类器之间有依赖关系。包括Adaboost算法、提升树、GBDT算法。

分类器不同,那么其训练集自然是不同的,那怎么得到不同的data set呢?第一个方法跟bagging类似,采用重采样也就是有放回抽样的方式来产生不同的data set。第二个方法是采用改变权重的方式来生成新的数据集。

分类中通常使用将多个弱分类器组合成强分类器进行分类的方法,统称为集成分类方法(Ensemble Method)。比较简单的如在Boosting之前出现Bagging的方法,首先从从整体样本集合中抽样采取不同的训练集训练弱分类器,然后使用多个弱分类器进行voting,最终的结果是分类器投票的优胜结果。这种简单的voting策略通常难以有很好的效果。直到后来的Boosting方法问世,组合弱分类器的威力才被发挥出来。Boosting意为加强、提升,也就是说将弱分类器提升为强分类器。而我们常听到的AdaBoost是Boosting发展到后来最为代表性的一类。所谓AdaBoost,即Adaptive Boosting,是指弱分类器根据学习的结果反馈Adaptively调整假设的错误率,所以也不需要任何的先验知识就可以自主训练。 模式识别 Boosting

1.三种boost概述,整挺好(又名我在一个讲XGboost的文章学会了GBDT)算法里m是特征数,j是instace set of current node里的第几个结点
2.机器学习之Ensemble(Bagging、AdaBoost、GBDT、Stacking)

Adaboost

AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。Adaboost 算法的原理与推导

Adaboost算法可以简述为三个步骤:

  1. 首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。
  2. 然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  3. 最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。
    换而言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

1.Adaboost算法原理分析和实例+matlab代码(简明易懂)
2.Adaboost 算法的原理与推导
3.Discrete Adaboost, Real AdaBoost, LogitBoost, 和Gentle AdaBoost

GBDT

GBDT 的全称是 Gradient Boosting Decision Tree,梯度提升树。GBDT算法原理以及实例理解

  • Decision Tree
    GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。为什么不用CART分类树呢?因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
  • Gradient Boosting: 拟合负梯度
    利用损失函数的GBDT的负梯度就是残差,所以说对于回归问题,我们要拟合的就是残差。负梯度作为提升树算法中的残差的近似值。

回归树的分裂结点对于平方损失函数,拟合的就是残差;对于一般损失函数(梯度下降),拟合的就是残差的近似值,分裂结点划分时枚举所有特征的值,选取划分点。最后预测的结果是每棵树的预测结果相加。

1.GBDT算法原理以及实例理解
2.代码
3.提升树GBDT详解

Xgboost

1.xgboost入门与实战(原理篇)
2.xgboost必看

Stacking

Stacking是通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。

Stacking 先从初始数据集训练出初级学习器,然后”生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。

基础模型通常包含不同的学习算法,因此stacking通常是异质集成。算法伪代码如下:
在这里插入图片描述
在这里插入图片描述

Steps for Further Improvement【stacking】
As a closing remark it must be noted that the steps taken above just show a very simple way of producing an ensemble stacker. You hear of ensembles created at the highest level of Kaggle competitions which involves monstrous combinations of stacked classifiers as well as levels of stacking which go to more than 2 levels.
Some additional steps that may be taken to improve one’s score could be:
Implementing a good cross-validation strategy in training the models to find optimal parameter values
Introduce a greater variety of base models for learning. The more uncorrelated the results, the better the final score.

1.stacking代码
2.数据挖掘竞赛利器-Stacking和Blending方式.
3.详解stacking过程.
4.集成学习总结 & Stacking方法详解

Blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集,例如说10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。说白了,就是把Stacking流程中的K-Fold CV 改成 HoldOut CV。

Hold-Out Method(数据集拆分:一般法)
将原始数据随机分为两组,一组做为训练集,一组做为验证集;
利用训练集训练分类器,然后利用验证集验证模型。

结合策略

集成学习的第二类模型(比如说:bagging),为了提高集成的泛化能力,每个基学习器之间不存在很强的依赖性,所以最终预测结果时,需要一定的策略对T个结果进行结合。
集成学习–bagging、boosting、stacking

平均法

  • 简单平均法
  • 加权平均法 但是对于规模比较大的集成来说,权重参数比较多,较容易导致过拟合。加权平均法未必一定优于简单平均法。

取均值的做法常常可以减少过拟合现象。在机器学习的应用上,过拟合现象是很普遍的,根本问题是训练数据量不足以支撑复杂的模型,导致模型学习到数据集上的噪音,这样产生的问题是模型很难泛化,因为模型“考虑”得过分片面。

一般而言,在个体学习器性能相差较大时,宜使用加权平均法,而在个体学习器性能相近时,宜使用简单平均法。

平均法来说一般用于回归预测模型中,在Boosting系列融合模型中,一般采用的是加权平均融合。

投票法

  • 绝对多数投票法 若某标记得票过半数,则预测为该标记;否则拒绝预测。
  • 相对多数投票法 预测为得票最多的标记。若同时有多个标记获得最高票,则从中随机选取一个。
  • 加权投票法

一般用于分类模型。在bagging模型中使用。

学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。常见的有StackingBlending两种。

对于实践中的结果而言,stacking和blending的效果是差不多的,所以使用哪种方法都没什么所谓,完全取决于个人爱好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值