返回列表

5th place solution

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

开始: 2020-07-07 结束: 2020-10-06 医学影像分析 数据算法赛
第5名解决方案

第5名解决方案

作者: Lars Ran | 排名: 第5名

首先,恭喜获奖者,并感谢 Kaggle 和主办方举办这次比赛。特别感谢 @LukeReijnen 成为一位出色的队友。我还要感谢社区分享了他们的想法,包括哪些方法有效、哪些无效,并强化了“相信你的交叉验证(CV)”这一理念。

模型:

接下来谈谈模型。我们使用了一个仅包含表格数据的小型网络。它包含以下输入特征:[WeekInit, WeekTarget, WeekDiff, FVC, Percent, Age, Sex, CurrentlySmokes, Ex-smoker, Never Smoked]。这些特征随后通过两个全连接隐藏层,每层有 32 个节点,使用 Swish 激活函数。输出层包含一个用于 FVC 预测的节点和一个直接预测 Sigma 的节点。为了使网络预测值落在 0 到 1 之间,输出结果分别乘以了 5000 和 500。

损失函数:

我们最初使用了比赛的评价指标。然而,由于我们希望更加强调 MAE(平均绝对误差),我们使用了以下损失函数:
$$\frac{\sqrt2 \Delta}{70} + \frac{\sqrt2 \Delta}{\sigma_{clipped}} + \ln(\sqrt2 \sigma_{clipped})$$

验证:

在验证技术方面,我们使用了分组 K 折交叉验证。我们将患者分为大小大致相等的 5 折。作为训练集和验证集,我们使用了每位患者 WeekTarget > WeekInit 的所有数据组合。换句话说,给定患者的某次测量数据,我们训练模型预测该患者所有未来的测量值。

数据增强:

在训练集上,我们向输入添加了高斯噪声。对于 FVC,我们使用了相当大的标准差(500 mL)。然而,由于我们在目标 FVC(即要预测的 FVC)上添加了相同的噪声,结果证明效果非常好。为了相应地改变 Percent 特征,我们在 Percent 的噪声之上添加了 Percent*FVC_noise/FVC。最后,我们将输入归一化至大致位于 0 到 1 之间。

在预测方面,我们使用了各折 FVC 预测值的平均值。对于 Sigma,我们使用了各折预测 Sigma 的二次均值。

这是一次有趣的比赛,我学到了很多。我们尝试了许多最终没有奏效的技术,但实现它们的过程本身就很有趣。查看公共排行榜的分数很诱人,但我们经常提醒自己要相信我们的 CV。与公共 LB 相比,排名跃升了约 1500 名,这似乎证明了我们的策略是正确的。我们对结果非常满意,也很享受这次比赛。

同比赛其他方案