一、引言
乳腺癌是女性最常见的恶性肿瘤之一,及早准确地进行诊断对于治疗和预后至关重要。然而,传统的乳腺癌诊断面临许多挑战,例如主观性和人力资源的限制,导致结果的不确定性和不一致性。
在这个背景下,自动化学习作为一种强大的技术,正在引起乳腺癌诊断领域的广泛关注。自动化学习利用算法和模型,通过分析大规模的乳腺癌数据集,从中发现潜在的模式和规律。相较于传统的人工判断,自动化学习可以提供更准确、一致和可靠的诊断结果。
本文将探讨自动化学习在乳腺癌诊断中的应用潜力。通过分析大规模的乳腺癌数据集,自动化学习可以提供准确、一致和可靠的诊断结果,为早期筛查、风险评估和治疗方案建议提供支持。然而,仍需解决数据隐私保护和模型解释性等挑战,以推动自动化学习技术在乳腺癌领域的实际应用。
二、自动化学习简介
自动化学习是一种利用计算机系统和算法来从数据中提取模式和知识的方法。它基于机器学习和统计学的原理,通过训练算法来自动发现数据中的规律,从而实现预测、分类和决策等任务。
- 「自动化学习的概念和原理:」
- 自动化学习的目标是从数据中学习确定模式和关系,以便可以在未来的数据中做出准确的预测和决策。
- 自动化学习依赖于算法和模型来从数据中提取模式和规律,这些模式和规律可以用于预测、分类和聚类等任务。
- 「相关的算法和技术:」
- 机器学习:机器学习是自动化学习的一个重要分支,旨在通过训练模型来自动化地完成特定任务。常用的机器学习算法包括决策树、支持向量机、朴素贝叶斯和随机森林等。
- 深度学习:深度学习是机器学习的一种特殊形式,其基于神经网络模型来模拟人脑的学习过程。深度学习在乳腺癌诊断中被广泛应用,如卷积神经网络 (Convolutional Neural Networks, CNN) 用于乳房影像分析。
自动化学习的关键步骤包括数据收集和准备、特征工程、模型选择和训练、模型评估和优化。通过精心选择合适的算法和技术,结合有效的数据处理和模型优化策略,自动化学习可以在乳腺癌诊断中提供准确和可靠的结果。
三、成功应用案例
自动化学习在乳腺癌诊断中已经取得了令人鼓舞的成果,下面介绍一些真实案例和数据:
- 「Case Study: 使用深度学习算法的乳腺癌早期检测」
研究团队在影像数据集中运用卷积神经网络(CNN)进行乳腺癌早期检测。他们对数千份乳腺体积和导管造影图像进行训练,结果显示,深度学习算法能够在乳腺癌病变的早期阶段实现高准确率的检测[1]。
- 「数据驱动的个体化预测模型」
在一项研究中,研究人员将机器学习算法应用于大规模的乳腺癌患者数据,包括临床记录、基因组信息和影像学特征等。通过分析这些数据,他们发展出了个体化的预测模型,能够预测患者的乳腺癌风险以及最佳治疗方案[2]。
- 「基于自动化学习的病理图像分析」
利用机器学习算法对乳腺癌组织的病理图像进行分析,可以辅助病理学家快速而准确地识别肿瘤以及分析其临床特征。研究结果表明,自动化学习可以提高乳腺癌组织的准确检测率,并帮助医生制定更精准的治疗方案[3]。
四、实例展示
- 「1. 安装和加载依赖包」
install.packages("h2o") library(h2o)
- 「2. 初始化h2o集群」
h2o.init() # 初始化
- 「3. 导入数据」
library(survival) head(gbsg) # 分类变量转变为因子 gbsg <- as.h2o(gbsg) gbsg$meno <- h2o.asfactor(gbsg$meno) gbsg$grade <- h2o.asfactor(gbsg$grade) gbsg$hormon <- h2o.asfactor(gbsg$hormon) gbsg$status <- h2o.asfactor(gbsg$status)
结果展示:
pid age meno size grade nodes pgr er hormon rfstime status 1 132 49 0 18 2 2 0 0 0 1838 0 2 1575 55 1 20 3 16 0 0 0 403 1 3 1140 56 1 40 3 3 0 0 0 1603 0 4 769 45 0 25 3 1 0 4 0 177 0 5 130 65 1 30 2 5 0 36 1 1855 0 6 1642 48 0 52 2 11 0 0 0 842 1
- 「4. 构建自动化模型」
am <- h2o.automl(y="status", training_frame =gbsg, max_models = 10)
- 「5. 列出模型列表」
b <- h2o.get_leaderboard(am) # 默认为排名前6的模型 b
结果展示:
model_id auc logloss aucpr mean_per_class_error rmse mse 1 StackedEnsemble_AllModels_1_AutoML_1_20230719_220557 0.8571811 0.4654237 0.8348330 0.2102357 0.3897241 0.1518849 2 GBM_2_AutoML_1_20230719_220557 0.8549083 0.4688617 0.8279876 0.2179098 0.3908743 0.1527827 3 StackedEnsemble_BestOfFamily_1_AutoML_1_20230719_220557 0.8548305 0.4664562 0.8332141 0.1998220 0.3892316 0.1515013 4 GBM_3_AutoML_1_20230719_220557 0.8536422 0.4691444 0.8359334 0.2474657 0.3929465 0.1544070 5 GBM_5_AutoML_1_20230719_220557 0.8523372 0.4720425 0.8319648 0.2475392 0.3929236 0.1543889 6 GBM_4_AutoML_1_20230719_220557 0.8511965 0.4748731 0.8256316 0.2259599 0.3935369 0.1548713
- 「6. 选取最优模型」
best <- h2o.get_best_model(am)
- 「7. 模型表现」
perf <- h2o.performance(best) perf
结果展示:
H2OBinomialMetrics: stackedensemble ** Reported on training data. ** MSE: 0.05269312 RMSE: 0.2295498 LogLoss: 0.2185534 Mean Per-Class Error: 0.03838376 AUC: 0.9953203 AUCPR: 0.993937 Gini: 0.9906406 Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold: 0 1 Error Rate 0 378 9 0.023256 =9/387 1 16 283 0.053512 =16/299 Totals 394 292 0.036443 =25/686 Maximum Metrics: Maximum metrics at their respective thresholds metric threshold value idx 1 max f1 0.513394 0.957699 189 2 max f2 0.382748 0.976409 221 3 max f0point5 0.542116 0.969782 180 4 max accuracy 0.513394 0.963557 189 5 max precision 0.991889 1.000000 0 6 max recall 0.322438 1.000000 232 7 max specificity 0.991889 1.000000 0 8 max absolute_mcc 0.513394 0.925897 189 9 max min_per_class_accuracy 0.479278 0.958656 198 10 max mean_per_class_accuracy 0.464133 0.962986 201 11 max tns 0.991889 387.000000 0 12 max fns 0.991889 298.000000 0 13 max fps 0.010860 387.000000 399 14 max tps 0.322438 299.000000 232 15 max tnr 0.991889 1.000000 0 16 max fnr 0.991889 0.996656 0 17 max fpr 0.010860 1.000000 399 18 max tpr 0.322438 1.000000 232 Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)
结果解析:
MSE(均方误差): 0.05269312 RMSE(均方根误差): 0.2295498 LogLoss(对数损失): 0.2185534 平均分类错误率(Mean Per-Class Error): 0.03838376 AUC(曲线下面积): 0.9953203 AUCPR(PR 曲线下面积): 0.993937 Gini系数: 0.9906406 混淆矩阵 (垂直方向表示实际值,水平方向表示预测值) 在 F1 优化阈值下的结果: 0 1 错误率 0 378 9 0.023256 =9/387 1 16 283 0.053512 =16/299 总计 394 292 0.036443 =25/686 最大指标(Maximum Metrics): 在它们各自的阈值下的最大指标 指标 阈值 值 索引 1 最大F1 0.513394 0.957699 189 2 最大F2 0.382748 0.976409 221 3 最大F0.5 0.542116 0.969782 180 4 最大准确率 0.513394 0.963557 189 5 最大精确率 0.991889 1.000000 0 6 最大召回率 0.322438 1.000000 232 7 最大特异度 0.991889 1.000000 0 8 最大绝对MCC 0.513394 0.925897 189 9 最大类别平衡精度 0.479278 0.958656 198 10 最大平均分类精度 0.464133 0.962986 201 11 最大TNS 0.991889 387.000000 0 12 最大FNS 0.991889 298.000000 0 13 最大FPS 0.010860 387.000000 399 14 最大TPS 0.322438 299.000000 232 15 最大TNR 0.991889 1.000000 0 16 最大FNR 0.991889 0.996656 0 17 最大FPR 0.010860 1.000000 399 18 最大TPR 0.322438 1.000000 232 Gains/Lift 表格: 可使用 h2o.gainsLift(<model>, <data>) 或 h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>) 提取。
这些结果给出了模型在训练数据上的性能评估指标(如均方误差、准确率、召回率等),以及混淆矩阵和最大指标的具体数值。此外,还提到了可以使用 h2o.gainsLift 函数提取 Gains/Lift 表格。
- 「8. 获取Gains Lift表格」
table <- h2o.gainsLift(best) table
结果展示:
Gains/Lift Table: Avg response rate: 43.59 %, avg score: 44.03 % group cumulative_data_fraction lower_threshold lift cumulative_lift response_rate score cumulative_response_rate cumulative_score capture_rate cumulative_capture_rate 1 1 0.01020408 0.981716 2.294314 2.294314 1.000000 0.985349 1.000000 0.985349 0.023411 0.023411 2 2 0.02040816 0.976164 2.294314 2.294314 1.000000 0.979686 1.000000 0.982517 0.023411 0.046823 3 3 0.03061224 0.964302 2.294314 2.294314 1.000000 0.971745 1.000000 0.978927 0.023411 0.070234 4 4 0.04081633 0.956723 2.294314 2.294314 1.000000 0.960631 1.000000 0.974353 0.023411 0.093645 5 5 0.05102041 0.952824 2.294314 2.294314 1.000000 0.954598 1.000000 0.970402 0.023411 0.117057 6 6 0.10058309 0.917686 2.294314 2.294314 1.000000 0.934980 1.000000 0.952948 0.113712 0.230769 7 7 0.15014577 0.890679 2.294314 2.294314 1.000000 0.904697 1.000000 0.937020 0.113712 0.344482 8 8 0.20116618 0.859007 2.294314 2.294314 1.000000 0.874901 1.000000 0.921265 0.117057 0.461538 9 9 0.30029155 0.740857 2.294314 2.294314 1.000000 0.804555 1.000000 0.882739 0.227425 0.688963 10 10 0.40087464 0.554473 2.128060 2.252600 0.927536 0.658754 0.981818 0.826539 0.214047 0.903010 11 11 0.50000000 0.313877 0.978458 2.000000 0.426471 0.451005 0.871720 0.752089 0.096990 1.000000 12 12 0.60058309 0.206262 0.000000 1.665049 0.000000 0.256555 0.725728 0.669099 0.000000 1.000000 13 13 0.69970845 0.132687 0.000000 1.429167 0.000000 0.160209 0.622917 0.597007 0.000000 1.000000 14 14 0.80029155 0.093314 0.000000 1.249545 0.000000 0.111045 0.544627 0.535929 0.000000 1.000000 15 15 0.89941691 0.058876 0.000000 1.111831 0.000000 0.075109 0.484603 0.485142 0.000000 1.000000 16 16 1.00000000 0.010860 0.000000 1.000000 0.000000 0.039248 0.435860 0.440293 0.000000 1.000000 gain cumulative_gain kolmogorov_smirnov 1 129.431438 129.431438 0.023411 2 129.431438 129.431438 0.046823 3 129.431438 129.431438 0.070234 4 129.431438 129.431438 0.093645 5 129.431438 129.431438 0.117057 6 129.431438 129.431438 0.230769 7 129.431438 129.431438 0.344482 8 129.431438 129.431438 0.461538 9 129.431438 129.431438 0.688963 10 112.805972 125.259957 0.890090 11 -2.154240 100.000000 0.886305 12 -100.000000 66.504854 0.708010 13 -100.000000 42.916667 0.532300 14 -100.000000 24.954463 0.354005 15 -100.000000 11.183144 0.178295 16 -100.000000 0.000000 0.000000
根据此表格,我们可以得出以下结论:
- 高阈值分组的响应率和分数相对较高:从第1行到第5行,累计数据比例逐渐增加时,响应率和分数保持在1.0附近。这意味着当我们设置较高的阈值时,模型能够准确地预测出正例,并且得分较高。
- 在第6行之后,响应率和分数开始下降:随着累计数据比例继续增加,第6行及以后的分组中,响应率和分数开始下降。这可能表明模型在这些分组中的预测效果变差,无法准确地预测出正例。
- 综合收益较高的分组:从第1行到第8行,累计收益保持在高水平,并且逐渐增长。这些分组代表了模型的最佳预测效果,可以有效地捕获目标对象。
- 科尔莫戈洛夫-斯米尔诺夫统计量较小:在整个表格中,科尔莫戈洛夫-斯米尔诺夫统计量较小,说明模型的预测结果与实际观测结果之间的分布差异较小。
- 「9. 绘制ROC曲线」
h2o.auc(perf) ## [1] 0.9953203 # 绘制ROC曲线 plot(perf, col = "blue", main = "ROC Curve", xlab = "False Positive Rate", ylab = "True Positive Rate", print.thres = TRUE, print.auc = TRUE, legacy.axes = TRUE)
- 「10. 基于排列的变量重要性」
h2o.permutation_importance_plot(best,gbsg)
- 「11. 模型解释」
- 部分依赖图(PDP)
h2o.pd_plot(best,gbsg,"size")
2. 多模型依赖图
# 多模型的PDP图 h2o.pd_multi_plot(am@leaderboard,df, "size")
3. 个体条件期望图(ICE)
h2o.ice_plot(best, gbsg, show_pdp = TRUE, "size")
- 学习曲线
h2o.learning_curve_plot(best)
五、总结
这次做的是分类诊断模型,如果想了解如何使用自动化学习做个体化预测模型或者自动化病理图像分析、如何解释和优化等,请关注和私信我。原创不易,请帮忙点点赞和再看,谢谢!您的反馈是我继续努力的最大动力!
参考文献:
[1] Shen D, et al. (2016) “Deep Learning in Medical Image Analysis.” Annual Review of Biomedical Engineering. 18: 387-417.
[2] Tizhoosh HR, et al. (2018) “Data-driven breast cancer prognostics via machine learning: Current knowledge and future directions.” Frontiers in Oncology. 8: 1-23.
[3] Veta M, et al. (2019) “Assessment of algorithms for mitosis detection in breast cancer histopathology images.” Medical Image Analysis. 44: 1-13.
*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」