678. Playground Series - Season 5, Episode 11 | playground-series-s5e11
副标题:3 模型 + AG 的岭回归集成
首先,热烈祝贺 @mahoganybuttstrings 获得第 1 名!
同时,感谢大家在整个月份中提供的富有洞察力的讨论和 Notebook。通过与你们所有人的互动,我学到了很多。
在这次比赛中,我觉得特征工程扮演的角色比其他任何因素都更重要。我的解决方案包含一个有效的特征集,用于训练 XGBoost、LightGBM 和 TabM(各 5 个种子),并使用岭回归将 AutoGluon 的 OOF/测试预测进行混合。
| 模型 | CV | 公共榜 | 私有榜 |
|---|---|---|---|
| LGBM | 0.92798 | 0.92795 | 0.92908 |
| XGB | 0.92790 | 0.92799 | 0.92908 |
| TabM | 0.92785 | 0.92779 | 0.92888 |
| 岭回归堆叠 | 0.92803 | 0.92800 | 0.92911 |
| +AG (最终) | 0.92805 | 0.92800 | 0.92912 |
我的大部分特征工程想法基于 @cdeotte 过去的解决方案。谢谢!
DIGIT_CATS 内部以及源自同一数值特征的数字之间添加了 2 路、3 路和 4 路交互。由于生成的特征可能包含噪声,我进行了轻量级的特征选择。
train_test_split (test_size=0.2) 而不是 K-Fold 来进行此选择过程。虽然这种方法可能仍然保留了一些冗余特征,但由于时间和计算资源的限制,我没有进行进一步的选择。我假设 GBDT 模型足够稳健,可以处理一定量的噪声。
(我也尝试使用 Optuna 优化 top-n 特征重要性,但没能使其有效工作。)
我使用 Optuna 对 XGB、LGBM 和 TabM 进行了参数调优。
train_test_split (test_size=0.2)我对 XGB、LGBM 和 TabM 进行了5 种子平均。
主要原因是为了稳定预测和验证分数。由于仅仅改变种子验证分数就会轻微波动,我决定不依赖单种子验证。
我使用 OOF 和测试预测通过岭回归 (Ridge Regression) 计算最终预测。
遵循 @greysky 在 Podcast 竞赛中的方法,我创建了一个数据生成器 Notebook。
在我的实现中,由于我想使用 5 折平均来计算 test_pred,我需要为每一折创建数据集(特别是对于目标编码 Target Encoding)。
随着 TE 特征数量的增加,每折 TE 所需的时间也增加了。通过预生成并简单加载数据,我显著提高了 Optuna 调优和多种子训练的效率。
我已经发布了用于提交的所有代码,包括 TabM 实现。希望这有所帮助!
数据生成器 (Data Generator) s5e11-data-generator (使用版本 4) 岭回归 (Ridge) s5e11-ridge-ensemble (注意:代码内 TabM 文件名中的 CV 分数与上表不同,因为一个小疏忽,我在文件名中放了第 5 个种子的分数。) LGBM s5e11-single-lgbm-tuned XGB s5e11-single-xgb-tuned TabM s5e11-single-tabm-tuned (我尚未验证 TabM 是否能在 Kaggle 内核上成功运行。可能会遇到内存溢出 OOM 或 12 小时超时。)被弃用的模型: 我还使用相同的特征集实现了 CatBoost、xRFM 和 RealMLP。然而,它们的准确率不如 LGBM/XGB/TabM,对集成贡献不大,因此被排除在外。(尽管如果更彻底地调优,xRFM 和 RealMLP 可能具有潜力)。
感谢阅读。快乐 Kaggle,相信你的 CV!