返回列表

8th place solution

459. RSNA-MICCAI Brain Tumor Radiogenomic Classification | rsna-miccai-brain-tumor-radiogenomic-classification

开始: 2021-07-13 结束: 2021-10-15 医学影像分析 数据算法赛
第8名解决方案

第8名解决方案

作者:ArturHugo | 排名:第8名

好吧,这真是出乎意料。首先,我要感谢 Kaggle 和主办方举办这次比赛。我还要感谢所有在论坛上讨论排行榜变动的人,因为这真的帮助我理解了刚刚发生的事情。这是我第一次参加比赛,我是作为正在修读的机器学习课程作业的一部分参与的,所以我对结果感到非常困惑。

尽管如此,我在这里记录并分享我的解决方案。但在此之前,我需要说明代码很乱,而且全部都在一个笔记本中(点击这里),我只有一周的时间进行提交。此外,这项作业的想法是练习我们目前在课堂上学到的知识,所以我只是用了我们刚学过的内容(当时我们正在学习特征提取和词袋方法)。

1. 提取特征

第一步是提取训练集中所有图像的特征。我使用了 OpenCV 的 ORB 特征检测器,因为如果使用 SIFT,运行解决方案的时间会太长。我本应该只对数据进行一次预处理并序列化,以便之后作为输入使用,但当时我还在摸索 Kaggle,所以没有想到这一点。

因此,在这一步中,我遍历训练数据,一次处理一个样本。对于每个样本,我遍历每张图像(FLAIR、T1w、T1Gd、T2),提取其特征并将它们堆叠成一个 n_features 行、descriptor_size 列的特征矩阵。最后,我得到了一个包含 train_size 个行数各异的矩阵列表。

2. 创建视觉词典

一旦我有了所有样本的所有特征,我需要确定我将把什么作为词袋中的一个“词”。因此,在这一步中,我将训练集的所有特征矩阵堆叠起来,形成一个 n_features0 + n_features1 + ... + n_featuresN 行、descriptor_size 列的矩阵(all_features)。

我在 all_features 上运行聚类算法,拟合模型的聚类中心就是我的词汇表。我使用了 scikit-learn 的 MiniBatchKMeans,因为由于用于拟合模型的描述符数量巨大,我在内存方面遇到了问题。

3. 词频直方图

有了词汇表后,我只需要遍历每个样本的特征矩阵,将其转换为词频直方图。对于矩阵中的每个特征,我使用聚类模型预测其所属的聚类,并将直方图中对应位置的值增加 1/n_features。这个过程后来在测试集上重复进行,以便获得预测结果。

4. 分类器与预测

在这里,我只是使用了 scikit-learn 的 SVC,所有参数均设为默认值。我在训练集直方图上训练了模型,并在测试集直方图上进行了预测。在进行预测时,我将概率参数设置为 True。

最后的思考

通过这次比赛,我可以看出所提出的问题确实非常复杂,而且我的词袋方法相当简单,很可能不适合这项任务。在查看预测概率时,我发现一件有趣的事情,那就是没有一个测试案例的预测概率分布超过 0.6/0.4,我认为这意味着模型对其预测结果并不自信。

我知道我在私有排行榜上的分数真的很幸运,因为我做了几次迟交的提交以查看性能是否一致,它们在私有排行榜上得到了 0.58 和 0.59 的分数,而不是之前的 0.6。但似乎没有模型能在该任务中表现良好,所以我认为这些结果足以表明,为了解决手头的任务,还有很长的路要走。

同比赛其他方案