使用深度学习实现乳腺癌分类,附python演练!每个男同胞的会啊!
乳腺癌为主要为女性的常见癌症。在2012年的一项研究数据显示,在当年的新癌症病例中占比为12%,而在当年的女性癌症病例中占比达25%。
当乳腺细胞发生失控性生长时
以下是报告:
- 约占美国女性(约占约12%)在其一生中将患上浸润性乳腺癌。
- 2019年,《预计》将出现约26.86万例新的侵袭性乳腺癌病例以及约6.29万例新的非侵袭性癌症病例。
- 约占85%以上的乳疾源自无家族史者;这些病例源于基因突变而非遗传突变。
- 若一名女性其直系亲属确诊乳疾,则她患病风险将显著增加;在患病群体中仅约15%左右存在确诊家族史。
挑战

设计一种用于乳腺癌检测的自动化数据分析系统,在通过对活检图像进行深度学习处理的基础上实现对患者病变风险的判定功能;鉴于此关系到每一位患者的健康与生命安全
数据
可从该网站(https://web.inf.ufpr.br/vri/databases/breast-cancer-histopathological-database-breakhis/)获取该数据集。 该数据集属于二分类任务。 将其划分为训练集与测试集如图所示
其中训练目录中的每一类都拥有1\%的图片数量,并且与之相对应地进行比较的是验证目录
以上两张图片是良性样本
以上两张图片是恶性样本
环境和工具
- scikit-learn
- keras
- numpy
- pandas
- matplotlib
图像分类
完整的图像分类流程可以形式化如下:
所给的输入是一个包含N个图像的训练数据集;每个图像都具有相应的标签。
然后,我们使用这个训练集来训练分类器,来学习每个类。
为了衡量分类器的质量表现, 我们让其对未见过的新图像集合进行标记. 然后我们将这些图像的真实标记与其预测标记进行对比分析.
代码实现
我们如何开始利用代码? 完整的GitHub项目库可以在以下链接处找到:https://github.com/abhinavsagar/Breast-cancer-classification
让我们从加载所有库和依赖项开始。
接下来,我将图像加载到相应的文件夹中。
之后,在我的工作流程中,我首先生成了一个全零值的 numpy 数组(用以标注良性样本),同时生成了一个全一值的 numpy 数组(用以标注恶性样本)。随后,在重新组织数据集的基础上,并对标签进行了分类编码处理。
随后我们将数据集划分为两部分,并将其中一部分包含80%的数据用于训练模型
本研究中采用的批量大小为16。在深度学习领域中,默认设置下的批次大小被认为是最重要的超参数之一。偏好较大的批量训练模型,在利用GPU的并行优势提升运算效率的同时可获得更好的训练效果。然而已知较大的批量可能导致泛化性能下降。在极端情况下使用全数据集批量可达到全局最优;此做法需以较慢收敛速度为代价。另一方面较小批量通常能更快达到较好的效果其直观原理在于较小规模的小批次样本能在有限信息下完成对模型参数的有效更新从而实现快速迭代优化过程;但小批量可能导致局部最优而非全局最优因此通常建议从小批次开始逐步增加至适当规模以便于平衡模型训练效率与最终预测性能之间的关系从而实现较快的整体优化过程
我对数据进行了扩展。 数据扩增是一种有效的方法来提升训练集的规模。 通过扩增训练实例,网络在学习过程中能够更好地捕捉到多样化的特征,并且仍能保持对典型数据点的代表性。
然后接着我开发了一个数据生成器系统 能够自动生成并收集相关数据 Keras为此则提供了高效的Python生成器接口
下一步是构建模型。 这可以通过以下3个步骤来描述:
我将DenseNet201用作训练前的权重设置,并已知其已在Imagenet上进行过训练。为了减小过拟合问题,在此基础上我引入了全局平均池化层并采用50% dropout技术。
通过批量归一化技术以及一个包含两个神经元的全连接层实现分类功能,并以Softmax函数作为激活函数来区分良性与恶性两种情况。
最后选择Adam优化器用于优化模型参数,并采用二元交叉熵损失函数来评估模型表现。
让我们看看每个层中的输出形状和参数。
在训练模型之前定义一个或多个回调函数显得尤为重要。这些工具非常实用:ModelCheckpoint和ReduceLROnPlateau。
- ModelCheckpoint:在一般情况下进行多次迭代且耗时较长的情况下进行训练时,在此情形下ModelCheckpoint会存储训练过程中的最佳模型。
- ReduceLROnPlateau:当某个指标不再提升时,在这种情况下ReduceLROnPlateau会触发并开始缩减学习速率。一旦出现长时间的学习停滞状态,则该回调函数会自动将当前的学习速率减少至当前值的2至10倍之间。
该模型我训练了20个epoch。
性能指标
衡量模型性能的主要标准是精度。然而,在数据集中仅占2%的一个类别(恶性)与98%的其他类别(良性)存在显著差异时,错误分类的比例变得没有意义。在测试集上的准确率达到98%,却未能有效识别出恶性病例——即预测结果将所有样本标记为良性。
精度,召回率和F1度量
为了更深入地掌握错误分类的概念, 我们通常应用这些度量指标以更清晰地分析这些指标中的TP TN FP和FN
精度反映了被分类器判定的正例中真正的正例样本的比重。
召回率指标用于衡量全体真正属于正类的样本中被分类器成功识别出为阳性结果的比例数值
F1度量是准确率和召回率的调和平均值。
F1度量越高,模型越好。 对于所有三个度量,0值表示最差,而1表示最好。
混淆矩阵
混淆矩阵是一个评估误分类效果的重要工具。\n在混淆矩阵中,每行分别对应预测所属类别中的样本数据;每列则代表真实类别中的样本数据。\n主对角线上的数值反映了正确分类的数量。\n这无疑是一个有价值的信息来源:它不仅揭示了哪些类别容易被误判;还提供了导致误分的具体原因分析。
ROC曲线
45度的线条代表一条随机直线,在这种情况下曲线下面积或AUC值为0.5;这条曲线距离这条基准线越远则其对应的AUC值越大说明模型表现越好;当模型达到完美分类时其可以获得的最大值即为AUC=1此时曲线下方会形成一个直角三角形区域;通过分析ROC曲线的变化趋势和特征点位置信息等手段进行模型优化和性能评估;举个例子来说如果某条ROC曲线上升较为陡峭则可能表明该分类器对正类样本具有较强的识别能力;相反如果某条ROC曲线主要集中在右上方区域则可能暗示该分类器对负类样本的表现较为薄弱。
结果
结论
目前这项项目仍处于初期阶段。然而值得注意到的是,在众多现实世界的问题中观察到深度学习展现出显著的效果是非常值得肯定的。
在本博客里展示了如何利用卷积神经网络结合迁移学习的方法来实现对良性和恶性乳腺癌细胞的分类任务。
