在luna16肺结节良恶性分类得例子中,有位细心的朋友提出一个很好的问题。今天首先分析上一篇中存在的问题,然后给出解决方案。

1、存在的问题

上一篇的数据处理:1351例肺结节数据扩充后有55391例,549714非肺结节数据随机采样后有110000个,将两类数据合在一起并随机打乱,选择80%的数据(11万多)用来训练分类网络,20%的数据(3万)用来测试分类网络性能。这里存在的问题是一个肺结节在扩充后,不仅会在训练集里有一部分,在测试集中也会有一部分。在测试集上评价训练好的模型性能是虚高的。

2、解决方案

首先将1351例肺结节数据分成训练数据(80%)和测试数据(20%),然后对肺结节训练数据和测试数据都进行数据扩充(肺结节训练数据有44346例,肺结节测试数据有11086例),对549714例非肺结节数据随机采样得到11万例后,再对其分成非肺结节训练数据(80%)和测试数据(20%)(非肺结节训练数据有8.8万例,非肺结节测试数据有2.2万例),最后将两类的训练数据和测试数据分别合并。

3、模型结果分析

模型结果与上一篇是相似的,这里就不给出训练的结果了。直接在测试数据上进行分析。采用ROC曲线和混淆矩阵来直观分析分类模型性能,ROC曲线下面积是0.99769。

  • ROC曲线

Luna16——肺结节检测和良恶性分类挑战赛(四)_解决方案

  • 混淆矩阵


Luna16——肺结节检测和良恶性分类挑战赛(四)_测试数据_02

  • 评价指标

Luna16——肺结节检测和良恶性分类挑战赛(四)_数据_03

为了大家更好的学习,我把整个项目代码分享到github上:

​https://github.com/junqiangchen/LUNA16-Lung-Nodule-Analysis-2016-Challenge​

如果大家觉得这个项目还不错,希望大家给个StarFork,可以让更多的人学习。如果碰到任何问题,随时留言,我会尽量去回答的。