冯龙宇的技术专栏 NLP and ML Coder

集成学习和模型融合

2020-01-04
fly


### 集成学习和模型融合Stacking 和Blending方式 参考列表文章1文章2文章3【干货】比赛后期大招之stacking技术分享

前言

  1. 之前的只是听过,了解大概思想(统计机器学习,最近听闻第二版推出应该好好拜读),最近准备用它提升一波天池的数据比赛,故而仔细学习。为什么我之前没有刷过这种比赛?因为,1.我之前搞电子选举~民主进步的基石,有空挂上我为了毕业搞的东西~~~。2.没有合适的时间和算力~,这是很烦的~。这个数据比赛,搞个分数容易, 如何刷出较高成绩,着实有些搞头。。。。。。

集成学习

Ensemble learning 中文名叫做集成学习,它并不是一个单独的机器学习算法,而是将很多的机器学习算法结合在一起,我们把组成集成学习的算法叫做“个体学习器”。在集成学习器当中,个体学习器都相同,那么这些个体学习器可以叫做“基学习器”。

个体学习器组合在一起形成的集成学习,常常能够使得泛化性能提高,这对于“弱学习器”的提高尤为明显。弱学习器指的是比随机猜想要好一些的学习器。

在进行集成学习的时候,我们希望我们的基学习器应该是好而不同,这个思想在后面经常体现。 “好”就是说,你的基学习器不能太差,“不同”就是各个学习器尽量有差异。

集成学习有两个分类,一个是个体学习器存在强依赖关系、必须串行生成的序列化方法,以Boosting为代表。另外一种是个体学习器不存在强依赖关系、可同时生成的并行化方法,以Bagging和随机森林(Random Forest)为代表。

附:神经网路的本质,从某个角度讲,是否可以看作深度多层的单logistics模型组成集成学习模型。增加整体的拟合能力,并且融合各个成熟模型的优点和缺点进行查缺补漏

Stacking

