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

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

一、 引言

乳腺癌是女性最常见的恶性肿瘤之一,也是全球范围内女性死亡率最高的癌症之一。据统计,每年全球有超过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天前
|
机器学习/深度学习 人工智能 PyTorch
人工智能平台PAI产品使用合集之只进行训练(train)而不进行评估(eval)该如何配置
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 人工智能 算法
人工智能平台PAI产品使用合集之多目标模型eval比较耗时间,该如何优化
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之如何删除oss路径上特定的模型
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 人工智能 网络安全
人工智能平台PAI产品使用合集之在本地可以成功进入模型流,但在服务器上无法进入,是什么原因
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 人工智能 PyTorch
人工智能平台PAI产品使用合集之Alink是否加载预训练好的pytorch模型
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
2天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之在maxcompute上跑模型,如何在本地进行推理
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
人工智能平台PAI产品使用合集之在maxcompute上跑模型,如何在本地进行推理
|
7天前
|
机器学习/深度学习 数据可视化 Python
机器学习模型的解释性与可信度问题
【6月更文挑战第5天】在数据驱动的时代,机器学习模型的解释性和可信度至关重要。当面对类似黑匣子的复杂模型时,如何解释预测结果成为挑战。科学家通过特征重要性和模型可视化技术来提升解释性。例如,使用&quot;特征重要性&quot;评估各特征对预测的贡献,结合&quot;模型可视化&quot;展示决策过程。提供的Python代码示例展示了如何计算特征重要性并用图形化方式理解模型行为,以增强模型的信任度。
20 1
|
11天前
|
机器学习/深度学习 数据采集 Python
机器学习模型的评估与选择标准
【6月更文挑战第1天】机器学习模型的评估至关重要,包括准确率、召回率、F1值和均方误差等指标。准确率衡量预测正确比例,召回率关注找出所有相关样本的能力,F1值是两者的综合。泛化能力同样重要,防止过拟合和欠拟合。不同场景可能侧重不同指标,如医疗诊断更关注召回率。选择模型需综合考虑多个因素,以实现最佳性能。通过实践和探索,我们可以更好地理解和优化模型评估,推动机器学习进步。
36 2
|
12天前
|
机器学习/深度学习 算法
利用机器学习进行股市预测的可行性分析
【5月更文挑战第31天】本文探讨了机器学习技术在股市预测中的应用。通过对历史数据的分析和模型训练,我们可以构建出能够预测未来股市走势的模型。然而,由于股市受到多种因素的影响,包括经济、政治和社会因素等,因此预测的准确性仍然存在挑战。本文将介绍一些常见的机器学习算法和它们在股市预测中的应用,并提供一些建议来提高预测的准确性。
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
构建高效机器学习模型:从特征工程到模型优化
【5月更文挑战第31天】 在数据科学领域,构建一个高效的机器学习模型是实现精准预测和数据分析的关键步骤。本文将深入探讨如何通过有效的特征工程技术增强模型的预测能力,以及应用先进的模型调优方法来提升算法性能。我们还将讨论避免过拟合的策略和评估模型的指标,以确保模型的泛化能力和实用性。