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

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

一、 引言

乳腺癌是女性最常见的恶性肿瘤之一,也是全球范围内女性死亡率最高的癌症之一。据统计,每年全球有超过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。

四、结论

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

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

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

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

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

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

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 Shell
人工智能平台PAI操作报错合集之在分布式训练过程中遇到报错,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 资源调度 分布式计算
阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。
|
10天前
|
机器学习/深度学习 数据采集 人工智能
揭秘大型机器学习模型背后的秘密:如何在技术深度与广度之间找到完美平衡点,探索那些鲜为人知的设计、训练与部署技巧,让你的作品脱颖而出!
【8月更文挑战第21天】大型机器学习模型是人工智能的关键方向,借助不断增强的计算力和海量数据,已实现在学术与产业上的重大突破。本文深入探讨大型模型从设计到部署的全过程,涉及数据预处理、模型架构(如Transformer)、训练技巧及模型压缩技术,旨在面对挑战时提供解决方案,促进AI技术的实用化进程。
27 1
|
10天前
|
机器学习/深度学习 数据挖掘
机器学习模型的选择与评估:技术深度解析
【8月更文挑战第21天】机器学习模型的选择与评估是一个复杂而重要的过程。通过深入理解问题、选择合适的评估指标和交叉验证方法,我们可以更准确地评估模型的性能,并选择出最适合当前问题的模型。然而,机器学习领域的发展日新月异,新的模型和评估方法不断涌现。因此,我们需要保持对新技术的学习和关注,不断优化和改进我们的模型选择与评估策略。
|
12天前
|
机器学习/深度学习 分布式计算 Cloud Native
云原生架构下的高性能计算解决方案:利用分布式计算资源加速机器学习训练
【8月更文第19天】随着大数据和人工智能技术的发展,机器学习模型的训练数据量和复杂度都在迅速增长。传统的单机训练方式已经无法满足日益增长的计算需求。云原生架构为高性能计算提供了新的可能性,通过利用分布式计算资源,可以在短时间内完成大规模数据集的训练任务。本文将探讨如何在云原生环境下搭建高性能计算平台,并展示如何使用 PyTorch 和 TensorFlow 这样的流行框架进行分布式训练。
38 2
|
18天前
|
机器学习/深度学习 人工智能 关系型数据库
【机器学习】Qwen2大模型原理、训练及推理部署实战
【机器学习】Qwen2大模型原理、训练及推理部署实战
111 0
【机器学习】Qwen2大模型原理、训练及推理部署实战
|
2月前
|
机器学习/深度学习 算法 数据挖掘
从菜鸟到大师:Scikit-learn库实战教程,模型训练、评估、选择一网打尽!
【7月更文挑战第26天】在数据科学领域, Scikit-learn是初学者通往专家之路的必备工具。
36 5
|
2月前
|
机器学习/深度学习 数据可视化 开发者
视觉的力量!Python 机器学习模型评估,Matplotlib 与 Seaborn 如何助力决策更明智?
【7月更文挑战第23天】在Python机器学习中,模型评估不可或缺。Matplotlib与Seaborn作为数据可视化工具,助力洞察模型性能。Matplotlib基础灵活,构建复杂图表;Seaborn在其上层,简化绘图,提升美观。从折线图追踪损失到条形图对比准确率,两者互补,促进高效决策制定。尽管Matplotlib掌控力强,但Seaborn友好快捷,适于统计图形。结合使用,可将数据转化成深刻见解。
29 6
|
2月前
|
机器学习/深度学习 算法 数据挖掘
从零到精通:Scikit-learn在手,数据分析与机器学习模型评估不再难!
【7月更文挑战第25天】在数据科学中,模型评估是理解模型泛化能力的关键。对新手来说,众多评估指标可能令人困惑,但Scikit-learn简化了这一过程。
37 2
|
16天前
|
机器学习/深度学习 人工智能 运维
机器学习中的模型评估与选择
【8月更文挑战第15天】在机器学习领域,一个关键的挑战是如何从众多模型中选择出最佳者。本文将探讨模型评估的重要性和复杂性,介绍几种主流的模型评估指标,并讨论如何在实际应用中进行有效的模型选择。通过分析不同的评估策略和它们在实际问题中的应用,我们将揭示如何结合业务需求和技术指标来做出明智的决策。文章旨在为读者提供一个清晰的框架,以理解和实施机器学习项目中的模型评估和选择过程。
下一篇
云函数