622. Playground Series - Season 4, Episode 8 | playground-series-s4e8
大家好!
又一个激动人心的 24 小时自动拟合机器学习模型比赛!向所有参赛者致敬,并特别感谢 Team AGA,他们早期取得的 0.98533 分数让我们倍感压力,我们在接下来的 12 个小时里一直在试图超越这个分数。最终,胜负取决于微小的分数差异,甚至 Kaggle leaderboard 都无法可视化这种差异,所以我们觉得自己很幸运能够险胜。以下是我们对第四届大奖赛方法的详细介绍。
但首先,我们要强调的是,2024 年国际自动化机器学习会议 (AutoML 2024) 将于 9 月 9 日至 12 日在巴黎举行 (见 https://2024.automl.cc/)!我们将参加会议,很高兴能在会议上见到来自 Kaggle 的其他 (Auto)ML 爱好者 :)
我们使用 AutoGluon 作为我们的 AutoML 系统,通过源码安装最新主线版本并进行调整以启用分布式计算(见下文)。在此基础上,我们本次比赛的方法总结如下:
我们运行了一小时的默认版本 AutoGluon 和四小时的自定义版本 AutoGluon。对于自定义版本,我们使用了以下设置:
0.98531 提升到 0.98533。我们缓存了所有实验中所有模型的所有预测概率,然后为最终解决方案运行了事后集成。这使我们能够勉强超越 Team AGA!在上一次比赛之后,我们觉得需要为这些(非常)大数据比赛扩展我们的计算能力。因此,除了使用单个 AWS 计算实例外,我们还努力使用跨计算节点分布的 AutoGluon。
本 write-up 的补充代码仓库可以在这里找到:https://github.com/AutoML-Grandmasters/Fourth-AutoML-Grand-Prix/tree/main
我们自定义运行 AutoGluon 的可复制设置可以在这个 文件 中找到。
我们使用以下代码清理测试预测中不存在的不噪声观测值,将它们设置为 nan。
import numpy as np
import pandas as pd
train_data = pd.read_csv("./train.csv")
test_data = pd.read_csv("./test.csv")
weird_columns = [
"cap-shape",
"cap-surface",
"cap-color",
"gill-attachment",
"gill-spacing",
"gill-color",
"veil-type",
"veil-color",
"has-ring",
"ring-type",
"spore-print-color",
"habitat",
"does-bruise-or-bleed",
"stem-root",
"stem-surface",
"stem-color",
]
for col in weird_columns:
allowed_vals = test_data[col].unique()
train_data.loc[~train_data[col].isin(allowed_vals), col] = np.nan
test_data.loc[~test_data[col].isin(allowed_vals), col] = np.nan
要在 log_loss 上早停,请将以下内容传递给 AutoGluon 的 fit 调用:ag_args_fit={"stopping_metric": "log_loss"}。这有时会有所帮助,因为在基于阈值的指标(如 MCC)上早停可能过早。
这是当前版本的分布式 AutoGluon:https://github.com/LennartPurucker/autogluon/tree/distributed_autogluon
有关如何使用它的更多细节的示例脚本可以在这里找到:https://github.com/AutoML-Grandmasters/Fourth-AutoML-Grand-Prix/blob/main/autogluon_distributed_example.py
根据我们的经验,它 mostly 稳定,但有一些与 GPU 相关的问题,我们希望在原型中修复这些问题。我们计划在未来将此更成熟的版本集成到主线 AutoGluon 中(并且已经在进行中)。
我们使用了 1000 个 CPU,分布在具有 20 或 32 个 Intel(R) Xeon(R) Gold 6242 CPUs @ 2.80GHz 的节点上,每个节点约有 150 GB 的 RAM。集群由 SLURM 管理,我们使用 Ray 创建一个子集群,AutoGluon 可以(原生地)使用该集群来拟合模型。要运行分布式 AutoGluon,只需要一个 Ray 集群,可以在本地计算、SLURM 集群或云资源上创建。
此外,我们使用了一个具有 192 个 vCPUs 的 AWS m7i.48xlarge EC2 实例来运行默认 AutoGluon。
为了获得比 AutoGluon 中现有的更好的模型组合,我们重新运行了 TabRepo 论文(将在 AutoML 会议上展示)的工作,但使用大小为 200 的组合,而不是 AutoGluon 的 best_quality 设置中使用的 100 大小组合。我们还包含了更多的模型族:线性模型和 KNN,尽管我们最终禁用了一些模型,因为它们没有帮助,有时推断需要很长时间。
我们还为 LightGBM、XGBoost 和 CatBoost 添加了具有更大 max_bin 值的配置。此外,我们移除了一组我们发现对于大数据集预测时间过长的配置。你可以在这个 文件 中找到最终组合。我们过滤了表现良好的模型组合(见 这里)。
我们希望通过给 AutoGluon 中的 贪婪集成选择 更多迭代来找到更好的最终事后集成。遗憾的是,到目前为止,还没有简单的界面来增加这个数字。因此,我们简单地修改了本地安装的 AutoGluon 源码。为此,需要将 此行 中的值设置为 100。
autogluon.core.models.greedy_ensemble.ensemble_selection.EnsembleSelection 第 112 行中的 round_decimals 变量设置为 8 (见 GitHub 上的 这里)。此致,
Lennart, Nick (@innixma), 和 Arjun (@neonkraft), 代表 "AutoML 大师" 团队
prior Grand Prix 竞赛 Write-ups: 第一届 AutoML 大奖赛竞赛, 第二届 AutoML 大奖赛竞赛, 第三届 AutoML 大奖赛竞赛