liupei101 / Tutorial-Machine-Learning-Based-Survival-Analysis

This repository is a tutorial about survival analysis based on advanced machine learning methods including Random Forest, Gradient Boosting Tree and XGBoost. All of them are implemented in R.
29 stars 13 forks source link

怎么确定xgboost(survival) model predict的结果是什么呢? #1

Open junmeiW opened 5 years ago

junmeiW commented 5 years ago

您好,在这里看到你写的关于xgboost做的survival analysis代码,正在学习,感觉很受启发,只是想问下训练的xgb model predict的结果(我看R xgboost package结果应该是 linear predictor)不明白为什么就是 f(x)(hazard ratio)? 这个是在哪里有说明呢?请您指教!!!

liupei101 commented 5 years ago

XGBoost做生存预测,是基于Cox比例风险模型,所以建模的对象是log hazard ratio。但是,XGBoost库对预测结果作了一下exp转换,得到的就是hazard ratio,可以参考XGBoost关于survival这一块的源代码!

PS:一个经验,观察预测结果,如果全部是正数(exp转换了),一般模型的预测结果就是hazard ratio scale,否则就是log hazard ratio scale了!

junmeiW commented 5 years ago

非常感谢您的回复。能否提供下xgboost _关于survival实现的源代码链接呢,找了好久还没找到[\抱拳]感谢!!

junmeiW commented 5 years ago
1. 我看您在xgb_survival里面写:
h(t|x) = h0(t)*exp(f(x)) , 
且还定义有 - t时刻的风险函数 `h(t,x) =  h0(t)*exp(β1x1+β2x2+β3x3...+βnxn)` 
即f(x) = β1x1+β2x2+β3x3...+βnxn, 所以xgboost模型的预测值f(x) (hazard ratio scale)
是(β1x1+β2x2+β3x3...+βnxn)这个吗?

2. 另外你在xgb_survival中写到:
pred.test <- log(predict(model, dtest))
即此时的pred.train=log(f(x)) 是这个意思吗?

那么根据survival function计算公式:
surf.i <- exp(-exp(pred.test[1])*basehaz.cum)
在这里 括号里面-exp(pred.test[1])的结果 按照上面应该是-f(x)吧?

我想明白predict(model, dtest) 是exp(f(x))呢还是f(x)?

请您指教!