通过这次比赛,我旨在提升自己在神经网络方面的知识。在以往的比赛中,我难以让神经网络取得良好效果,常常发现它们在私有排行榜上的表现更差,即使将它们加入到GBDT的集成模型中也是如此。然而,这一次我认为它们是帮助我获得第二名的秘密武器。
我的解决方案非常简单。只是将XGBoost、LightGBM和神经网络的预测结果结合起来,并使用另一个神经网络将它们堆叠在一起。XGBoost和LightGBM的预测并无特别之处,仅仅是通过对Optuna找到的10组不同超参数进行预测后取平均得到的。
对于最初的神经网络预测,在阅读了大量论文并对其中描述的技术进行反复试验后,我发现这篇论文中描述的分段线性编码(PLE)技术显著提升了我的得分。
我对每个连续特征应用了PLE,为水肿和阶段特征设置了嵌入层,并将剩余的二元特征直接输入(转换为0/1后)。其结构大致如下:

实际的网络在每个PLE输入之后、拼接之前还包含一些额外的层,但为了保持图表简洁,我并未将其包含在内。仅使用这个神经网络,我就在私有排行榜上获得了约0.401的分数,足以进入前10%。尽管其单独表现相当稳健,但将其加入堆叠模型仅使分数提升了约0.001,但我仍然很高兴它至少对堆叠模型有所改进。
对于堆叠神经网络,我最初的设想是让网络学习输入预测的加权平均值,其结构大致如下:

通过进一步的实验,我发现网络在以下方面能够实现更好的得分:
- 为预测中每个类别的概率赋予独立的权重,而不是计算单一权重并将其应用于每个类别的概率;并且
- 使用全部3个预测结果来计算每个预测的权重,而不仅仅依赖其自身。
经过这些更改后,网络结构更像是这样:

同样,为了简洁起见,图中未包含一些额外的层。与简单平均相比,这种堆叠结构使分数提升了0.004。
总的来说,我在本次比赛中收获颇丰。第二名是一个不错的奖励,但我更感激的是在研究和尝试神经网络过程中所获得的知识。对于其他对近期表格神经网络创新感兴趣的人,我推荐查看https://sebastianraschka.com/blog/2022/deep-learning-for-tabular-data.html。有许多关于神经网络的想法我未能在此次比赛中尝试或实现,但我期待在未来的比赛中尝试这些及其他更多想法。
新年快乐!