机器学习流程(五)-模型融合

目录

一、集成模型概述(ensemble learning)

1. 集成学习之个体学习器

2.Boosting和Bagging区别

二、模型融合提升技术(集成学习)

2.1 Boosting

2.2 Bagging

三、各种集成模型

3.1 GBDT模型(boosting,基于残差)

3.1.1 GBDT中的DT

3.1.2 GBDT的基本思想:

3.1.3 为何gbdt可以用用负梯度近似残差呢?

3.1.4 梯度提升和梯度下降的区别和联系是什么?

3.1.5 GBDT的优点和局限性有哪些?

3.1.6 RF(随机森林)与GBDT之间的区别与联系

3.2 AdaBoost模型(boosting,基于权值)

3.3 XGBoost模型(boosting)

3.3.2 XGBoost与GBDT有什么不同

3.3.3 为什么XGBoost要用泰勒展开,优势在哪里?

3.4 LightGBM模型(boosting)

3.4.1 LightGBM在哪些地方进行了优化 (区别XGBoost)?

3.5 随机森林RF模型(bagging)

3.5.1 随机森林生成规则:

3.5.2 随机森林分类效果的影响因素

3.5.3 随机森林有什么优缺点

四、集成学习之结合策略

4.1 Voting投票

4.1.1 绝对多数投票法

4.1.2 相对多数投票法

4.1.3 加权投票法

4.1.4 硬投票

4.1.5 软投票

4.2 Averaging平均法和Ranking

4.2.1 简单平均法(simple averaging)

4.2.2 加权平均法(weighted averaging)

4.3 学习法 - 堆叠法Stacking

4.4 混合法Blending


模型融合是模型的一个优化过程。

在选择一个模型进行训练之后,如何判断模型的优劣及优化模型的性能呢?一般可以从以下几个方面进行优化:

1、研究模型学习曲线 --- 判断是否过拟合或者欠拟合,并做出相应的调整(学习曲线可以判断是否过拟合或欠拟合)

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

3、进行Bad-Case分析 --- 针对错误的例子确定是否还有地方可以修改挖掘

4、进行模型融合 (集成学习)

一、集成模型概述(ensemble learning)

单个学习器要么容易欠拟合要么容易过拟合,为了获得泛化性能优良的学习器,可以训练多个个体学习器,通过一定的结合策略,最终形成一个强学习器。这种集成多个个体学习器的方法称为集成学习(ensemble learning)。 基本思想如下图所示:

机器学习流程(五)-模型融合_第1张图片

从以上概念可以看出,集成学习主要围绕两个核心问题:

  • 如何选取个体学习器?
  • 如何选择结合策略?

1. 集成学习之个体学习器

个体学习器:精确率仅高于1/2的学习器。(随机判断一个二分类的精确率为1/2,精确率高于1/2的学习器才有意义,因为这样才有信息获取)

集成学习:结合多个个体学习器(弱学习器)从而获得精确率很高的学习器(强学习器)。

个体学习器(又称为“基学习器”)的选择有两种方式:

  • 集成中只包含同种类型的个体学习器,称为同质集成 。
  • 集成中包含不同类型的个体学习器,为异质集成 。

目前同质集成的应用最广泛,而基学习器使用最多的模型是CART决策树和神经网络。

按照个体学习器之间是否存在依赖关系可以分为两类:

(1)Boosting方法:个体学习器间存在强依赖关系必须串行生成的序列化方法

(2)Bagging方法和随机森林:个体学习器间不存在强依赖关系,可同时生成的并行化方法

2.Boosting和Bagging区别

  • boosting:串行的方式训练基分类器,各分类器之间有依赖。每次训练时,对前一层基分类器分错的样本给与更高的权重
  • bagging是Bootstrap aggregating的意思,各分类器之间无强依赖,可以并行。

  • boosting方法通过逐步聚焦分类器分错的样本,减少集成分类器的偏差
  • Bagging采用分而治之的策略,通过对样本多次采样,分别训练多个模型,减少方差

  • boosting的每一次抽样的样本分布都是不一样的。每一次迭代,都根据上一次迭代的结果,增加被错误分类的样本的权重,使得模型能在之后的迭代中更加注意到难以分类的样本,这是一个不断学习的过程,也是一个不断提升的过程,这也就是boosting思想的本质所在。
  • bagging的每个基学习器的样本都是从训练集中利用自助采样法(有放回的)得到的m个样本

