kaggle竞赛实战9——模型融合

有三种方法,

第一种:均值融合,代码如下

  data = pd.read_csv(\  result/submission_randomforest.csv\  ) 
      data['randomforest'] = data['target'].values 
       
      temp = pd.read_csv(\  result/submission_lightgbm.csv\  ) 
      data['lightgbm'] = temp['target'].values 
       
       
      temp = pd.read_csv(\  result/submission_xgboost.csv\  ) 
      data['xgboost'] = temp['target'].values 

   data['target'] = (data['randomforest'] + data['lightgbm'] + data['xgboost']) / 3  

data[['card_id','target']].to_csv("result/voting_avr.csv", index=False)  

发现简单的均值融合不能使模型效果提升

第二种:加权融合

加权融合的思路并不复杂,从客观计算流程上来看我们将赋予不同模型训练结果以不同权重,而具体权重的分配,我们可以根据三组模型在公榜上的评分决定,即假设模型A和B分别是2分和3分(分数越低越好的情况下),则在实际加权过程中,我们将赋予A模型结果3/5权重,B模型2/5权重,因此,加权融合过程如下:  
    data['target'] = data['randomforest']*0.2+data['lightgbm']*0.3 + data['xgboost']*0.5 
      data[['card_id','target']].to_csv('  result/voting_wei1.csv'  , index=False)

发现结果略有改善,但实际结果不如但模型结果

第三种:stacking

思路:比如你用了三种模型(XGBOOST,LIGHTGBM,RANDOMFOREST),每个模型都会将数据集分成五份进行交叉验证,并在验证集上进行预测得到五个验证结果,拼起来就是一个完整的验证结果,把三个模型验证结果竖向拼起来就是一个完整的验证结果,同理在测试集上做这个操作,得到的prediction_train和prediction_test就是二阶段训练的训练集和测试集

be18727607304102b98189224d5d1b57.png

  读入数据:oof是训练数据集的预测结果(也就是上面的prediction_train),而predictions则是单模型预测结果。

 oof_rf  = pd.read_csv('./preprocess/train_randomforest.csv') 
      predictions_rf  = pd.read_csv('./preprocess/test_randomforest.csv') 
       
      oof_lgb  = pd.read_csv('./preprocess/train_lightgbm.csv') 
      predictions_lgb  = pd.read_csv('./preprocess/test_lightgbm.csv') 
       
      oof_xgb  = pd.read_csv('./preprocess/train_xgboost.csv') 
      predictions_xgb  = pd.read_csv('./preprocess/test_xgboost.csv')  

  def stack_model(oof_1, oof_2, oof_3, predictions_1, predictions_2, predictions_3, y): 
          
          # Part 1.数据准备 
          # 按行拼接列,拼接验证集所有预测结果 
          # train_stack就是final model的训练数据 
          train_stack = np.hstack([oof_1, oof_2, oof_3]) 
          # 按行拼接列,拼接测试集上所有预测结果 
          # test_stack就是final model的测试数据 
          test_stack = np.hstack([predictions_1, predictions_2, predictions_3]) 

         # 创建一个和测试集行数相同的全零数组 
          predictions = np.zeros(test_stack.shape[0]) 
           
          # Part 2.多轮交叉验证 
          from sklearn.model_selection import RepeatedKFold 
          folds = RepeatedKFold(n_splits=5, n_repeats=2, random_state=2020) #5折交叉验证,两轮

          
          # fold_为折数,trn_idx为每一折训练集index,val_idx为每一折验证集index 
          for fold_, (trn_idx, val_idx) in enumerate(folds.split(train_stack, y)): 
              # 打印折数信息 
              print('  fold n°{}'  .format(fold_+1)) 
              # 训练集中划分为训练数据的特征和标签 
              trn_data, trn_y = train_stack[trn_idx], y[trn_idx] 
              # 训练集中划分为验证数据的特征和标签 
              val_data, val_y = train_stack[val_idx], y[val_idx] 
              # 采用贝叶斯回归作为结果融合的模型(final model) 
              clf = BayesianRidge() 
              # 在训练数据上进行训练 
              clf.fit(trn_data, trn_y) 
              # 在验证数据上进行预测,并将结果记录在oof对应位置 
              # oof[val_idx] = clf.predict(val_data) 
              # 对测试集数据进行预测,每一轮预测结果占比额外的1/10 
              predictions += clf.predict(test_stack) / (5 * 2) 
           
          # 返回测试集的预测结果 
          return predictions  

