热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是模型融合,stacking集成模型原理介绍

模型融合(集成)参考博客:KaggleEnsemblingGuide(https_mlwave.com模型集成是融合多个训练好的模型,基于某种方式实现测试数据的多模型融合,这


模型融合(集成)参考博客: kaggleensemblingguide (https _ ml wave.com) )。


模型集成是指将训练好的多个模型融合在一起,通过某种方法实现测试数据的多模型融合,可以“补长补短”最终结果,融合各模型的学习能力,提高最终模型的泛化能力。 模型集成方法主要应用于几种模型差异大、相关性小。


常用的model ensemble方法为投票(voting), 平均(averaging), 堆叠(Stacking),非交叉堆叠(Blending),其中投票法和平均法综合结果,stacking和blending融合模型。


目录


1 .投票法2 .加权投票3 .平均法4 .分级5.Stacking6.Blending 1.投票法三种模型相关性较大时:


模型1:111111100=80 %的精度


模型2:111111100=80 %的精度


模型3:101111100=70 %的精度


第1列111,投票1; 第2列110,屏幕为1; 第3列111的投票是1……


最终的3个模型融合投票后,1111111100=80%,最终的准去除率保持在80%,没有提高。


如果三个模型之间的相关性很小,则:


模型1:111111100=80 %的精度


模型2:011101101=70 %的精度


模型3:1000101111=60 %的精度


第1列101,投票1; 第2列110,屏幕为1; 第3列110,投票为1 ……


最终三个模型融合并投票后,1111111101=90%,精度有所提高。


投票法在多分类任务等大预测时有意义。


2 .加权投票融合多数表决的融合方式隐含地意识到所有模型的重要程度相同,但通常我们需要更加重视表现良好的模型,赋予更大的权重。 在加权投票的情况下,表现不好的模型只能通过得到与其他模型相同的结果来增强自己的说服力。


modelpublicaccuracyscoregradientboostingmachine 0.65057 randomforestgini 0.75107 randomforestentropy 0.75222 extratreeeeeeeesentropy 0.7555555 votingensemble(democracy ) 0.75337votingensemble )3*bestvs.rest ) http://www.Sina.com/(com )


3 .平均结果,但是平均了结果,可以在一定程度上减轻过拟合现象。 可以认为是减轻过拟合的一种方法。


通过随机权重初始化5个探测器,并以平均值组合它们的预测,得到的结果也将提高。


modelpublicaucscoreperceptron 0.95288 random perceptron 0.95092 random perceptron 0.95128 random perceptron 0.95118 random perceptron 0.95005000 并不是所有的预测都经过了完美的校正。 预测低概率或高概率可能会导致自信过度或自信不足。 或者被预测在一定范围内很混乱。


即使融合以下4个模型并将结果平均化,精度也可能不会提高。


因为id prediction 10.5720.0430.9640.99,所以我们采用了将预测转换为等级并对等级进行平均的等级平均方法。


Id、Rank、prediction1、1、0.350000562、0、0.350000023、2、0.350000984、3、0.35000111归一化等级


Id、prediction1、0.332、0.03、0.664、1.0采用多个Vowpal Wabbit模型和一个GLMNet模型进行融合,比较了均值和等级均值两种方法。


modelpublicprivatevowpalwabbita0. 607640.59962 vowpalwabbitb0. 607370.59957 vowpalwabbitc0. 607570.59954 glm net 0.604333333 www.Sina.com/5.stacking stacking是一个分层模型集成框架。 以两个级别为例,第一级由多个基本学习器组成,其输入是原始训练集,第二级模型由

以第一层基学习器的输出作为训练集进行再训练,从而得到完整的stacking模型。

简单来说:数据集有Train和Test,模型对一层有5个基模型,第二层自己去构造(通常为线性模型LR)。

1.将Train划分5个小train,分别为train1,train2,train3,train4,train5。

将5个train进行组合有:

(1)训练集:train2,train3,train4,train5。预测集:train1

(2)训练集:train1,train3,train4,train5。预测集:train2

(3)训练集:train1,train2,train4,train5。预测集:train3

(4)训练集:train1,train2,train3,train5。预测集:train4

(5)训练集:train1,train2,train3,train4。预测集:train5

2.将(1),(2),(3),(4),(5)分别去训练、预测基模型1,得到5个预测结果,将这5个结果称作:元特征集1

将(1),(2),(3),(4),(5)分别去训练、预测基模型2,得到5个预测结果,将这5个结果称作:元特征集2

将(1),(2),(3),(4),(5)分别去训练、预测基模型3,得到5个预测结果,将这5个结果称作:元特征集3

将(1),(2),(3),(4),(5)分别去训练、预测基模型4,得到5个预测结果,将这5个结果称作:元特征集4

将(1),(2),(3),(4),(5)分别去训练、预测基模型5,得到5个预测结果,将这5个结果称作:元特征集5

3.将5个元特征集进行拼接得到完整的元特征集,将完整元特征集作为第二层模型的训练集。

4.对于Test,在每次基模型训练好时预测,再将预测值做均值处理,得到新Test,作为第二层的Test。

更通俗的解释:

1.首先将所有数据集生成测试集和训练集(假如训练集为10000,测试集为2500行),那么上层会进行5折交叉检验,使用训练集中的8000条作为喂养集,剩余2000行作为验证集。

2.每次验证相当于使用了8000条数据训练出一个模型,使用模型对验证集进行验证得到2000条数据,并对测试集进行预测,得到2500条数据,这样经过5次交叉检验,可以得到5×2000条验证集的结果(相当于每条数据的预测结果),5×2500条测试集的预测结果。

3.接下来会将验证集的52000条预测结果拼接成10000行长的矩阵,标记为A1,而对于52500行的测试集的预测结果进行加权平均,得到一个2500一列的矩阵,标记为B1。

4.上面得到一个基模型在数据集上的预测结果A1、B1,这样当我们对3个基模型进行集成的话,相于得到了A1、A2、A3、B1、B2、B3六个矩阵。

5.之后我们会将A1、A2、A3并列在一起成10000行3列的矩阵作为training data,B1、B2、B3合并在一起成2500行3列的矩阵作为testing data,让下层学习器基于这样的数据进行再训练。

6.再训练是基于每个基础模型的预测结果作为特征(三个特征),次学习器会学习训练如果往这样的基学习的预测结果上赋予权重w,来使得最后的预测最为准确。

需要注意的是,在生成第二层特征的时候,各个基模型要采用 相同的K-fold,这样得到的元特征的每一折(对应于之前的K折划分)都将不会泄露进该折数据的目标值信息 ,从而尽可能的降低过拟合的风险。

6.Blending

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

相比于Stacking,Blending能有效防止信息泄露,但也正因为如此,元学习器只用了较小部分的数据集进行训练,且容易对留出集过拟合。如果数据量有限,个人更偏好于Stacking


推荐阅读
author-avatar
百变精灵545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有