返回列表

#4 LB Notebooks

417. Tabular Playground Series - Jan 2021 | tabular-playground-series-jan-2021

开始: 2021-01-02 结束: 2021-01-31 数据算法赛
#4 LB Notebooks

#4 LB Notebooks

作者:Dave E | 排名:第 4 名

感谢 Kaggle 举办这次比赛。

祝贺 @springmanndaniel 获得第一名,以及他与其他人之间巨大的分数差距。看到他已经分享了解决方案,我很期待从中学习。

感谢其他分享想法的参与者。我阅读了不少公开的 Notebook,并且很期待查看其他一些解决方案。

我并没有得出什么特别优雅的方案,但出于兴趣分享了我的神经网络(NN)Notebook。一月份的时候我尝试过,但没取得多大成功。所以我差不多已经停手了,虽然觉得很有趣但没什么进展。然后在比赛还剩 4-5 天的时候,我在另一个讨论帖看到 @springmanndaniel 说他的分数是基于 NN 的,我觉得值得再试一次。结果导致最后的融合和提交非常匆忙,因为在比赛最后几天才把 NN 的 CV 调整到有用的范围。

最终提交 / 分数:

提交的那一次是我拥有的最好分数(CV / 公共 LB)。没有时间/提交次数进行进一步探索。结果证明这是我提交中私人 LB 最好的一个。

2 个 NN - 非常相似,但第二个在训练中特征较少,且训练/验证损失更接近。第二个对融合 LB 分数只增加了一点点。

  • NN1 - 私人分数 0.69724 公共分数 0.69753
  • NN2 - 私人分数 0.69747 公共分数 0.69809

LGBM, XGB - 只是使用了公开参数。这些比我之前想出来的稍微好一点。我有一些额外的特征(其实不是故意的 - 复制错误),所以分数可能与其他使用相同参数的 Notebook 不匹配。我认为这些对其他人没什么用处,因为在这个比赛中有很多拥有更好树模型和分析的 Notebook。

  • LGBM - 私人分数 0.69585 公共分数 0.69694
  • XGB - 私人分数 0.69766 公共分数 0.69870

尝试将 Ridge 回归与我创建的用于 NN 的特征一起添加。它比原始特征效果好很多(降到 0.709 左右),但根据我的融合计算,我无法获得任何积极效果。

最终权重:

模型 权重
LGBM 0.374224
XGB 0.161811
Keras (1) 0.243573
Keras (2) 0.220393
融合分数 私人: 0.69500 / 公共: 0.69579

可能是因为我在折之间进行了一些分组等操作,我的 CV 估计值比 LB 低一点,但它们总体上确实保持同向移动。

NN 模型

我认为这是唯一真正有趣的部分,尽管离第一名的解决方案还有一段距离,也没那么优雅。目标只是让 CV 足够低,以便对树模型做出一些有用的贡献。

正如其他地方所指出的,特征看起来内部隐藏着一些分布。使用 Sklearn 的高斯混合模型将原始特征拆分为子分布(比 kmeans 效果好)。然后对于每个特征列,将每个子分布拆分为 2 列:一个值(原始数据)和一个标签(1/0)。

开始时,根据观察起始特征,拆分了一个看起来“合理”的数量。然而,测试时的变化一直表明更多的拆分能提高 CV。所以最终结果是大量的额外特征列 - 虽然不整洁,但似乎将数据转换成了 NN 可以获得更好结果的格式。

对输入进行了一些重新缩放,并将目标重置在零附近 - 相信这有帮助,尽管测试时间有限。网络使用 keras/tf,我开始尝试 pytorch,但结果看起来不太具有可比性,考虑到时间限制,我就放弃了。

早期使用 Optuna 获得了大约 5-6 层的结构,带有一些 dropout 和密集正则化,没有时间在尝试不同特征输入的同时更新 Optuna 运行,但我认为参数可能还不错,因为在最终运行中更改少量设置并没有显示出太大改进。减小批量大小似乎使其学习更稳定,但最终结果看起来没什么不同。

由于验证损失在最后几个 epoch 会有波动,保存了最后 5 个 epoch 的权重,

同比赛其他方案