一个集成学习框架,两层学习结构,第一层n个不同的分类器,(或者参*数不同,如snapchat理论),合并第一层的输出,作为特征集,并作为下一层的输入。 alt 文本属性 引一句知乎的话~ “不同的模型,其实很重要的一点就是在不同的角度去观测我们的数据集。我举个例子,KNN可能更加关注样本点之间的距离关系(包括欧几里得距离(Euclidean Distance)、明可夫斯基距离(Minkowski Distance等等),当样本距离相对较近,KNN就把他们分为一类;而决策树,可能更加关注分裂节点时候的不纯度变化,有点像我们自己找的规则,在满足某个条件且满足某个条件的情况下,决策树把样本分为一类等等。也就是说,不同的算法模型,其实是在不同的数据空间角度和数据结构角度来观测数据,然后再依据它自己的观测,结合自己的算法原理,来建立一个模型,在新的数据集上再进行预测。这样大家就会有个疑问了,俗话说:三人行必有我师。既然是不同的算法对数据有不同的观测,那么我们能不能相互取长补短,我看看你的观测角度,你看看我的观测角度,咱俩结合一下,是不是可以得到一个更加全面更加优秀的结果呢?答案是肯定的。”

同质弱分类器5-folds-validations方法的框架结构与运行过程 bagging

alt 文本属性

stacking 的思想很好理解,但是在实现时需要注意不能有泄漏(leak)的情况,也就是说对于训练样本中的每一条数据,基模型输出其结果时并不能用这条数据来训练。否则就是用这条数据来训练,同时用这条数据来测试,这样会造成最终预测时的过拟合现象,即经过stacking后在训练集上进行验证时效果很好,但是在测试集上效果很差。

为了解决这个泄漏的问题,需要通过 K-Fold 方法分别输出各部分样本的结果,这里以 5-Fold 为例,具体步骤如下

(1) 将数据划分为 5 部分,每次用其中 1 部分做验证集,其余 4 部分做训练集,则共可训练出 5 个模型 (2) 对于训练集,每次训练出一个模型时,通过该模型对没有用来训练的验证集进行预测,将预测结果作为验证集对应的样本的第二层输入,则依次遍历5次后,每个训练样本都可得到其输出结果作为第二层模型的输入 (3) 对于测试集,每次训练出一个模型时,都用这个模型对其进行预测,则最终测试集的每个样本都会有5个输出结果,对这些结果取平均作为该样本的第二层输入

除此之外,用 stacking 或者说 ensemble 这一类方法时还需要注意以下两点:

1. Base Model 之间的相关性要尽可能的小,从而能够互补模型间的优势
2. Base Model 之间的性能表现不能差距太大,太差的模型会拖后腿

Stacking和Bagging 和 Boosting的区别

组合弱学习器: 为了建立一个集成学习方法,我们首先选择一个待聚合的基础模型。在大多数情况下(包括在众所周知的bagging和boosting方法中),我们会使用单一的基础学习算法,这样一来我们就有了以不同方式训练的同质弱学习器。通过这样同质弱学习器集成得到集成模型,叫做同质集成模型,将异质的弱学习器集成的集成模型为异质集成模型。

集成方法:

自助法、自助聚合(bagging)、随机森林、提升法(boosting)、堆叠法(stacking)以及其他的基础集成学习模型。

最重要的假设是:当弱模型被正确的组合时,我们可以得到更精确和更鲁棒的模型。

在集成学习理论中,我们将弱学习器称为,模型。这些模型可以作为设计更复杂模型的构件。在大多数情况下,这些基本模型本身的性能不是很好,较高的偏置和较高的方差。

集成方法的思想是通过将这些弱学习器,集成模型,从而获得更好的性能。 部分观点引自机器之心 常用的模型集成方法介绍:bagging、boosting、stacking

设计集成方法:最重要的一点,同弱分类器的选择一致。 如果我们选择低偏置高方差的基础模型,我们应该使用一种倾向于减少方差的聚合方法;而如果我们选择具有低方差高偏置的基础模型,我们应该使用一种倾向于减少偏置的聚合方法。

三种元算法:bagging、boostingd、Stacking,

  • bagging , 该方法通常考虑的同质弱学习器,相互独立地并行学习这些弱学习器,并按照某种确定性的平均过程将它们组合起来。(减少的方差,增加泛化性)

  • boosting,该方法通常考虑的也是同质弱学习器,它以一种高度自适应的方法顺序学习这些弱学习器(每个基础模型依赖于前面的模型),并按照某种确定性的策略将它们组合起来。(减少偏置)

  • Stacking,异质弱学习器,并行学习它们,并通过训练元模型集成。

bagging和Boosting Bagging 即套袋法: 1、从原始样本集中,自主法(Bootstraping)的方法抽取n个训练样本。进行K轮,K个训练集K个训练集之间相互独立。 2、每次使用一个训练集,训练一个模型,K个模型。 3、对分类问题:将上步得到的K个模型采用投票方式得到分类结果;回归结果,计算均值作为最后的结果。 百度百科 Boosting: Boosting和bagging、随机森林不同的是个体学习器之间的是否存在强依赖关系,Boosting存在强依赖关系,必须串行生成。后两者不存在可以并行。 1. AdaBoost算法,每次使用的是全部样本,每轮训练改变样本权重。(错误样本权重加大,正确样本权重减小)下一轮训练的目标是找到一个函数f来拟合上一轮的残差。当残差足够小或者设置的最大迭代次数停止后。 2. 残差树, 回归问题,基于CART算法的回归树,加法模型、损失函数为平方函数、学习算法为前向分步算法。 加法模型如下: \(f_M(x) = \sum _{m=1}^{M} T(x;\theta_m)\) 什么叫做残差和前向分步,例子如下,比如小明的年龄是10岁,第一次我们的残差树拟合的值为6,那么第二次我们拟合的目标值为10-6=4。 ~ 3. GBDT算法,其基本原理和残差树类似,基学习器是基于CART算法的回归树,模型依旧为加法模型、学习算法为前向分步算法。不同的是,GDBT没有规定损失函数的类型,向加法算法的每一步都是拟合损失函数。

接着框架方面,AdaBoost(类,基本模型很广泛)—>GBDT(对象,限制在决策树,分类ID和C4.3和回归:CART回归树)和XGBOOST(框架实现)、LightGBM(改进框架)。

关于决策树和GBDT以及XGboost、LightGBM中的决策树的~~需要仔细探究。


Similar Posts

上一篇 HMM 模型

下一篇 句法分析

Comments