Task5 模型融合

智慧海洋竞赛实践 专题五文章目录智慧海洋竞赛实践 专题五1. 模型融合概述1.1 简单加权融合(1)平均法-Averaging(2)投票法-voting1.2 stacking/blending(1)堆叠法-stacking(2)混合法 - blending2. 代码实现2.1 导入包2.2 数据准备2.3 模型融合1. 模型融合概述1.1 简单加权融合(1)平均法-Averaging对于回归问题,一个简单直接的思路是取平均。将多个模型的回归结果取平均值作为最终预测结果,进而把多个弱分类器荣
摘要由CSDN通过智能技术生成

智慧海洋竞赛实践 专题五

1. 模型融合概述

1.1 简单加权融合

(1)平均法-Averaging
  1. 对于回归问题,一个简单直接的思路是取平均。将多个模型的回归结果取平均值作为最终预测结果,进而把多个弱分类器荣和城强分类器。
  2. 稍稍改进的方法是进行加权平均,权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6。
  3. 平均法或加权平均法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。
  4. Averaging也可以用于对分类问题的概率进行平均。
(2)投票法-voting
  1. 对于一个二分类问题,有3个基础模型,现在我们可以在这些基学习器的基础上得到一个投票的分类器,把票数最多的类作为我们要预测的类别。
  2. 投票法有硬投票(hard voting)和软投票(soft voting)
  3. 硬投票: 对多个模型直接进行投票,不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类。
  4. 软投票:增加了设置权重的功能,可以为不同模型设置不同权重,进而区别模型不同的重要度。

1.2 stacking/blending

(1)堆叠法-stacking

基本思想:用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集(第一层),来学习一个新的学习器(第二层)。

背景: 为了帮助大家理解模型的原理,我们先假定一下数据背景。

  1. 训练集数据大小为10000*100,测试集大小为3000*100。即训练集有10000条数据、100个特征;测试集有3000条数据、100个特征。该数据对应回归问题
  2. 第一层使用三种算法-XGB、LGB、NN。第二层使用GBDT。

算法过程:

  1. 第一层

    • XGB算法
      • 输入:使用训练集进行5-fold处理
      • 处理:具体处理细节如下
        • 使用1、2、3、4折作为训练集,训练一个XGB模型并预测第5折和测试集,将预测结果分别称为XGB-pred-tran5(shape 2000*1)和XGB-pred-test1(shape 3000*1).
        • 使用1、2、3、5折作为训练集,训练一个XGB模型并预测第4折和测试集,将预测结果分别称为XGB-pred-tran4(shape 2000*1)和XGB-pred-test2(shape 3000*1).
        • 使用1、2、4、5折作为训练集,训练一个XGB模型并预测第3折和测试集,将预测结果分别称为XGB-pred-tran3(shape 2000*1)和XGB-pred-test3(shape 3000*1).
        • 使用1、3、4、5折作为训练集,训练一个XGB模型并预测第2折和测试集,将预测结果分别称为XGB-pred-tran2(shape 2000*1)和XGB-pred-test4(shape 3000*1).
        • 使用2、3、4、5折作为训练集,训练一个XGB模型并预测第1折和测试集,将预测结果分别称为XGB-pred-tran1(shape 2000*1)和XGB-pred-test5(shape 3000*1).
      • 输出:
        • 将XGB分别对1、2、3、4、5折进行预测的结果合并,得到XGB-pred-tran(shape 10000*1)。并且根据5-fold的原理可以知道,与原数据可以形成对应关系。因此在图中称为NEW FEATURE。
        • 将XGB-pred-test1 - 5 的结果使用Averaging的方法求平均值,最终得到XGB-pred-test(shape 3000*1)。
    • LGB算法
      • 输入:与XGB算法一致
      • 处理:与XGB算法一致。只需更改预测结果的命名即可,如LGB-pred-tran5LGB-pred-test1
      • 输出:
        • 将LGB分别对1、2、3、4、5折进行预测的结果合并,得到LGB-pred-tran(shape 10000*1)。
        • 将LGB-pred-test1 - 5 的结果使用Averaging的方法求平均值,最终得到LGB-pred-test(shape 3000*1)。
    • NN算法 - 同样对应图中model 1部分
      • 输入:与XGB算法一致
      • 处理:与XGB算法一致。只需更改预测结果的命名即可,如NN-pred-tran5NN-pred-test1
      • 输出:
        • 将NN分别对1、2、3、4、5折进行预测的结果合并,得到NN-pred-tran(shape 10000*1)。
        • 将NN-pred-test1 - 5 的结果使用Averaging的方法求平均值,最终得到NN-pred-test(shape 3000*1)。
  2. 第二层

    • 训练集:将三个新特征 XGB-pred-tranLGB-pred-tranNN-pred-tran合并得到新的训练集(shape 10000*3)

    • 测试集:将三个新测试集XGB-pred-testLGB-pred-testNN-pred-test合并得到新的测试集(shape 30000*3)

    • 用新训练集和测试集构造第二层的预测器,即GBDT模型

(2)混合法 - blending

Blending与Stacking大致相同,只是Blending的主要区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集。简单来说,Blending直接用不相交的数据集用于不同层的训练。

同样以上述数据集为例,构造一个两层的Blending模型。

首先将训练集划分为两部分(d1,d2),例如d1为4000条数据用于blending的第一层,d2是6000条数据用于blending的第二层。

  1. 第一层:用d1训练多个模型,将其对d2和test的预测结果作为第二层的New Features。例如同样适用上述三个模型,对d2生成6000*3的新特征数据;对test生成3000*3的新特征矩阵。

  2. 第二层:用d2的New Features和标签训练新的分类器,然后把test的New Features输入作为最终的测试集,对test预测出的结果就是最终的模型融合的值。

优缺点对比

  • 优点:

    • 比stacking简单(因为不用进行k次的交叉验证来获得stacker feature)
    • 避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集
    • 在团队建模过程中,不需要给队友分享自己的随机种子
  • 缺点:

    • 使用了很少的数据(是划分hold-out作为测试集,并非cv)
    • blender可能会过拟合(其实大概率是第一点导致的)
    • stacking使用多次的CV会比较稳健

2. 代码实现

2.1 导入包

import pandas as pd
import numpy as np
import warnings
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns

warnings.filterwarnings('ignore')
%matplotlib inline

import itertools
import matplotlib.gridspec as gridspec
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB 
from sklearn.ensemble import RandomForestClassifier,RandomForestRegressor
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score, StratifiedKFold, KFold,train_test_split

from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import VotingClassifier
import lightgbm as lgb
from sklearn.neural_network import MLPClassifier,MLPRegressor
from sklearn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值