二、模型融合提升技术(集成学习)

2.1 Boosting

Boosting是集成学习中的一种方法,意为“提升”。提升是一个逐步优化集成学习器的过程,即每个个体学习器都在弥补集成学习器的欠缺,从而达到整体的优化。

Boosting是一种串行的工作机制,即个体学习器的训练存在依赖关系,必须一步一步序列化进行。Boosting是一个序列化的过程,后续模型会矫正之前模型的预测结果。也就是说,之后的模型依赖于之前的模型。

boosting的算法原理如下所示:

机器学习流程(五)-模型融合_第2张图片

boosting算法的工作机制是:

(1)先从初始训练集训练出一个基学习器;

(2)再根据基学习器的表现对样本权重进行调整,增加基学习器误分类样本的权重(又称重采样);

(3)基于调整后的样本分布来训练下一个基学习器;

(4)如此重复进行,直至基学习器数目达到事先指定的个数 T,将这 T 个基学习器通过结合策略进行整合,得到最终的强学习器。

 Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。

2.2 Bagging

Bagging是并行式集成学习方法最著名的代表,它直接基于bootstrap“自助采样法”,也就是有放回的采样。

Bagging能不经修改地用于多分类、回归等任务。

bagging的算法原理如下:

机器学习流程(五)-模型融合_第3张图片

bagging算法的工作机制为:

(1)对包含m个样本的训练集利用自助采样法(有放回的)进行 T 次随机采样,每次采样得到 m 个样本的采样集;(初始训练集中约有63.2%的样本出现在采样集中)

(2)对于这 T 个采样集,我们可以分别独立的训练出 T 个基学习器;

(3)再对这 T 个基学习器通过结合策略来得到最终的强学习器。

bagging对于弱学习器最常用的一般也是决策树和神经网络。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法

三、各种集成模型

3.1 GBDT模型(boosting,基于残差)

 参考: 

GBDT算法梳理

stacking算法_集成算法总结_weixin_39691055的博客-CSDN博客

GBDT是Gradient Boosting Decision Tree的简写,中文为梯度提升决策树,是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。

GBDT 适用范围

GBDT 可以适用于回归问题(线性和非线性)其实多用于回归;
GBDT 也可用于二分类问题(设定阈值,大于为正,否则为负)和多分类问题

3.1.1 GBDT中的DT

这里的DT我们不要简单理解为广义的决策树,考虑到我们GB算法中需要将多个弱分类器的结果累加起来,然而如果是分类问题,结果是无法相加的,比如“男”+“女”等于什么?所以说GBDT中所有的树都是回归树,而不是分类树,也就是说DT独指Regression Decision Tree。

3.1.2 GBDT的基本思想:

根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。
 

3.1.3 为何gbdt可以用用负梯度近似残差呢?

回归任务下,GBDT 在每一轮的迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数,

那此时的负梯度是这样计算的

所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。此时的变量是

,即“当前预测模型的值”,也就是对它求负梯度。

3.1.4 梯度提升和梯度下降的区别和联系是什么?

下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每 一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更 新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参 数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函 数空间中,从而大大扩展了可以使用的模型种类。

3.1.5 GBDT实现分类

从思想上看,GBDT分类算法和回归算法没有区别,但是对于分类来说我们的样本输出不是连续的值,而是离散的类别,这也导致我们无法直接从输出类别去拟合类别输出的误差。

