前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kaggle 机器学习之模型融合(stacking)心得

Kaggle 机器学习之模型融合(stacking)心得

作者头像
AI研习社
发布2018-03-19 11:00:50
1K0
发布2018-03-19 11:00:50
举报
文章被收录于专栏:AI研习社AI研习社

此文道出了本人学习 Stacking 入门级应用的心路历程。 在学习过程中感谢 @贝尔塔的模型融合方法(http://t.cn/R62UGLF),以及如何在 Kaggle 首战中进入前 10% 这篇文章(作者是章凌豪)。对于两位提供的信息,感激不尽。同时还有 Kaggle 上一些关于 ensemble 的文章和代码,比如这篇(http://t.cn/ROI2HyK)。 本文适用于被 stacking 折磨的死去活来的新手,在网上为数不多的 stacking 内容里,我已经假设你早已经看过了上述所提到的那几篇有用的文章了。但是,看完之后内心还是卧槽的。我希望下面的内容能成为,你在学习 stacking 的曲折道路上的一个小火把,给你提供一些微弱的光亮。

本文以 Kaggle 的 Titanic(泰坦尼克预测,https://www.kaggle.com/c/titanic)入门比赛来讲解 stacking 的应用(两层!)。

数据的行数:train.csv 有 890 行,也就是 890 个人,test.csv 有 418 行(418 个人)。

而数据的列数就看你保留了多少个 feature 了,因人而异。我自己的 train 保留了 7+1(1 是预测列)。

在网上为数不多的 stacking 内容里,相信你早看过了这张图:

这张图,如果你能一下子就能看懂,那就 OK。

如果一下子看不懂,就麻烦了,在接下来的一段时间内,你就会卧槽卧槽地持续懵逼......

因为这张图极具‘误导性’。(注意!我没说这图是错的,尽管它就是错的!!!但是在网上为数不多教学里有张无码图就不错啦,感恩吧,我这个小弱鸡)。

我把图改了一下:

对于每一轮的 5-fold,Model 1 都要做满 5 次的训练和预测。

Titanic 栗子:

Train Data 有 890 行。(请对应图中的上层部分)

每 1 次的 fold,都会生成 713 行 小 train, 178 行 小 test。我们用 Model 1 来训练 713 行的小 train,然后预测 178 行 小 test。预测的结果是长度为 178 的预测值。

这样的动作走 5 次! 长度为 178 的预测值 X 5 = 890 预测值,刚好和 Train data 长度吻合。这个 890 预测值是 Model 1 产生的,我们先存着,因为,一会让它将是第二层模型的训练来源。

重点:这一步产生的预测值我们可以转成 890 X 1 (890 行,1 列),记作 P1 (大写 P)

接着说 Test Data 有 418 行。(请对应图中的下层部分,对对对,绿绿的那些框框)

每 1 次的 fold,713 行 小 train 训练出来的 Model 1 要去预测我们全部的 Test Data(全部!因为 Test Data 没有加入 5-fold,所以每次都是全部!)。此时,Model 1 的预测结果是长度为 418 的预测值。

这样的动作走 5 次!我们可以得到一个 5 X 418 的预测值矩阵。然后我们根据行来就平均值,最后得到一个 1 X 418 的平均预测值。

重点:这一步产生的预测值我们可以转成 418 X 1 (418 行,1 列),记作 p1 (小写 p)

走到这里,你的第一层的 Model 1 完成了它的使命。

第一层还会有其他 Model 的,比如 Model 2,同样的走一遍, 我们有可以得到 890 X 1 (P2) 和 418 X 1 (p2) 列预测值。

这样吧,假设你第一层有 3 个模型,这样你就会得到:

来自 5-fold 的预测值矩阵 890 X 3,(P1,P2, P3) 和 来自 Test Data 预测值矩阵 418 X 3, (p1, p2, p3)。

-----------------------------------------

到第二层了..................

来自 5-fold 的预测值矩阵 890 X 3 作为你的 Train Data,训练第二层的模型 来自 Test Data 预测值矩阵 418 X 3 就是你的 Test Data,用训练好的模型来预测他们吧。

---------------------------------------

最后 ,放出一张 Python 的 Code,在网上为数不多的 stacking 内容里, 这个几行的 code 你也早就看过了吧,我之前一直卡在这里,现在加上一点点注解,希望对你有帮助:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档