最终得到私榜分数3.627,公榜3.72,即staking比voting更有效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++必修:探索C++的内存管理

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. C/C的内存分布 我们首先来看一段代码及其相关问题 int globalVar 1; static…

华为OD刷题C卷 - 每日刷题 19(查找接口成功率最优时间段、最大N个数与最小N个数的和)

1、(查找接口成功率最优时间段): 这段代码是解决“查找接口成功率最优时间段”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个辅助方法getSum,用于找出数组中最长的时间段&…

微信小程序毕业设计-网吧在线选座系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…

力扣 T62 不同路径

题目 连接 思路 思路1 &#xff1a; BFS爆搜 class Solution { public:queue<pair<int,int>>q;int uniquePaths(int m, int n) {q.push({1,1}); // 起始位置vector<pair<int, int>> actions;actions.push_back({0, 1}); // 向下actions.push_bac…

ant-desigin-vue动态表头并填充数据

ant-design-vue 是一个基于 Ant Design 设计规范和 Vue.js 的 UI 组件库。如果你想在 ant-design-vue 中实现动态表头并填充数据&#xff0c;你可以使用 a-table 组件并动态生成其 columns 和 dataSource 属性。 以下是一个简单的示例&#xff0c;展示了如何动态生成表头和填充…

【网络编程开发】11.IO模型 12.IO多路复用

11.IO模型 什么是IO: IO 是 Input/Output 的缩写&#xff0c;指的是输入和输出。在计算机当中&#xff0c;IO 操作通常指将数据从一个设备或文件中读取到计算机内存中&#xff0c;或将内存中的数据写入设备或文件中。这些设备可以包括硬盘驱动器、网卡、键盘、屏幕等。 通常用…

selenium自动化测试入门 —— Alert/Confirm/Prompt 弹出窗口处理!

一、Alert/Confirm/Prompt弹出窗口特征说明 Alert弹出窗口&#xff1a; 提示用户信息只有确认按钮&#xff0c;无法通过页面元素定位&#xff0c;不关闭窗口无法在页面上做其他操作。 Confirm 弹出窗口&#xff1a; 有确认和取消按钮&#xff0c;该弹出窗口无法用页面元素定…

06_深度学习历史的里程碑--重读AlexNet

1.1 介绍 AlexNet是深度学习历史上一个非常重要的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;模型&#xff0c;由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年设计并提出。它因在ImageNet大规模视觉识别挑战赛中的卓越表现而闻名&a…

2024世界技能大赛某省选拔赛“网络安全项目”B模块--数据包分析(jsp流量解密)

2024世界技能大赛某省选拔赛“网络安全项目”B模块--数据包分析② 任务一、网络数据包分析取证解析:任务一、网络数据包分析取证解析: A 集团的网络安全监控系统发现有恶意攻击者对集团官方网站进行攻击,并抓取了部分可疑流量包。请您根据捕捉到的流量包,搜寻出网络攻击线…

冯喜运:6.10周一黄金还会再次拉升吗?日内黄金原油操作策略

【黄金消息面分析】&#xff1a;周一(6月10日)亚市盘中&#xff0c;现货黄金交在上周五暴跌后仍然承压&#xff0c;目前金价位于2294美元/盎司左右。因强劲非农数据刺激美元大涨&#xff0c;现货黄金上周五出现暴跌。此外&#xff0c;上周五数据显示&#xff0c;最大黄金消费国…

在python中关于元组的操作

