机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?

简介: 机器学习-生存分析:如何基于随机生存森林训练乳腺癌风险评估模型?

一、 引言

乳腺癌是女性最常见的恶性肿瘤之一,也是全球范围内女性死亡率最高的癌症之一。据统计,每年全球有超过200万人被诊断为乳腺癌,其中约60万人死于该疾病。因此,乳腺癌的早期诊断和风险评估对于预防和治疗乳腺癌具有非常重要的意义。

近年来,机器学习和生存分析等数据挖掘技术在乳腺癌研究中得到了广泛应用。这些方法可以挖掘患者的临床、基因、影像等多种数据,预测患者的生存期、疾病进展和治疗效果,为临床决策提供科学依据。其中,随机生存森林算法作为一种有效的生存分析方法,已经在乳腺癌研究中得到了广泛应用。

本文旨在探讨基于随机生存森林算法进行乳腺癌风险评估模型训练的方法。具体而言,我们将收集乳腺癌患者临床、基因和影像等多种数据,进行预处理后,使用随机生存森林算法训练乳腺癌风险评估模型,并分析模型性能和特征重要性。通过本研究,我们希望能够为乳腺癌早期诊断和风险评估提供一种新的方法和思路。

二、乳腺癌风险评估模型

2.1 传统风险评估方法局限性

传统的乳腺癌风险评估方法主要基于临床特征和家族史等风险因素,如Gail模型和Tyrer-Cuzick模型。然而,这些方法存在一些局限性。首先,它们仅考虑了有限的风险因素,忽略了其他潜在的重要因素,如基因表达和影像学特征等。其次,传统方法通常采用线性回归模型,无法捕捉非线性关系和交互作用。最后,由于传统方法对数据的假设较强,对异常值和缺失值较为敏感。

2.2 随机生存森林算法简介

随机生存森林算法是一种基于决策树的机器学习方法,可以用于生存分析和风险评估。与传统方法相比,随机生存森林算法具有以下优势:

  • 首先,它可以处理多种数据类型,包括连续型、离散型和分类型数据,以及高维数据。
  • 其次,该算法能够自动选择特征,并且能够处理非线性关系和交互作用。
  • 此外,随机生存森林算法对异常值和缺失值具有较好的鲁棒性。

2.3 为何选择随机生存森林

本文选择随机生存森林作为乳腺癌风险评估模型的训练算法,原因如下:首先,随机生存森林算法可以处理多种数据类型,包括临床、基因和影像等多种数据,使得模型能够充分利用多源数据的信息。其次,该算法能够自动选择特征,从而减少了人工特征工程的复杂性。最后,随机生存森林算法能够捕捉非线性关系和交互作用,提高了乳腺癌风险评估模型的预测性能。

通过选择随机生存森林算法作为乳腺癌风险评估模型的训练算法,我们希望能够克服传统方法的局限性,并提高乳腺癌风险评估的准确性和可靠性。

三、实例展示

  • 「数据集准备」
library(survival)
head(gbsg)

结果展示:

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
  • 「示例数据集介绍」
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ...
age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「划分训练集和测试集」
# 划分训练集和测试集
set.seed(123)
data <- gbsg[,c(-1)]
train_indices <- sample(x = 1:nrow(data), size = 0.8 * nrow(data), replace = FALSE)
test_indices <- sample(setdiff(1:nrow(data), train_indices), size = 0.2 * nrow(data), replace = FALSE)
train_data <- data[train_indices, ]
test_data <- data[test_indices, ]
  • 「构建随机生存森林模型」
library(randomForestSRC)
rfsrc_fit <- rfsrc(Surv(rfstime,status)~., 
                   ntree = 100,         
                   nsplit = 5,           
                   importance = TRUE,  
                   tree.err=TRUE,      
                   data=train_data)
rfsrc_fit

结果展示:

> rfsrc_fit
                         Sample size: 548
                    Number of deaths: 241
                     Number of trees: 100
           Forest terminal node size: 15
       Average no. of terminal nodes: 24.85
