文章目录

  • 平均
    • 1.简单平均
    • 2.加权平均
  • 投票
    • 1.简单投票
    • 2.加权投票
  • stacking
  • blending
  • 总结

平均

1.简单平均

结果直接融合 求多个预测结果的平均值。pre1-pren分别是n组模型预测出来的结果,将其进行加权融

pre = (pre1 + pre2 + pre3 +...+pren )/n

2.加权平均

根据之前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。

pre = 0.3pre1 + 0.3pre2 + 0.4pre3

投票

1.简单投票

from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))

2.加权投票

from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)], voting='soft', weights=[2, 1, 1])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))

stacking

将若干基学习器获得的预测结果,将预测结果作为新的训练集来训练一个学习器。如下图 假设有五个基学习器,将数据带入五基学习器中得到预测结果,再带入模型六中进行训练预测。但是由于直接由五个基学习器获得结果直接带入模型六中,容易导致过拟合。所以在使用五个及模型进行预测的时候,可以考虑使用K折验证,防止过拟合。

  • stacking中由于两层使用的数据不同,所以可以避免信息泄露的问题。
  • 在组队竞赛的过程中,不需要给队友分享自己的随机种子。
import warnings
warnings.filterwarnings('ignore')
import itertools
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
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
from mlxtend.classifier import StackingClassifier
from sklearn.model_selection import cross_val_score, train_test_split
from mlxtend.plotting import plot_learning_curves
from mlxtend.plotting import plot_decision_regions# 以python自带的鸢尾花数据集为例
iris = datasets.load_iris()
X, y = iris.data[:, 1:3], iris.targetclf1 = KNeighborsClassifier(n_neighbors=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = GaussianNB()
lr = LogisticRegression()
sclf = StackingClassifier(classifiers=[clf1, clf2, clf3], meta_classifier=lr)label = ['KNN', 'Random Forest', 'Naive Bayes', 'Stacking Classifier']
clf_list = [clf1, clf2, clf3, sclf]fig = plt.figure(figsize=(10,8))
gs = gridspec.GridSpec(2, 2)
grid = itertools.product([0,1],repeat=2)clf_cv_mean = []
clf_cv_std = []
for clf, label, grd in zip(clf_list, label, grid):scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')print("Accuracy: %.2f (+/- %.2f) [%s]" %(scores.mean(), scores.std(), label))clf_cv_mean.append(scores.mean())clf_cv_std.append(scores.std())clf.fit(X, y)ax = plt.subplot(gs[grd[0], grd[1]])fig = plot_decision_regions(X=X, y=y, clf=clf)plt.title(label)plt.show()

blending

blending是将预测的值作为新的特征和原特征合并,构成新的特征值,用于预测。为了防止过拟合,将数据分为两部分d1、d2,使用d1的数据作为训练集,d2数据作为测试集。预测得到的数据作为新特征使用d2的数据作为训练集结合新特征,预测测试集结果。

  • 由于blending对将数据划分为两个部分,在最后预测时有部分数据信息将被忽略。
  • 同时在使用第二层数据时可能会因为第二层数据较少产生过拟合现象。
# 以python自带的鸢尾花数据集为例
data_0 = iris.data
data = data_0[:100,:]target_0 = iris.target
target = target_0[:100]#模型融合中基学习器
clfs = [LogisticRegression(),RandomForestClassifier(),ExtraTreesClassifier(),GradientBoostingClassifier()]#切分一部分数据作为测试集
X, X_predict, y, y_predict = train_test_split(data, target, test_size=0.3, random_state=914)#切分训练数据集为d1,d2两部分
X_d1, X_d2, y_d1, y_d2 = train_test_split(X, y, test_size=0.5, random_state=914)
dataset_d1 = np.zeros((X_d2.shape[0], len(clfs)))
dataset_d2 = np.zeros((X_predict.shape[0], len(clfs)))for j, clf in enumerate(clfs):#依次训练各个单模型clf.fit(X_d1, y_d1)y_submission = clf.predict_proba(X_d2)[:, 1]dataset_d1[:, j] = y_submission#对于测试集,直接用这k个模型的预测值作为新的特征。dataset_d2[:, j] = clf.predict_proba(X_predict)[:, 1]print("val auc Score: %f" % roc_auc_score(y_predict, dataset_d2[:, j]))#融合使用的模型
clf = GradientBoostingClassifier()
clf.fit(dataset_d1, y_d2)
y_submission = clf.predict_proba(dataset_d2)[:, 1]
print("Val auc Score of Blending: %f" % (roc_auc_score(y_predict, y_submission)))

总结

  • 简单平均和加权平均是常用的两种比赛中模型融合的方式。其优点是快速、简单。
  • stacking在众多比赛中大杀四方,但是跑过代码的小伙伴想必能感受到速度之慢,同时stacking多层提升幅度并不能抵消其带来的时间和内存消耗,所以实际环境中应用还是有一定的难度,同时在有答辩环节的比赛中,主办方也会一定程度上考虑模型的复杂程度,所以说并不是模型融合的层数越多越好的。
  • 当然在比赛中将加权平均、stacking、blending等混用也是一种策略,可能会收获意想不到的效果哦!

以上内容来自datawhale数据挖掘组队学习

数据挖掘实践(金融风控)——task5:模型融合相关推荐

  1. 金融风控实战——模型融合

    过采样方法使用条件 (1)负样本可以代表样本空间 (2)数据是足够干净的(样本.特征没有噪声) 过拟合 (1)增多数据 (2)特征筛选 (3)调参 (4)模型融合 模型融合 投票器模型融合 from ...

  2. Datawhale 数据挖掘新手入门笔记 -Task5 模型融合

    文章目录 一.前言 二.模型融合目标 三.内容介绍 四.Stacking相关理论介绍 1.什么是stacking 2.如何进行stacking 3.Stacking的方法讲解 五.代码示例 1.回归\ ...

  3. Datawhale零基础入门数据挖掘-Task5模型融合

    Datawhale零基础入门数据挖掘-Task5模型融合 五.模型融合 5.1 模型融合目标 5.2 内容介绍 5.3 Stacking相关理论介绍 5.4 代码示例 5.4.1 回归\分类概率-融合 ...

  4. 入门金融风控-Task5-模型融合

    Tip:此部分为零基础入门金融风控的 Task5 模型融合部分,欢迎大家后续多多交流. 赛题:零基础入门数据挖掘 - 零基础入门金融风控之贷款违约预测 项目地址:https://github.com/ ...

  5. 【数据挖掘】金融风控 Task01 赛题理解

    [数据挖掘]金融风控 Task01 赛题理解 1.赛题介绍 1.1赛题概况 1.2 数据概况 1.3 预测指标 1.3.1 混淆矩阵 1.3.2 准确率.精确率.召回率.F1 Score 1.3.3 ...

  6. 【算法竞赛学习】二手车交易价格预测-Task5模型融合

    二手车交易价格预测-Task5 模型融合 五.模型融合 Tip:此部分为零基础入门数据挖掘的 Task5 模型融合 部分,带你来了解各种模型结果的融合方式,在比赛的攻坚时刻冲刺Top,欢迎大家后续多多 ...

  7. 零基础入门数据挖掘之金融风控-贷款违约预测

    零基础入门数据挖掘之金融风控-贷款违约预测 摘要 1.数据概况 2.数据读取 3.分类指标评价计算 摘要 在实践中学,很高兴有这次机会,与志同道合的小伙伴一起学习,本次主要通过天池实际比赛项目学习数据 ...

  8. 【数据挖掘】金融风控 Task02 数据分析

    [数据挖掘]金融风控 Task02 数据分析 1. 探索性数据分析(EDA)概述 1. 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classi ...

  9. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task5模型融合

    智慧海洋建设-Task5 模型融合 5.1 学习目标 学习融合策略 完成相应学习打卡任务 5.2 内容介绍 https://mlwave.com/kaggle-ensembling-guide/ ht ...

  10. 数据挖掘之金融风控-贷款违约预测 02数据分析

    数据挖掘之金融风控-贷款违约预测 02数据分析 数据挖掘之金融风控-贷款违约预测 02数据分析 1. 学习目标 2. 学习内容 3. 学习过程 3.1 导入库并读取数据集 3.2 数据集基本信息 3. ...

最新文章

  1. ABBYY在MS Office中创建PDF文件的方法
  2. metacoder-相关进化树图的绘制于实践
  3. 如何为HTML容器分配多个类?
  4. Linux学习之CentOS(五)--让我有些郁闷的mount命令
  5. 【渝粤教育】国家开放大学2018年春季 0529-21T高级英语阅读(1) 参考试题
  6. 链表题目--2 求链表的中间结点 和 求链表中倒数第k个结点
  7. upc 9325 序列本质
  8. 笛卡尔心形函数表达式_笛卡尔爱心函数表达式 笛卡尔形式
  9. 利用adsl拨号服务器VPS构建代理IP池
  10. 【python学习笔记】Python的六种内置对象
  11. 【转】 Linux那些事儿之我是U盘(16)冰冻三尺非一日之寒
  12. 天蓝色在ps中的色值_天蓝色事件网格集成测试
  13. Docker容器之间数据传输
  14. Word文档 | 删除回车符
  15. 一文了解 TKG 如何使用 GPU 资源池
  16. 位置度标注方法图解_新整理!安装工程施工图解手册,多彩文字标注现场图片,一看就懂...
  17. 如何判断光纤收发器是否有问题?
  18. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  19. DebugView使用方法
  20. 解决win10卡顿现象

热门文章

  1. 25个Linux相关的网站【转】
  2. hiho编程练习赛20
  3. PHP高级——抽象类与接口的区别(转)
  4. iframe 父级元素查找
  5. 在linux内核中操作文件的方法--使用get_fs()和set_fs(KERNEL_DS)
  6. 强大的DataGrid组件[4]_实现CURD[上]——Silverlight学习笔记[12]
  7. java导出sas_[转载]SAS Proc Export导出文件
  8. 域名型通配符ssl证书_西部数码使用指南:申请了主域名SSL证书,是否还需要申请www域名的...
  9. ios html5 自动全屏播放,禁止iPhone Safari video标签视频自动全屏的办法
  10. linux同步某台服务器,linux 两台服务器之间开机自动同步指定目录下的文件