返回列表

4th Place Solution - Wow! - Code Sharing

631. UM - Game-Playing Strength of MCTS Variants | um-game-playing-strength-of-mcts-variants

开始: 2024-09-05 结束: 2024-12-02 游戏AI 数据算法赛
第四名解决方案 - 哇!- 代码分享

第四名解决方案 - 哇!- 代码分享

作者: Manuel Campos (coreacasa)
发布时间: 2024-12-03
竞赛排名: 第 4 名
竞赛: UM Game Playing - Strength of MCTS Variants

大家好,

对我来说这是一个惊人的结果,我非常高兴!

我的第 4 名解决方案是一个“可怕”的组合,基本上是这里其他 Kaggle 选手分享的笔记本(Kaggle 学习),并根据公共榜单(Public Leaderboard)提供的分数进行了很好的调整。

我的第二次提交是遵循 stacking 策略(公共榜 0.420 - 私有榜 0.427),依赖于交叉验证(5gkf 0.407221),但这次过拟合公共榜单才是可行之路,至少在这里是这样。

从结果来看,训练集和测试集可能没有遵循相似的分布,而且看起来 35%-65% 的分割是一个简单的随机采样过程。

欧洲时间已经很晚了,所以我会尽快等待,再次编辑这个帖子,更详细地表达我对此次成功贡献者的感激之情,并分享解决方案代码。

谢谢,

更新编辑:2024/12/06 16:50 (CET)

致谢

我想感谢 Host @dennissoemers 和 Kaggle 工作人员 @ashleychow @sohier @mylesoneill 组织了这次竞赛,并祝贺他们出色的管理。像其他场合一样,我要感谢 Kaggle 为我们提供的资源。

这里最重要的是引用构成我最终解决方案基本来源的 Kaggle 选手和代码。非常感谢你们所有人。我包含了一些可能有用的信息以便跟进这个帖子。

(无优先级顺序)

带代码的解决方案

查看原始笔记本的链接:

随着下周五 GPU 配额更新的到来,我已经链接了一个新的代码,引用良好,包含所有来自我私人工作空间的输入(数据集和笔记本)。我的意思是对原始公共笔记本的所有准备性调整,以便进行最终推理。

MCTS-第四名解决方案 - 引用工作空间

概述

我在十月初开始了这次竞赛,断断续续地进行。我做的第一件事是使用 @andreasbis 的笔记本:MCTS | OOF Predictions as Features。修改了一些梯度提升模型的参数并查看其表现。未能取得成功进展,两周后,我确实成功地管理了一个集成,包含两个排名最高的公共笔记本(即"yukiZ"和"yunbase",公共榜均为 0.427)(几周后,这种组合被 @konstantinboyko 暂时分享,在社区一些成员中引起了争议)。结果(0.423)让我继续朝那个方向前进,添加了 2 个像"demidov"这样的神经网络,达到 0.422(当时前 20 名)。

不要遵循以任何竞赛这种方式开始的规则。危险在于,如果你很快取得成功,你的高榜单排名和不思考太多的舒适感可能会引诱你继续同样的路线。大多数时候,这不是最好的路径。但我继续这样做了,直到最终提交截止日期前 10 天,得分为 0.415(前 2 名),那是我选择的提交之一。

剩下的几天我致力于设置一个 stacking 策略解决方案,以平衡之前提交的高风险,完全过拟合于公共榜单信号。

代码 CV 公共榜 私有榜 私有排名
Submission2-Stacking-Solution (*) 5gkf: 0.407221 0.42005 0.42711 第 20 名
(*) 使用了一些从 这个笔记本 优化的权重
特征工程... 模型... 验证策略...

我在这里做的原创工作很少或没有,正如你可以想象的那样,在我使用的这么多解决方案之间,所有事情都有很大的多样性。

级联合并与带裁剪的手动回归

我以级联方式构建了集成。从初始基础开始,我逐个顺序添加其他解决方案,每一步都过拟合于公共榜单分数。下面的代码是最终快照,分数为 公共榜:0.41521 和 私有榜:0.42192。

不幸的是,我无法在这里展示级联分数的详细进展,因为在开发过程中,我也改变了步骤的顺序或操纵了一些已经设置的步骤(例如将 demidov(cat) 扩展为 demidov(cat) 和 demidov(cat_seed))。为此,我们将不得不复制每个瀑布及其分数(这里已超过)。同样,我不认为提供 CV 结果(带有 oofs)有什么意义,因为这不会指导任何选择。

这是代码块:

merging_sub = 0.400*yukiZ + 0.400*yunsuxiaozi + 0.100*demidov_nnet + 0.100*demidov_nnet_seed
merging_sub = 1.200*merging_sub - 0.200*matryoshka_lighgbm
merging_sub = 0.700*merging_sub + 0.300*ghulam
merging_sub = 1.250*merging_sub - 0.250*xiaolei
merging_sub = 0.750*merging_sub + 0.250*longggl
merging_sub = 1.200*merging_sub - 0.200*tatiana
merging_sub = 1.100*merging_sub - 0.050*demidov_cat - 0.050*demidov_cat_seed
merging_sub = 1.050*merging_sub - 0.050*ambrosm
merging_sub = 0.850*merging_sub + 0.150*yunbase_seed
merging_sub = 1.250*merging_sub - 0.250*yunbase_seed_nontext
merging_sub = 0.900*merging_sub + 0.100*martpreusse

每一步的评估涉及一个手动乘数(如 y=a+bX 中的 b)和一个加数(如 y=a+bX 中的 a)。"a" 不是很相关,我几乎没有用它玩。"b" 有更相关的效果,尽管一旦我在级联中积累了几个步骤,我只是偶尔强调它。最后,所有内容都以接近 -1 和 1 的末端轻微裁剪结束。

merging_sub = np.clip(merging_sub*1.250,-0.98,0.98)
merging_sub = np.where(merging_sub<0,merging_sub+0.005,merging_sub)
merging_sub = np.where(merging_sub>0,merging_sub-0.005,merging_sub)
merging_sub = np.clip(merging_sub,-0.98,0.98)
我的愿望...

我承认这不是一个复杂且出色的解决方案,但如果宿主能提取一些效用,或者至少某些 Kaggle 选手能这样做,我会感到满意。至少,我想它可以作为本次竞赛中社区分享的最强笔记本的"RMSE 降低函数”。

就是这样

致敬

同比赛其他方案