426. Tabular Playground Series - Mar 2021 | tabular-playground-series-mar-2021
我在这里应用的几乎所有内容都来自于从1月/2月竞赛中学到的东西,所以首先要说的是,请查看那些比赛的获胜方案,以及过去3个月里关于改进单个模型的许多其他优秀Notebooks!Kaggle举办这些比赛并且这么多人分享了伟大的想法,这真的很棒。👍
我们知道1月/2月的比赛是由DAE(去噪自编码器)方法赢得的,这个月我使用了 @ryanzhang 的PyTorch代码。我想我已经分享过入门Notebook,那是我这个月的起点。
https://www.kaggle.com/davidedwards1/tabularmarch21-dae-starter
原 @ryanzhang 代码
https://github.com/ryancheunggit/Denoise-Transformer-AutoEncoder
分层K折交叉验证,10折。
对XGB和LGBM分别运行了2个Optuna周期,第一个周期是为了稍微缩小参数范围。我没有在这方面花费太多时间,因为我只想从每个模型中选出前5个Optuna模型,然后继续进行DAE。为了提供一点多样性,对于XGB,我使用了独热编码,并给Optuna提供了删除低计数列的选项(例如,不包括总和小于40的任何列)。
我也尝试了带独热列的LGBM以及删除一些低计数分类列的选项,但结果似乎比仅使用原始列和标签编码器要差,所以我认为这没增加多少价值。
总共大约有足够的时间进行27次运行 x 每次600个epoch,每次运行都通过使用每次试验结束时的输出特征运行CV来评估。所以我只能分享我有限测试的结果。我确信我错过了很多东西,我也期待从其他人愿意在赛后分享的任何内容中学习。
似乎有效的方法
最终我使用了3次DAE运行进行推理和融合,其中一次我取了几个不同epoch的权重,它们都有共同点:
学习率从3e-04开始并递减。
开始时约50%的平坦噪声。编辑:所谓平坦,我指的是所有列都一样,而不是随时间变化。
总共约1200-1800个epoch。我在最后两天将一个DAE扩展到了2400个,但这提供了非常非常小的改进。
随Epoch降低噪声水平
提交中使用的所有DAE - 每个epoch更新SwapNoiseMasker以衰减噪声水平。这是借鉴了1月获胜方案的思路
https://www.kaggle.com/c/tabular-playground-series-jan-2021/discussion/216037
即进行第二轮低噪声训练。使用了比学习率更慢的衰减,因为当噪声低于一定水平时,模型似乎停止了改进。例如,学习率衰减 = 0.998,噪声衰减 = 0.999,因此600个epoch后50%的噪声降至约27%。
全分类
一次运行 - 使用了这里Notebook中的一个想法
https://www.kaggle.com/siavrez/kerasembeddings
对连续变量进行了“分箱”,因此提供了100%的分类输入(我使用了Kmeans,但我认为结果相似,我没花时间分析)。结果比混合分类/连续变量稍差,但我认为这提供了一些多样性。如果我有更多时间,我会喜欢对此进行更多实验,因为它降低了复杂性以及需要组合的损失,我怀疑它可以被进一步改进。
似乎无效的方法
在非常有限的测试中,我无法从以下方面显示出任何改进: