创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
在线av 中文字幕 xgboost生计分析和加快失效模子 - 小马拉大车

在线av 中文字幕 xgboost生计分析和加快失效模子

小马拉大车
你的位置:小马拉大车 > 四房色播 > 在线av 中文字幕 xgboost生计分析和加快失效模子
在线av 中文字幕 xgboost生计分析和加快失效模子
发布日期:2024-08-24 08:53    点击次数:169

在线av 中文字幕 xgboost生计分析和加快失效模子

💡专注R说念话在🩺生物医学中的使用在线av 中文字幕

设为“星标”,精彩可以过

对于擢升算法咱们如故先容过了GBM模子、Xgboost、lightGBM(Catboost暂不可用)3种,这几种举止齐是扶助生计分析的,咱们之前的推文齐是以分类梗概追念为例进行先容的。现在对于这几种算法进行生计分析的官方文档也很少(齐是基于Python的…)。

是以咱们今天先容下如安在R说念话中使用xgboost完满生计分析和加快失效模子。

加载R包和数据
library(xgboost)library(survival)

用1暗示逝世,0暗示删失:

lung$status <- ifelse(lung$status == 2,1,0)lung <- na.omit(lung) # 去掉NA

浅易的远隔下数据,按照7:3远隔检修集和测试集:

set.seed(123)ind <- sample(1:nrow(lung),nrow(lung)*0.7)train_df <- lung[ind,]test_df <- lung[- ind, ]dim(train_df)## [1] 116  10dim(test_df)## [1] 51 10
生计分析

底下等于成就下xgboost的参数,安宁生计分析objective = "survival:cox",以及eval_metric = "cox-nloglik"。

数据时势要成就为xgboost的专用时势,生计分析要安宁因变量的成就。凯旋用Surv是不行的,xgboost中会把生计期间为负值确算作念是删失,是以咱们成就y时要如下成就:

# 遴荐参数的值param <- list(objective = "survival:cox",              booster = "gbtree",              eval_metric = "cox-nloglik",              eta = 0.03,              max_depth = 3,              subsample = 1,              colsample_bytree = 1,              gamma = 0.5)# 准备权衡变量和成果变量x <- as.matrix(train_df[, c("age","sex","ph.ecog","ph.karno","pat.karno")])# 成就y,把删失的改成负值y <- ifelse(train_df$status == 1, train_df$time, -train_df$time)# 放进专用的时势中train.mat <- xgb.DMatrix(data = x, label = y)train.mat## xgb.DMatrix  dim: 116 x 5  info: label  colnames: yes

然后就可以进行生计分析了:

set.seed(1)xgb.fit <- xgb.train(params = param,                      data = train.mat,                      nrounds = 1000,                     watchlist = list(val2 = train.mat),                     early_stopping_rounds = 50)## [1]  val2-cox-nloglik:3.869080 ## Will train until val2_cox_nloglik hasn't improved in 50 rounds.## ## [2]  val2-cox-nloglik:3.856530 ## [3]  val2-cox-nloglik:3.844888 ## [4]  val2-cox-nloglik:3.834070 ## 不详## [222]    val2-cox-nloglik:3.367639 ## [223]    val2-cox-nloglik:3.367639 ## [224]    val2-cox-nloglik:3.367639 ## Stopping. Best iteration:## [174]    val2-cox-nloglik:3.367639xgb.fit## ##### xgb.Booster## raw: 238.9 Kb ## call:##   xgb.train(params = param, data = train.mat, nrounds = 1000, watchlist = list(val2 = train.mat), ##     early_stopping_rounds = 50)## params (as set within xgb.train):##   objective = "survival:cox", booster = "gbtree", eval_metric = "cox-nloglik", eta = "0.03", max_depth = "3", subsample = "1", colsample_bytree = "1", gamma = "0.5", validate_parameters = "TRUE"## xgb.attributes:##   best_iteration, best_msg, best_ntreelimit, best_score, niter## callbacks:##   cb.print.evaluation(period = print_every_n)##   cb.evaluation.log()##   cb.early.stop(stopping_rounds = early_stopping_rounds, maximize = maximize, ##     verbose = verbose)## # of features: 5 ## niter: 224## best_iteration : 174 ## best_ntreelimit : 174 ## best_score : 3.367639 ## best_msg : [174] val2-cox-nloglik:3.367639 ## nfeatures : 5 ## evaluation_log:##     iter val2_cox_nloglik##        1         3.869080##        2         3.856530## ---                      ##      223         3.367639##      224         3.367639

用在测试集上,探究风险分数:

test_x <- as.matrix(test_df[, c("age","sex","ph.ecog","ph.karno","pat.karno")])risk_score <- predict(xgb.fit, newdata = test_x) # newdata如果是检修集可以取得检修集的风险分数risk_score##  [1] 0.4721478 1.8668407 3.4487274 0.5234923 0.5299142 0.2525677 0.3887208##  [8] 0.8716910 5.8021851 0.2647004 0.6711149 2.4503310 0.4688006 1.4702020## [15] 0.7774669 0.3813822 0.9095489 0.6189218 0.3667074 0.3612074 0.4357747## [22] 0.9482961 0.4830345 0.6624518 0.4522163 0.3241239 0.5598004 1.4702020## [29] 2.3615212 2.0817354 0.6228051 1.8675944 0.5460874 1.4702020 0.5198651## [36] 0.2530192 9.6702890 0.4650362 0.5829992 0.9305520 0.2432446 0.4080229## [43] 0.4403237 0.2779934 0.7739328 0.2030164 0.2839084 0.3376622 0.4515978## [50] 0.3893496 0.2779934hist(risk_score)

