403. OSIC Pulmonary Fibrosis Progression | osic-pulmonary-fibrosis-progression
大家好!我很高兴能成为这次比赛的顶尖得分手之一,尽管我之前没抱太大期望。我的最佳解决方案很大程度上基于这个 Notebook,所以非常感谢 @khoongweihao。
你可能注意到,在比赛期间有很多公开的 Notebook,作者们只是调整了上面提到的 Notebook 的超参数。当我开始解决这个比赛时,我注意到 Notebook 中有一些不合逻辑的部分,出于某种原因,这些部分在公共排行榜上获得了高分。我最初的假设是,在私人排行榜上,这些 Notebook 应该会失败,结果证明这是真的。
以下是我注意到的一些事情:
我尝试了不同的验证技术,但没有一个真的与排行榜相关。最后,我确定了以下验证方案:
尽管我没有注意到与公共 LB(排行榜)有任何相关性,但我认为这种方法应该接近本次比赛评分所用的方法。在创建这个验证之后,如果我的模型在我的验证集和排行榜上都得分很低——我就放弃它。但在选择最佳提交方面,这对我来说仍然是一个黑盒。
我尝试了很多东西(我会在下面补充更多),但具有讽刺意味的是,我最佳解决方案的主干竟然是这个 kernel :)
说到我的最终解决方案,以下是我为达到这个分数所做的工作。首先,我从头开始训练了两个模型(分位数回归 + EfficientNet b5)。对于这两个模型,我减少了 epoch 的数量。对于 Effnet,我决定训练 30 个 epoch,对于分位数回归,训练 600 个 epoch。然后,我稍微修改了分位数回归的架构,因为在验证集上我的架构效果更好。除此之外,我删除了两个模型中所有与“Percent”相关的特征,结果证明这为我在私人 LB 上带来了巨大的提升。最困难的决定是如何选择融合的权重。嗯,我只是决定给分位数回归稍微高一点的权重,因为对我来说它似乎效果更好。最后,我对主干 Notebook 做了一些改进,例如,有一部分是基于最佳对数似然得分来为 EfficientNet 模型选择分位数。这部分花了很长时间才能完成,而且对我来说,这看起来不是一个好的决定,所以我只是将分位数设置为 0.5,没有选择任何东西,这使得我的推理 Notebook 总共只需 3 分钟即可运行。
此外,我想给出一个小建议,关于我如何倾向于选择提交并验证预测的正确性,总的来说,这对我帮助很大。当我训练了新模型并收到提交文件后,我总是绘制预测值的分布图,以及预测值本身的图表。它们是这样的:
这些是我的模型子集的测试集“置信度”图表,有时通过查看这些图表,你可以识别出奇怪的模型行为并发现错误。总的来说,我总是非常仔细地分析预测并构建大量的图表。
正如我所说,我尝试了很多东西,但几乎总是在 LB 和 CV 上效果不佳。以下几件事: