模型融合——stacking原理与实现
一般提升模型效果从两个大的方面入手
数据层面:数据增强、特征工程等
模型层面:调参,模型融合
模型融合:通过融合多个不同的模型,可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用, 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果,模型自身,样本集等不同的角度进行融合。
模型融合是后期一个重要的环节,大体来说有如下的类型方式:
加权融合(投票、平均)
硬投票

软投票

boosting/bagging(集成学习)
stacking/blending
本文主要介绍stacking/blending方法的原理,及其实际应用
Stacking模型本质上是一种分层的结构,这里简单起见,只分析二级Stacking.假设我们有3个基模型M1、M2、M3。[1]
基模型M1,对训练集train训练,然后在训练集和测试集预测,分别得到P1,T1。同理,得到P2,T2;P3,T3
\[\begin{pmatrix}
\vdots\\
P1\\
\vdots\\
\end{pmatrix}
\begin{pmatrix}
\vdots\\
T1\\
\vdots\\
\end{pmatrix},
\begin{pmatrix}
\vdots\\
P2\\
\vdots\\
\end{pmatrix}
\begin{pmatrix}
\vdots\\
T2\\
\vdots\\
\end{pmatrix},
\begin{pmatrix}
\vdots\\
P3\\
\vdots\\
\end{pmatrix}
\begin{pmatrix}
\vdots\\
T3\\
\vdots\\
\end{pmatrix}
\]分别把P1,P2,P3以及T1,T2,T3合并,得到一个新的训练集和测试集train2,test2.

再用第二层的模型M4训练train2,预测test2,得到最终的标签列。

注意:
用整个训练集训练的模型反过来去预测训练集的标签,毫无疑问过拟合是非常非常严重的,因此现在的问题变成了如何在解决过拟合的前提下得到P1、P2、P3,这就变成了熟悉的节奏——K折交叉验证。

上图的模型1-5其实是一个模型在不同折下训练。
最终的代码是两层循环,第一层循环控制基模型的数目,每一个基模型要这样去得到P1,T1,第二层循环控制的是交叉验证的次数K,对每一个基模型,会训练K次最后拼接得到P1,取平均得到T1。
python实现[2]
### 6折stacking
n_folds = 6
skf = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=1)
for i,clf in enumerate(clfs):
# print("分类器:{}".format(clf))
X_stack_test_n = np.zeros((X_test.shape[0], n_folds))
for j,(train_index,test_index) in enumerate(skf.split(X_train,y_train)):
tr_x = X_train[train_index]
tr_y = y_train[train_index]
clf.fit(tr_x, tr_y)
#生成stacking训练数据集
X_train_stack [test_index, i] = clf.predict_proba(X_train[test_index])[:,1]
X_stack_test_n[:,j] = clf.predict_proba(X_test)[:,1]
#生成stacking测试数据集
X_test_stack[:,i] = X_stack_test_n.mean(axis=1)
理论介绍推荐阅读[1],实现部分可以阅读[2]
references
【1】【机器学习】模型融合方法概述. https://zhuanlan.zhihu.com/p/25836678
【2】Kaggle提升模型性能的超强杀招Stacking——机器学习模型融合. https://zhuanlan.zhihu.com/p/107655409
模型融合——stacking原理与实现的更多相关文章
- 深度学习模型融合stacking
当你的深度学习模型变得很多时,选一个确定的模型也是一个头痛的问题.或者你可以把他们都用起来,就进行模型融合.我主要使用stacking和blend方法.先把代码贴出来,大家可以看一下. import ...
- 基于sklearn的 BaseEstimator开发接口:模型融合Stacking
转载:https://github.com/LearningFromBest/CMB-credit-card-department-prediction-of-purchasing-behavior- ...
- 深度学习模型stacking模型融合python代码,看了你就会使
话不多说,直接上代码 def stacking_first(train, train_y, test): savepath = './stack_op{}_dt{}_tfidf{}/'.format( ...
- 【集成学习】:Stacking原理以及Python代码实现
Stacking集成学习在各类机器学习竞赛当中得到了广泛的应用,尤其是在结构化的机器学习竞赛当中表现非常好.今天我们就来介绍下stacking这个在机器学习模型融合当中的大杀器的原理.并在博文的后面附 ...
- 谈谈模型融合之一 —— 集成学习与 AdaBoost
前言 前面的文章中介绍了决策树以及其它一些算法,但是,会发现,有时候使用使用这些算法并不能达到特别好的效果.于是乎就有了集成学习(Ensemble Learning),通过构建多个学习器一起结合来完成 ...
- 【转】Java 内存模型及GC原理
一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...
- 在Caffe中实现模型融合
模型融合 有的时候我们手头可能有了若干个已经训练好的模型,这些模型可能是同样的结构,也可能是不同的结构,训练模型的数据可能是同一批,也可能不同.无论是出于要通过ensemble提升性能的目的,还是要设 ...
- Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)
这是在kaggle上的一个练习比赛,使用的是ImageNet数据集的子集. 注意,mxnet版本要高于0.12.1b2017112. 下载数据集. train.zip test.zip labels ...
- Java 内存模型、GC原理及算法
Java 内存模型.GC原理:https://blog.csdn.net/ithomer/article/details/6252552 GC算法:https://www.cnblogs.com/sm ...
随机推荐
- 使用.NET 6开发TodoList应用(24)——实现基于JWT的Identity功能
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在.NET Web API开发中还有一个很重要的需求是关于身份认证和授权的,这个主题非常大,所以本文不打算面面俱到地介绍整个主 ...
- 腾讯 TKE 厉害了!用 eBPF绕过 conntrack 优化K8s Service,性能提升40%
Kubernetes Service[1] 用于实现集群中业务之间的互相调用和负载均衡,目前社区的实现主要有userspace,iptables和IPVS三种模式.IPVS模式的性能最好,但依然有优化 ...
- springBoot--01--快速入门
笔记源码:https://gitee.com/ytfsL/springboot 1.1 原有Spring优缺点分析 1.1.1 Spring的优点分析 Spring是Java企业版(Java Ente ...
- STM32 EXTI(外部中断)
一.EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20个中断/事件线.每个中断/事件线都对应有一个边沿检测器 ...
- 免费增加几个T电脑空间方法,拿去不谢
大家好,我是咔咔 不期速成,日拱一卒 在刷吾爱时猛然间看到一篇帖子名为,免费增加几个T电脑空间方法,拿去不谢,作为一名电脑磁盘深度缺乏者,这种文章怎能逃离我的法眼. 点进去大概瞅了一眼,大致意思就是把 ...
- SQL查询中关键字的执行顺序
SQL语句中的每个关键字都按照顺序往下执行,而每一步操作会生成一个临时表,最后的临时表就是最终结果: FROM <left_table>:from子句返回初始结果集 <join_ty ...
- Golang 记录
Golang 笔记 1. hello Golang 新建项目,推荐GoLand工具 GOPATH目录:D:\go\awesomeProject 三个标准目录:bin,pkg,src MAIN目录:D: ...
- 返回值List是JsonArray
MyController中: index.jsp中
- java多态概述特点转型I
1 package face_09; 2 3 import com.sun.jdi.Method; 4 5 /* 6 * 对象的多态性. 7 * class 动物 8 * {} 9 * 10 * cl ...
- Tomcat安装(启动)
1,安装 找到你需要用的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可 2,目录介绍 bin 存放tomcat服务器的可执行程序 conf 存放tomcat服务器的配置文件 lib ...