624. Playground Series - Season 4, Episode 9 | playground-series-s4e9
正如我在 之前的总结文章 中提到的,我打算本月退后一步,更审慎地参与,我也确实这样做了。我很快就会详细介绍细节,但让我先解释一下标题,它分享了一个公开的秘密,即我的方法本质上与之前相同:
收集 (Gather): 收集 OOF(折外)预测。
岭回归 (Ridge): 构建集成模型 - 你不一定非要使用岭回归,但它通常表现很好,而且很适合玩文字游戏 😀
重复 (Repeat): 字面意思,就是这样 - 当然也是为了完成文字游戏。
在详细介绍之前,我想感谢那些分享见解、发现和代码的慷慨人士,包括但不限于:
@alexryzhkov (以及 AutoML 团队), @roberthatch, @omidbaghchehsaraei, @cdeotte, @siukeitin, @ravaghi, @oscarm524, @ravi20076, @tilii7, @ricopue, @serhiikravtsov, @allegich, @backpaker
我在 17 号有一个为期多周的 LLM 项目要完成,并且在那之后的一周内还要 review 该课程中 peers 的 3 个项目。家里也发生了持续的健康紧急情况。所以很明显,直到最后一周左右,甚至整个期间,我的参与都会非常有限。在这个阶段,我密切关注竞赛,查看讨论帖和有趣的公开 Notebook。我偶尔提交一个模型看看得分,并时不时屈服于“盲目融合”的诱惑。很高兴本月有 @cdeotte 参与,他发布了几篇深刻的帖子(引发了 @siukeitin 和其他人的深刻回应),并慷慨地分享了 Notebook。
基于过去几个月(尤其是上个月)的竞赛,我认为 Light AutoML Testers (@alexrhyzkov 等人)、@roberthatch 和 AutoML Masters (@innixma 等人) 的第一天解决方案将经得起时间的考验 - 既然 @alexrhyzkov 和 @roberthatch 慷慨地分享了他们的 OOF,我决定以此为起点。我也觉得接近 72000 的公共榜单分数(没有任何盲目融合)可能会表现不错。在这个阶段,我做的最有后果的事情是将来自 @alexrhyzkov 的 24 个 OOF 扔进 AutoGluon,并确认它们使用 GPU-P100/CPU/GPU-T4 的得分分别为 72046/72057/72063。
大约在 20 号,我终于开始整合 OOF。我首先结合了来自 @alexrhyzkov、@roberthatch 和最终获胜者 @martinapreusse 的 OOF - 这 30 个 OOF 加上岭回归使我在公共榜单上获得了 71958 分,在私有榜单上得分为 63001,这将排名第 5。有了我的第一个低于 72000 的分数,我觉得事情有了坚实的基础,从那以后,我一次添加几个模型。鉴于我的时间很少,直到还剩 3 天时我才只有 41 个 OOF - 每天添加一个模型左右。临近结束时,我开始拼命添加新的 OOF,尝试是否包含原始数据集、更改超参数、使用 AG 配合 CPU/P100/T4 等。直到倒数第二天,我才意识到 KaggleX 数据集(使用 GAN 在同一原始数据集上生成,因此可能与竞赛数据集非常相似)实际上是可访问的,我 Quickly 重新运行了几个包含 KaggleX 的 Notebook。 retrospectively 看来,这对公共榜单有帮助,但对私有榜单没有帮助。时不时地,我会与得分最高的公开 Notebook 融合,这通常能改善公共榜单分数,比例从 99:1(我的:公开的)到 70:30(但很少超过这个比例)。
最后,我达到了 77 个 OOF,本可以添加更多,但我可以看到 CV 分数几乎没有改善,偶尔甚至变差。最后,我选择了未与其他 Notebook 提交融合的最佳得分提交(71808,私有 62958)和通过与得分最高的公开 Notebook 融合实现的最佳公共榜单分数提交(71770,私有 62977)。整个月,我们一直在讨论是否会有大洗牌,确实发生了巨大的洗牌,除了我之外,前 11 名中的每个人都上升了 300 名或更多!我当然很高兴能在洗牌中幸存下来,并在过去 7 场 Playground 竞赛中第 6 次进入前 10 名。热烈祝贺 @martinapreusse、@gerlandore、@tilii7 和其他前 10 名(以及前 1% 等)及 beyond 的人,他们坚持己见,收获了回报!
所以,结局圆满。但还有一个小启示 оставалось ......
每隔一段时间,我会将集成模型产生的 OOF 预测扔进我的集合中 - 我是在一位 Playground 系列前获胜者的总结文章中发现这个想法的(我现在不记得是哪一篇了),它往往有效(但也可能导致过拟合 - 所以请自行判断)。这次,我使用了基于 30 个 OOF 的 AG 产生的此类 OOF,以及 33 个 OOF 后的爬山算法 (HC) - 它们似乎都有帮助,虽然只有一点点。这是 Kaggle,我会接受的。
但是当我扔进基于 41 个 OOF 的 AG 产生的 OOF 预测时(OOF 得分:72185,公共榜单:71855),发生了一件奇怪的事情 - 允许正负权重的 HC 像往常一样工作,但仅允许正权重的 HC 甚至没有添加一个其他 OOF 到这个模型中。我以前从未见过这种情况,想知道这是否某种迹象表明这已经是极限了。然而,岭回归确实产生了更好的 CV 和榜单分数,所以我继续前进。
竞赛结束后,我再次查看了我的分数 - 通过搜索 '6295',我发现我有 5 个分数优于我的最终分数 (62958),都在 62950 到 62955 之间。然后我搜索 '6296',发现又有五个分数在 62959 到 62966 之间。'6294' 没有出现任何结果,所以我想我有 11 个分数介于排名第 2 和第 4 的分数之间,然后去吃了晚饭。之后,我意识到可能有更低的分数,果然有一个 62933,一个潜在的第 2 名分数!这个分数是使用 48 个 OOF 的岭回归产生的,包括基于 41 个 OOF 的 AG-OOF。这促使我进一步查看,果然,有一个 62892 - 猜猜怎么着,它与上面提到的基于 41 个 OOF 的 AG 运行来自同一轮,只不过那个是用 GPU (T4),而这个是用 CPU(s)(OOF 得分:72092,公共榜单:71922)。所以我错过了一个潜在的第 1 名分数。不过不能感觉糟糕,因为即使我只坚持自己的集成模型,我也不太可能选择那个。
附注:岭回归产生了最好的集成分数
有一段时间,我使用了各种集成器 - 岭回归、AG、带和不带负权重的 HC(这次没有使用 GBDT)。例如,以下是使用 30 个 OOF 通过各种集成方法的结果:
| 集成器 | CV 得分 | 公共榜单 | 私有榜单 |
|---|---|---|---|
| 岭回归 | 72018 | 71958 | 63001 |
| AutoGluon, GPU T4 | 72311 | 71993 | 63029 |
| AutoGluon, GPU P100 | 72317 | 72000 | 63028 |
| AutoGluon, CPUs | 72334 | 72011 | 63029 |
| 爬山算法 | 72297 | 71973 | 63007 |
| 爬山算法,仅正权重 | 72321 | 71984 | 62991 |
这具有相当的代表性(除了改变 CPU/GPU 选择没有以任何固定顺序产生 AG 结果)。岭回归几乎总是产生最好的 CV 和榜单分数,虽然我们看到它偶尔没有产生最好的私有榜单分数,但它速度极快,用它不会出大错。这把我们带回了
收集,岭回归,重复。