解决这个问题的办法主要有两种,一种是利用指数损失函数,此时的GBDT也就退化成了Adaboost算法;另一种就是使用类似于逻辑回归的对数似然损失函数的方法。也就是说,我们用的是类别的预测概率值和真实概率值的差来拟合损失。(它实际上是将二分类问题当作逻辑斯蒂回归问题来看待的)

3.1.6 GBDT的过拟合

  • 剪枝

剪枝是树模型中常用的防止过拟合的方法

  • 定义步长

较小的步长意味着需要更多的弱学习器的迭代次数。

  • 子采样比例

这里的子采样和随机森林不一样,随机森林使用的是有放回抽样,而这里是不放回抽样。

取值为1表示全部样本都进行训练,相当于没有使用子采样;取值小于1,则只有一部分样本去拟合,可以减小方差,防止过拟合,但是会增加样本的偏差,因此取值不能太低,一般推荐在[0.5,0.8]。

3.1.7 GBDT的优点和局限性有哪些?

优点

  1. 预测阶段的计算速度快,树与树之间可并行化计算。
  2. 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
  3. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系。
  4. 能处理非线性数据,可以灵活处理各种类型的数据,包括连续值和离散值;
  5. 适合低维数据;

局限性

  1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
  2. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
  3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。(可以通过自采样的SGBT来达到部分并行,就是设置子采样比例)

3.1.6 RF(随机森林)与GBDT之间的区别与联系

相同点:
1、GBDT与RF都是采用多棵树组合作为最终结果;这是两者共同点。


不同点:
1、RF的树可以是回归树也可以是分类树,而GBDT只能是回归树
2、RF中树是独立的,相互之间不影响,可以并行;而GBDT树之间有依赖,是串行。
3、RF最终的结果是有多棵树表决决定,而GBDT是有多棵树叠加组合最终的结果。
4、RF对异常值不敏感,原因是多棵树表决,而GBDT对异常值比较敏感,原因是当前的错误会延续给下一棵树。
5、RF是通过减少模型的方差来提高性能,而GBDT是减少模型的偏差来提高性能的。
6、RF不需要进行数据预处理,即特征归一化。而GBDT则需要进行特征归一化

概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像adaboost、gbdt、xgboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化。
 

3.2 AdaBoost模型(boosting,基于权值)

 标准AdaBoost只适用于二分类

优点

  • 精度很高的分类器
  • 很好地利用了弱分类器进行级联
  • 可以将不同的分类算法作为弱分类器
  • 充分考虑每个分类器的权重
  • 提供的是框架,可以使用各种方法构建弱分类器
  • 简单,不需要做特征筛选
  • 不用担心过拟合

实际应用

  • 用于二分类或多分类
  • 特征选择
  • 分类任务的baseline

缺点

  • 迭代次数不太好设定
  • 数据不平衡导致分类精度下降
  • 训练比较耗时,每次重新选择当前分类器最好切分点
  • 对异常样本比较敏感,异常样本在迭代过程中会获得较高权值,影响最终学习器的性能表现

3.3 XGBoost模型(boosting)

终于有人说清楚了--XGBoost算法 - mantch - 博客园

XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。

说到XGBoost,不得不提GBDT(Gradient Boosting Decision Tree)。因为XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted。包括前面说过,两者都是boosting方法。

3.3.1 XGBoost的核心算法思想

  1. 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
  2. 当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数
  3. 最后只需要将每棵树对应的分数加起来就是该样本的预测值。

跟GBDT乃异曲同工,事实上,如果不考虑工程实现、解决问题上的一些差异,XGBoost与GBDT比较大的不同就是目标函数的定义。

3.3.2 XGBoost与GBDT有什么不同