No. of variables tried at each split: 3
              Total no. of variables: 8
       Resampling used to grow trees: swor
    Resample size used to grow trees: 346
                            Analysis: RSF
                              Family: surv
                      Splitting rule: logrank *random*
       Number of random split points: 5
                          (OOB) CRPS: 0.15674136
   (OOB) Requested performance error: 0.29986439
  • 「模型结果可视化(变量重要性和误差)」
plot(rfsrc_fit)

  • 「绘制树结构」
plot(get.tree(rfsrc_fit,3))

  • 「绘制生存曲线」
plot.survival(rfsrc_fit,subset=1:6)

#  绘制前6个特征的生存曲线
matplot(rfsrc_fit$time.interest,
        100*t(rfsrc_fit$survival.oob[1:6,]),
        xlab = "time",
        ylab = "Survival",
        type="l",lty=1,
        lwd=2)

  • 「计算Brier score并绘图」
# 1. 采用km法计算Brier score
bs_km <- get.brier.survival(rfsrc_fit, 
                            cens.model = "km")$brier.score
head(bs_km)
# 2. 采用rfsrc法计算Brier score
bs_rsf <- get.brier.survival(rfsrc_fit, 
                             cens.model = "rfsrc")$brier.score
head(bs_rsf)

结果展示:

# km
> head(bs_km)
  time brier.score
1   72 0.001880723
2   98 0.003769397
3  120 0.007472802
4  160 0.008729987
5  171 0.012496130
6  173 0.014353439
# rfsrc
> head(bs_rsf)
  time brier.score
1   72 0.001880938
2   98 0.003772356
3  120 0.007461321
4  160 0.008692986
5  171 0.012499945
6  173 0.014383175

绘制图形并比较:

plot(bs_km,type="s",col=2,lwd=3)
lines(bs_rsf,type = "s",col=4,lwd=3)
legend("bottomright",
       legend = c("cens.model"="km",
                  "cens.moedl"="rfs"),
       fill = c(2,4))

  • 「变量重要性」
importance <- subsample(rfsrc_fit)
plot(importance)

  • 「绘制部分依赖图(PDP)」
# 1. 连续变量:age对事件发生率的影响
partial_obj <- partial(rfsrc_fit,
                       partial.xvar = "age",
                       partial.type = "mort",
                       partial.values = rfsrc_fit$xvar$age,
                       partial.time = rfsrc_fit$time.interest)
pdta <- get.partial.plot.data(partial_obj)
plot(lowess(pdta$x, pdta$yhat, f = 1/3),
     type = "l", xlab = "age", ylab = "adjusted mortality")

# 2. 分类变量:grade对事件发生率的影响
grade <- quantile(rfsrc_fit$xvar$grade)
partial.obj <- partial(rfsrc_fit,
partial.type = "surv",
partial.xvar = "grade",
partial.values = grade,
partial.time = rfsrc_fit$time.interest)
pdta <- get.partial.plot.data(partial.obj)
     
## plot partial effect of gradefsky on survival
matplot(pdta$partial.time, t(pdta$yhat), type = "l", lty = 1,
        xlab = "time", ylab = "gradefsky adjusted survival")
legend("topright", 
        legend = paste0("grade = ", unique(grade)), fill = 1:3)

  • 「优化节点参数」
tune.nodesize(Surv(rfstime,status) ~ ., data)

结果展示:

> tune.nodesize(Surv(rfstime,status) ~ ., data)
nodesize =  1    error = 33.31% 
nodesize =  2    error = 32.82% 
nodesize =  3    error = 32.01% 
nodesize =  4    error = 33.09% 
nodesize =  5    error = 33.88% 
nodesize =  6    error = 33.13% 
nodesize =  7    error = 33.12% 
nodesize =  8    error = 32.78% 
nodesize =  9    error = 32.79% 
nodesize =  10    error = 31.9% 
nodesize =  15    error = 33.69% 
nodesize =  20    error = 33.31% 
nodesize =  25    error = 33.49% 
nodesize =  30    error = 34.14% 
nodesize =  35    error = 34.17% 
nodesize =  40    error = 33.66% 
nodesize =  45    error = 33.94% 
nodesize =  50    error = 33.13% 
nodesize =  55    error = 34.57% 
nodesize =  60    error = 34.56% 
nodesize =  65    error = 35.26% 
nodesize =  70    error = 35.12% 
nodesize =  75    error = 33.26% 
nodesize =  80    error = 49.99% 
nodesize =  85    error = 49.99% 
nodesize =  90    error = 49.99% 
optimal nodesize: 10 
$nsize.opt
[1] 10
$err
   nodesize       err
