模型融合——stacking原理与实现

博客 分享
0 261
优雅殿下
优雅殿下 2022-02-14 12:55:19
悬赏:0 积分 收藏

模型融合——stacking原理与实现

一般提升模型效果从两个大的方面入手

数据层面:数据增强、特征工程等

模型层面:调参,模型融合

模型融合:通过融合多个不同的模型,可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用, 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果,模型自身,样本集等不同的角度进行融合。

模型融合是后期一个重要的环节,大体来说有如下的类型方式:

  • 加权融合(投票、平均)

    硬投票

    image-20220214103407094

    软投票

    image-20220214103422542

  • boosting/bagging(集成学习)

  • stacking/blending

本文主要介绍stacking/blending方法的原理,及其实际应用

Stacking模型本质上是一种分层的结构,这里简单起见,只分析二级Stacking.假设我们有3个基模型M1、M2、M3。[1]

  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}\]

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

    image-20220214114151806

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

    image-20220214114243425

注意:

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

image-20220214111331739

上图的模型1-5其实是一个模型在不同折下训练。

最终的代码是两层循环,第一层循环控制基模型的数目,每一个基模型要这样去得到P1,T1,第二层循环控制的是交叉验证的次数K,对每一个基模型,会训练K次最后拼接得到P1,取平均得到T1。

python实现[2]

### 6折stackingn_folds = 6skf = 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

posted @ 2022-02-14 11:50 鱼与鱼 阅读(7) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员