图片

image-20240204181610457

浅易作念个生计分析望望,笔据风险分数险阻分组,然后作念K-M生计弧线:

groups <- ifelse(risk_score>median(risk_score),"high","low")library(survminer)# 笔据rs_train_group树立生计函数f_train <- survfit(Surv(test_df$time, test_df$status) ~ groups)f_train## Call: survfit(formula = Surv(test_df$time, test_df$status) ~ groups)## ##              n events median 0.95LCL 0.95UCL## groups=high 25     20    291     223     460## groups=low  26     20    426     348     643ggsurvplot(f_train,           data = test_df,           surv.median.line = "hv",            #legend.title = "Risk Group",           #legend.labs = c("Low Risk", "High Risk"),           pval = TRUE,            ggtheme = theme_bw()           )

图片

image-20240204181624495

这个成果是没挑升旨的,关联词可以看到在中间的部分,高风险组的逝世率是主张高于低风险组的。

探究C-index,借助Hmisc包完满的:

library(Hmisc)rcorr.cens(as.numeric(risk_score),           Surv(test_df$time, test_df$status))##        C Index            Dxy           S.D.              n        missing ##      0.4178606     -0.1642789      0.1153034     51.0000000      0.0000000 ##     uncensored Relevant Pairs     Concordant      Uncertain ##     40.0000000   2094.0000000    875.0000000    450.0000000

brier score如何探究?凯旋改用mlr3吧,骄傲你对机器学习生计分析的所有幻念念→2024年了,高阶生计分析我锋利推选你用mlr3。

关联词要安宁,mlr3仅仅一个框架,它并不可处理你所有问题,许多期间你可能照旧要回到这种基础R包中来。

加快失效模子

在R说念话中通过xgboost完满加快失效模子挺复杂的,主淌若要把数据准备成它需要的时势。

其中的label(也等于因变量,生计期间)需要用一个区间暗示,具体需要的形式如下所示:

图片

rm(list = ls())library(xgboost)lung$status <- ifelse(lung$status == 2,1,0)lung <- na.omit(lung) # 去掉NA

权衡变量的准备莫得什么相配的:

X <- as.matrix(lung[, c("age","sex","ph.ecog","ph.karno","pat.karno")])dtrain <- xgb.DMatrix(X)

成果变量的准备很复杂,主淌若笔据上头的表格。如果不是删失数据,那么生计期间等于闭区间[a,a],如果是右删失等于闭区间[a,正无尽],如果是左删失等于[0,b],区间删失等于[a,b]。

五月天情色

底下我展示下未删失数据和右删失数据的成就举止,照旧用lung这个数据集。如果status是1,等于未删失数据,那么它的高下限就齐是生计期间;如果status是0,那等于右删失数据,那么它的高下限等于[生计期间,正无尽]。

# 成就未删结怨右删失数据的高下区间:y_lower_bound <- ifelse(lung$status == 1, lung$time, Inf)y_upper_bound <- ifelse(lung$status == 1, lung$time, Inf)

成就好之后使用setinfo函数把这个信息添加到dtrain这个对象中:

setinfo(dtrain, 'label_lower_bound', y_lower_bound)## [1] TRUEsetinfo(dtrain, 'label_upper_bound', y_upper_bound)## [1] TRUE

这么最难的一步就准备好了。接下来等于成就下参数,就可以检修了。

params <- list(objective='survival:aft', # 加快失效模子               eval_metric='aft-nloglik', # 评价想法,不要乱选               aft_loss_distribution='normal',               aft_loss_distribution_scale=1.20,               tree_method='hist',               learning_rate=0.05,               max_depth=2)watchlist <- list(train = dtrain)bst <- xgb.train(params, dtrain, nrounds=30, watchlist)## [1]  train-aft-nloglik:20.251825 ## [2]  train-aft-nloglik:19.003819 ## [3]  train-aft-nloglik:17.959822 ## [4]  train-aft-nloglik:17.048453 ## 不详## [29] train-aft-nloglik:14.974870 ## [30] train-aft-nloglik:15.246215

可以看到这么就可以了~背面的分析就又齐是重迭的了,我就不厚爱先容了。

参考贵府https://github.com/dmlc/xgboost/issues/9979https://xgboost.readthedocs.io/en/stable/tutorials/aft_survival_analysis.html

关系咱们在线av 中文字幕,顺心咱们

免费QQ换取群1:613637742免费QQ换取群2:608720452公众号音信界濒临于作家取得关系方式知乎、CSDN、简书同名账号哔哩哔哩:阿越等于我 本站仅提供存储办事,所有实践均由用户发布,如发现存害或侵权实践,请点击举报。

Powered by 小马拉大车 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024

创建或修改目录:/www/wwwroot/104.219.215.234/data 失败!
JzEngine Create File False