返回列表

1st place "mostly" unpredictable solution

403. OSIC Pulmonary Fibrosis Progression | osic-pulmonary-fibrosis-progression

开始: 2020-07-07 结束: 2020-10-06 医学影像分析 数据算法赛
第一名“主要”不可预测的解决方案

第一名“主要”不可预测的解决方案

作者:Art Kulakov
发布时间:2020-10-07

大家好!我很高兴能成为这次比赛的顶尖得分手之一,尽管我之前没抱太大期望。我的最佳解决方案很大程度上基于这个 Notebook,所以非常感谢 @khoongweihao

简介

你可能注意到,在比赛期间有很多公开的 Notebook,作者们只是调整了上面提到的 Notebook 的超参数。当我开始解决这个比赛时,我注意到 Notebook 中有一些不合逻辑的部分,出于某种原因,这些部分在公共排行榜上获得了高分。我最初的假设是,在私人排行榜上,这些 Notebook 应该会失败,结果证明这是真的。

以下是我注意到的一些事情:

  • “Percent”特征的使用:论坛上甚至有关于这个特征有用性的讨论。虽然目前还不清楚它是否真的有用,但我决定不使用它。
  • 奇怪的模型融合权重:在我看来,给 EfficientNet 模型如此大的权重是非常不合逻辑的,原因有二。首先,我们的训练集中只有大约 200 名患者。其次,模型是在初始 3D CT 扫描的随机切片上训练的,这不是一种真正可靠的技术。

验证

我尝试了不同的验证技术,但没有一个真的与排行榜相关。最后,我确定了以下验证方案:

验证方案

尽管我没有注意到与公共 LB(排行榜)有任何相关性,但我认为这种方法应该接近本次比赛评分所用的方法。在创建这个验证之后,如果我的模型在我的验证集和排行榜上都得分很低——我就放弃它。但在选择最佳提交方面,这对我来说仍然是一个黑盒。

训练、模型和最终解决方案

我尝试了很多东西(我会在下面补充更多),但具有讽刺意味的是,我最佳解决方案的主干竟然是这个 kernel :)

说到我的最终解决方案,以下是我为达到这个分数所做的工作。首先,我从头开始训练了两个模型(分位数回归 + EfficientNet b5)。对于这两个模型,我减少了 epoch 的数量。对于 Effnet,我决定训练 30 个 epoch,对于分位数回归,训练 600 个 epoch。然后,我稍微修改了分位数回归的架构,因为在验证集上我的架构效果更好。除此之外,我删除了两个模型中所有与“Percent”相关的特征,结果证明这为我在私人 LB 上带来了巨大的提升。最困难的决定是如何选择融合的权重。嗯,我只是决定给分位数回归稍微高一点的权重,因为对我来说它似乎效果更好。最后,我对主干 Notebook 做了一些改进,例如,有一部分是基于最佳对数似然得分来为 EfficientNet 模型选择分位数。这部分花了很长时间才能完成,而且对我来说,这看起来不是一个好的决定,所以我只是将分位数设置为 0.5,没有选择任何东西,这使得我的推理 Notebook 总共只需 3 分钟即可运行。

此外,我想给出一个小建议,关于我如何倾向于选择提交并验证预测的正确性,总的来说,这对我帮助很大。当我训练了新模型并收到提交文件后,我总是绘制预测值的分布图,以及预测值本身的图表。它们是这样的:

预测分布图

这些是我的模型子集的测试集“置信度”图表,有时通过查看这些图表,你可以识别出奇怪的模型行为并发现错误。总的来说,我总是非常仔细地分析预测并构建大量的图表。

什么没有奏效

正如我所说,我尝试了很多东西,但几乎总是在 LB 和 CV 上效果不佳。以下几件事:

  • 使用公开 Notebook 中的方法计算肺体积,并将其作为两个模型的特征传递。
  • 在表格数据上测试了其他模型,如 XGBoost、逻辑回归。多亏了我的 CV,我立刻发现树模型在这里不起作用,所以从这次比赛开始我就没有对树模型做任何事情。
  • 由于我在测试简单的模型,我的第二个选定的提交是一个非常简单的逻辑回归模型,顺便说一句,它进入了铜牌区。
  • CT 扫描的
同比赛其他方案