创建元组 如上图所示&#xff0c;a&#xff08;&#xff09;和b tuple(),,这两种方式都可以创建出元组。 在创建元组的时候&#xff0c;指定初始值 如上图所示&#xff0c;也可以在创建元组的时候&#xff0c;指定初始值。 同列表一样元组中的元素也可以是任意类型的。 同列…

Qt 布局管理

布局基础 1)Qt 布局管理系统使用的类的继承关系如下图: QLayout 和 QLayoutItem 这两个类是抽象类,当设计自定义的布局管理器时才会使用到,通常使用的是由 Qt 实现的 QLayout 的几个子类。 2)Qt 使用布局管理器的步骤如下: 首先创建一个布局管理器类的对象。然后使用该…

封装了一个简单理解的iOS竖直文字轮播

效果图 原理 就是持有两个视图&#xff0c;并且两个视图同时改变origin.y 动画结束之后&#xff0c;判断哪个视图是在上面并且看不到的&#xff0c; 则将该视图移动到底部&#xff0c;并且该视图展示下一跳内容 在开始下一轮动画 代码 - (void)startAnimationWithDuration:(…

React 和 Vue的跨端|跨平台框架介绍

React 和 Vue 都有各自的生态系统&#xff0c;可以实现跨平台开发&#xff0c;包括 Web、iOS、Android 和其他平台。 Vue.js 的跨平台框架和服务器端渲染框架&#xff1a; Weex&#xff1a;Weex 是一个由阿里巴巴开发的跨平台框架&#xff0c;它可以使用 Vue.js 编写原生应用&a…

【Linux】网络配置(静态/动态/手动/nmcli)

目录 一、手动修改网络配置文件&#xff1a;静态 二、手动修改网络配置文件&#xff1a;动态 三、nmcli工具命令修改网络配置文件&#xff1a;静态 四、nmcli工具命令修改网络配置文件&#xff1a;动态 错误排查分析&#xff1a;编辑虚拟网络编辑器不生效 1、排除VMware启…

攻防世界---misc---gif

1、题目描述 2、下载附件&#xff0c;是一堆黑白图片&#xff0c;看到这里我一头雾水 3、看别人写的wp&#xff0c;说是白色表示0&#xff0c;黑色表示1。按照顺序写出来后得到 4、解码的时候&#xff0c;把逗号去掉。二进制转字符串得到&#xff1a; 5、 flag{FuN_giF}

24点 算法

这里写自定义目录标题 起因需求分析Python Code 起因 今天和孩子们一起玩24点&#xff0c; 发现有点玩不过。 想到可以用编程的方法写一个小程序来玩。 需求分析 需求输入输入1到13的数&#xff0c;这个可以用图像识别方案来做。 参考项目扑克牌识别 [https://blog.csdn.net…

阿里通义千问 Qwen2 大模型开源发布

阿里通义千问 Qwen2 大模型开源发布 Qwen2 系列模型是 Qwen1.5 系列模型的重大升级。该系列包括了五个不同尺寸的预训练和指令微调模型&#xff1a;Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B 以及 Qwen2-72B。 在中文和英文的基础上&#xff0c;Qwen2 系列的训练数…

C++11原子操作

目录 1.什么是原子操作 2.为什么需要原子操作&#xff1f; 3.C中的原子操作 4.原子操作使用及注意 5.应用场景 6.使用原子操作的最佳实践 7.原子操作与锁机制的比较 8.总结 1.什么是原子操作 原子操作是一种不可分割的操作&#xff0c;即在多线程环境中&#xff0c;这些…

Linux介绍-以CentOS和Ubuntu为例---linux入门01

Linux是一种广泛使用的开源操作系统&#xff0c;以其稳定性、安全性和灵活性而闻名。本文将详细介绍Linux操作系统&#xff0c;重点讨论CentOS和Ubuntu这两个常见的发行版&#xff0c;并比较它们的特点、适用场景以及在实际应用中的优劣。 01 Linux操作系统概述 1.1 Linux的起…