除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。

  1. GBDT是机器学习算法,XGBoost是该算法的工程实现。
  2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
  3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
  4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
  5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。(xgboost是不放回采样
  6. 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

3.3.3 为什么XGBoost要用泰勒展开,优势在哪里?

XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。

3.3.4 XGBoost做分类

XGBoost采用的是回归树,所以预测值也必须是回归值,这跟二分类问题有了冲突。

那么XGB如何解决呢?它实际上是将二分类问题当作逻辑斯蒂回归问题来看待的。

这样代入到原XGB的优化式子中,x即为最终的各样本叶子值的和,经过sigmoid函数之后得到概率值。这就解决了回归值与分类之间的问题。

3.4 LightGBM模型(boosting)

LightGBM在Higgs数据集上LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,并且准确率也有提升。GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。

LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

3.4.1 LightGBM在哪些地方进行了优化 (区别XGBoost)?

  • 基于Histogram的决策树算法
  • 带深度限制的Leaf-wise的叶子生长策略
  • 直方图做差加速直接
  • 支持类别特征(Categorical Feature)
  • Cache命中率优化
  • 基于直方图的稀疏特征优化多线程优化。

机器学习流程(五)-模型融合_第4张图片

3.5 随机森林RF模型(bagging)

随机森林是Bagging的扩展变体。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树。

在回归问题中,随机森林输出所有决策树输出的平均值。

在分类问题中,随机森林进行投票选择最优分类。

  • 随机森林中的两个“随机性”是随机森林不容易陷入过拟合,并且具有很好的抗噪能力
  • 能够处理离散型/连续型数据,无需归一化
  • 随机森林不使用全样本,因为全样本忽视了局部样本的规律,不利于模型泛化能力

3.5.1 随机森林生成规则

  • 如果训练集大小为N,对于每棵树而言,随机且有放回的从训练集中的抽取N个训练样本,作为该树的训练集。(随机抽样保证每棵树的训练集不同,有放回抽样保证每棵树的训练样本有交集,避免树的结果有很大差异)
  • 特征随机。如果每个样本的特征维度是M。指定一个常数m<
  • 每棵树尽最大程度生长,并没有剪枝过程
  • 将生成的多棵树组成随机森林,用随机森林对新的数据进行分类,分类结果按树分类多少而定(投票机制有一票否决制、少数服从多数、加权多数)

3.5.2 随机森林分类效果的影响因素

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

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

3.5.3 随机森林如何处理缺失值?

根据随机森林创建和训练的特点,随机森林对缺失值的处理还是比较特殊的。

  • 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值
  • 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径.
  • 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N
  • 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。

其实,该缺失值填补过程类似于推荐系统中采用协同过滤进行评分预测,先计算缺失特征与其他特征的相似度,再加权得到缺失值的估计,而随机森林中计算相似度的方法(数据在决策树中一步一步分类的路径)乃其独特之处。

3.5.4 随机森林有什么优缺点

优点:

  • 在当前的很多数据集上,相对其他算法有着很大的优势,表现良好。
  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为特征子集是随机选择的)。
  • 在训练完后,它能够给出哪些feature比较重要。
  • 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)。
  • 在训练过程中,能够检测到feature间的互相影响。
  • 对于不平衡的数据集来说,它可以平衡误差。
  • 如果有很大一部分的特征遗失,仍可以维持准确度。

主要优点

1、具有极好的准确率

2、能够有效运行在大数据集上

3、能够处理高维特征的输入样本,而且不需要降维

4、能够评估各个特征在分类问题上的重要性

5、在生成过程中,能够获取到内部生成误差的一种无偏估计

6、对于缺省值问题也能获得很好的结果

缺点

  • 随机森林在解决回归问题时,表现较差,这是因为它并不能给出一个连续的输出。
  • 随机森林已经被证明在某些噪音较大的分类或者回归问题上会过拟合
  • 随机森林就像黑盒子,无法控制模型内部运行(可控性差)
  • 对于小数据或者低维数据,可能不能产生很好的分类
  • 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

随机森林(Random Forests)现在机器学习中比较火的一个算法,是一种基于Bagging的集成学习方法,能够很好地处理分类和回归的问题。

随机森林有许多优点:

1.准确率极高

2.能够有效地在大数据集上运行

3.引入了随机性,不容易过拟合

4. 随机森林有很好的抗噪声能力,但是在在数据噪音比较大的情况下会过拟合。