1         1 0.3330546
2         2 0.3282237
3         3 0.3201412
4         4 0.3309179
5         5 0.3388146
6         6 0.3312895
7         7 0.3311966
8         8 0.3277592
9         9 0.3279450
10       10 0.3190264
11       15 0.3368636
12       20 0.3330546
13       25 0.3349127
14       30 0.3414158
15       35 0.3416945
16       40 0.3365849
17       45 0.3393720
18       50 0.3313359
19       55 0.3456893
20       60 0.3455964
21       65 0.3526106
22       70 0.3512170
23       75 0.3325901
24       80 0.4999071
25       85 0.4999071
26       90 0.4999071

优化后的最佳节点数为10。

四、结论

本文的研究目的是开发一个乳腺癌风险评估模型,以提高对乳腺癌患者的早期诊断和预测能力。为了实现这一目标,我们介绍了传统风险评估方法的局限性,并引入了随机生存森林算法作为乳腺癌风险评估模型的训练算法。

乳腺癌是女性最常见的恶性肿瘤之一,早期诊断和预测对于患者的治疗和生存率至关重要。本文提出的乳腺癌风险评估模型具有潜在的价值和应用前景。

首先,该模型可以为医生和患者提供更准确的乳腺癌风险评估结果,帮助医生制定个性化的预防和治疗方案。其次,该模型可以帮助筛查高风险人群,并提供早期诊断的指导,从而提高乳腺癌的生存率。此外,该模型还可以用于辅助临床决策、优化资源分配和指导公共卫生政策。

然而,需要注意的是,乳腺癌风险评估模型仍处于研究阶段,还需要进一步的验证和改进。同时,随着技术的不断进步和数据的积累,乳腺癌风险评估模型的性能和应用前景也将进一步提升。

总之,本文的研究为乳腺癌风险评估提供了一种新的方法,并展示了随机生存森林算法在乳腺癌风险评估中的潜力。这一研究对于乳腺癌的早期诊断和预测具有重要的临床意义和实际应用价值。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

目录
相关文章
|
6月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1069 109
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
401 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
10月前
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
8月前
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
538 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
7月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
8月前
|
机器学习/深度学习 人工智能 算法
Post-Training on PAI (4):模型微调SFT、DPO、GRPO
阿里云人工智能平台 PAI 提供了完整的模型微调产品能力,支持 监督微调(SFT)、偏好对齐(DPO)、强化学习微调(GRPO) 等业界常用模型微调训练方式。根据客户需求及代码能力层级,分别提供了 PAI-Model Gallery 一键微调、PAI-DSW Notebook 编程微调、PAI-DLC 容器化任务微调的全套产品功能。
|
7月前
|
机器学习/深度学习 自然语言处理 算法
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对抗训练与鲁棒性提升(205)
本文探讨Java大数据与机器学习在自然语言处理中的对抗训练与鲁棒性提升,分析对抗攻击原理,结合Java技术构建对抗样本、优化训练策略,并通过智能客服等案例展示实际应用效果。
|
9月前
|
存储 人工智能 运维
企业级MLOps落地:基于PAI-Studio构建自动化模型迭代流水线
本文深入解析MLOps落地的核心挑战与解决方案,涵盖技术断层分析、PAI-Studio平台选型、自动化流水线设计及实战构建,全面提升模型迭代效率与稳定性。
361 6
|
9月前
|
存储 机器学习/深度学习 自然语言处理
避坑指南:PAI-DLC分布式训练BERT模型的3大性能优化策略
本文基于电商搜索场景下的BERT-Large模型训练优化实践,针对数据供给、通信效率与计算资源利用率三大瓶颈,提出异步IO流水线、梯度压缩+拓扑感知、算子融合+混合精度等策略。实测在128卡V100集群上训练速度提升3.2倍,GPU利用率提升至89.3%,训练成本降低70%。适用于大规模分布式深度学习任务的性能调优。
430 3

热门文章

最新文章