5.能处理很高维度的数据,而且不用降维

6. 不仅能处理离散型数据,还能处理连续型数据,而且不需要将数据集规范化

7.训练速度快,能够得到变量重要性排序

8.容易实现并行化

9.即使对于缺省值问题也能够获得很好得结果

10.超参数的数量不是很多,并且都能很直观地了解它们多代表的含义

随机森林的缺点:

虽然随机森林算法已经足够快,但是当遇到随机森林中的决策树个数很多时,训练时所需要的空间和时间会会很大,这将导致模型越慢。因此在实际应用中,如果遇到实时性要求很高的情况,最好选择其他算法。

应用场景

随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。

3.5.5 袋外错误率(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误分率。
 

四、集成学习之结合策略

预测结果融合策略

参考:模型融合!从加权融合到stacking, boosting

4.1 Voting投票

针对分类任务

4.1.1 绝对多数投票法

若某标记得票过半数,则预测为该标记;否则拒绝预测。

4.1.2 相对多数投票法

预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个。

4.1.3 加权投票法

与加权平均法类似。

另外,根据个体学习器可能产生不同类型的输出值,可分为“硬投票”和“软投票”。

4.1.4 硬投票

使用类标记的投票。(西瓜书的描述)

对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类。

机器学习流程(五)-模型融合_第5张图片

4.1.5 软投票

使用类概率的投票。(西瓜书的描述)

增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度。

机器学习流程(五)-模型融合_第6张图片


from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import VotingClassifier

model1 = LogisticRegression(random_state=2020)
model2 = DecisionTreeClassifier(random_state=2020)
model = VotingClassifier(estimators=[('lr', model1), ('dt', model2)], voting='hard')
model.fit(x_train, y_train)
model.score(x_test, y_test)

4.2 Averaging平均法和Ranking

对数值型输出,最常见的结合策略是使用平均法。

4.2.1 简单平均法(simple averaging)

4.2.2 加权平均法(weighted averaging)

说明:

加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其是对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合。

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

4.3 学习法 - 堆叠法Stacking

当训练数据很多时,更强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合

Stacking是学习法的典型代表。平均法和投票法仅是对弱学习器的结果做简单的逻辑处理,而stacking是再加上一层权重学习器(Meta Learner),基学习器(Base learner)的结果作为该权重学习器的输入,得到最终结果。

基本思想:

stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器,初始数据的标记还是被当作新学习器的标记,对不同模型预测的结果再进行建模。

Stacking的工作原理:

机器学习流程(五)-模型融合_第7张图片

在stacking方法中,我们把个体学习器叫做初级学习器,用于结合的学习器叫做次级学习器或元学习器(meta learner),次级学习器用于训练的数据叫做次级训练集。次级训练集是在训练集上用初级学习器得到的。

Stacking算法:

机器学习流程(五)-模型融合_第8张图片

  • 过程1-3 是训练出来个体学习器,也就是初级学习器。

  • 过程5-9是 使用训练出来的个体学习器来得预测的结果,这个预测的结果当做次级学习器的训练集。

  • 过程11 是用初级学习器预测的结果训练出次级学习器,得到我们最后训练的模型。

Stacking的方法讲解:

首先,我们先从一种“不那么正确”但是容易懂的Stacking方法讲起。

Stacking模型本质上是一种分层的结构,这里简单起见,只分析二级Stacking.假设我们有2个基模型 Model1_1、Model1_2 和 一个次级模型Model2

Step 1. 基模型 Model1_1,对训练集train训练,然后用于预测 train 和 test 的标签列,分别是P1,T1

Model1_1 模型训练:

机器学习流程(五)-模型融合_第9张图片

训练后的模型 Model1_1 分别在 train 和 test 上预测,得到预测标签分别是P1,T1

机器学习流程(五)-模型融合_第10张图片

Step 2. 基模型 Model1_2 ,对训练集train训练,然后用于预测train和test的标签列,分别是P2,T2

Model1_2 模型训练:

机器学习流程(五)-模型融合_第11张图片

训练后的模型 Model1_2 分别在 train 和 test 上预测,得到预测标签分别是P2,T2机器学习流程(五)-模型融合_第12张图片

Step 3. 分别把P1,P2以及T1,T2合并,得到一个新的训练集和测试集train2,test2。

机器学习流程(五)-模型融合_第13张图片

再用 次级模型 Model2 以真实训练集标签为标签训练,以train2为特征进行训练,预测test2,得到最终的测试集预测的标签列 YPreYPre。

机器学习流程(五)-模型融合_第14张图片

这就是我们两层堆叠的一种基本的原始思路想法。在不同模型预测的结果基础上再加一层模型,进行再训练,从而得到模型最终的预测。

Stacking本质上就是这么直接的思路,但是直接这样有时对于如果训练集和测试集分布不那么一致的情况下是有一点问题的,其问题在于用初始模型训练的标签再利用真实标签进行再训练,毫无疑问会导致一定的模型过拟合训练集,这样或许模型在测试集上的泛化能力或者说效果会有一定的下降,因此现在的问题变成了如何降低再训练的过拟合性,这里我们一般有两种方法:

  1. 次级模型尽量选择简单的线性模型

  2. 利用K折交叉验证

K-折交叉验证: 训练:

Image

预测:

Image

举个栗子:

机器学习流程(五)-模型融合_第15张图片

  1. 首先我们会得到两组数据:训练集和测试集。将训练集分成5份:train1,train2,train3,train4,train5。
  2. 选定基模型。这里假定我们选择了xgboost, lightgbm 和 randomforest这三种作为基模型。比如xgboost模型部分:依次用train1,train2,train3,train4,train5作为验证集,其余4份作为训练集,进行5折交叉验证进行模型训练;再在测试集上进行预测。这样会得到在训练集上由xgboost模型训练出来的5份predictions,和在测试集上的1份预测值B1。将这五份纵向重叠合并起来得到A1。lightgbm和randomforest模型部分同理。
  3. 三个基模型训练完毕后,将三个模型在训练集上的预测值作为分别作为3个"特征"A1,A2,A3,使用LR模型进行训练,建立LR模型。
  4. 使用训练好的LR模型,在三个基模型之前在测试集上的预测值所构建的三个"特征"的值(B1,B2,B3)上,进行预测,得出最终的预测类别或概率。

stacking一般是两层就够了。

stacking使用多折交叉验证,比使用单一留出集更加稳健 

4.4 混合法Blending

基本思想:

Blending采用了和stacking同样的方法,不过只从训练集中选择一个fold的结果,再和原始特征进行concat作为元学习器meta learner的特征,测试集上进行同样的操作。

把原始的训练集先分成两部分,比如70%的数据作为新的训练集,剩下30%的数据作为验证集

  • 第一层,我们在这70%的数据上训练多个模型,然后去预测那30%数据的label,同时也预测test集的label。

  • 在第二层,我们就直接用这30%数据在第一层预测的结果做为新特征继续训练,然后用test集第一层预测的label做特征,用第二层训练的模型做进一步预测。

Blending训练过程:

  1. 整个训练集划分成训练集training sets和验证集validation sets两个部分;

  2. 在training sets上训练模型;

  3. 在validation sets和test sets上得到预测结果;

  4. 将validation sets的原始特征和不同基模型base model预测得到的结果作为新的元学习器meta learner的输入,进行训练 ;

  5. 使用训练好的模型meta learner在test sets以及在base model上的预测结果上进行预测,得到最终结果。

Stacking与Blending的对比:

优点在于:

  • blending比stacking简单,因为不用进行k次的交叉验证来获得stacker feature

  • blending避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集

缺点在于:

  • blending使用了很少的数据(第二阶段的blender只使用training set10%的量)

  • blender可能会过拟合

  • stacking使用多次的交叉验证会比较稳健

你可能感兴趣的:(机器学习,机器学习,人工智能,集成学习)