Py学习  »  机器学习算法

生存分析机器学习模型解释的一揽子解决方案-survex包(三)自定义解释器

灵活胖子的科研进步之路 • 1 年前 • 468 次点击  

survex 包致力于包含尽可能多的生存模型的自动创建解释器的功能。然而,由于可用包和模型的多样性,不可能全部包含。我们提供了手动为任何生存模型创建解释器的功能。

自动解释器创建

在最好的情况下,已经实现了为您想要的模型创建解释器。这意味着一切都可以从模型对象中提取(有时需要设置额外参数)。例如,这是 survival 包中比例风险模型的情况:

library(survex)
library(survival)
cph auto_cph_explainer 
自动创建学习器-coxph

"可以看到,explain()函数的唯一必需参数是比例风险模型本身。但是,在创建模型时,我们需要设置model = TRUE,x = TRUE。如果您忘记设置这些参数,则会显示错误。

手动创建解释器

下一个基本情况是使用所需模型可以进行所有类型的预测。然后可以使用explain_survival()函数手动创建解释器。让我们看一个例子-如何手动设置coxph解释器的所有参数:

cph # data must not include the target columns
veteran_data veteran_y $time, veteran$status)
# set prediction functions of the required format
risk_pred function(model, newdata) predict(model, newdata, type = "risk")
surv_pred function(model, newdata, times) pec::predictSurvProb(model, newdata, times)
chf_pred function(model, newdata, times) -log(surv_pred(model, newdata, times))
manual_cph_explainer                                          data = veteran_data,
                                         y = veteran_y,
                                         predict_function = risk_pred,
                                         predict_survival_function = surv_pred,
                                         predict_cumulative_hazard_function = chf_pred,
                                         label="manual coxph")
手动创建的解释器

"有时,生存模型只提供一种类型的预测,例如生存函数。这个包提供了有用的实用程序,用于在不同类型的预测之间进行转换并对其进行标准化,以便创建解释器。

例如,来自randomForestSRC包的随机生存森林仅在训练数据集的唯一时间点(predict.rsfrc()$survival)上提供生存函数预测。让我们尝试使用将此类型的预测转换为可以用于任何时间点进行预测的步函数的实用程序函数为其创建解释器。

surv_pred_rsf                                            type="survival",
                                           prediction_element = "survival",
                                           times_element = "time.interest")

"因为predict.rsfrc()返回一个包含评估生存函数的时间的列表,所以我们提供了包含预测和评估时间的列表元素的名称。如果在您的情况下,预测函数仅返回矩阵,则可以在eval_times参数中传递预测进行评估的时间。

我们可以使用相同的实用程序来获取累积风险预测(下面是注释的代码)。但是,为了演示另一个函数,我们利用了生存函数()和累积风险函数()之间的数学关系,即。"

# would also work 
# chf_pred_rsf 
#                                           type="chf",
#                                           prediction_element = "chf",
#                                           times_element = "time.interest")
chf_pred_rsf function
(model, newdata, times) {
  survival_to_cumulative_hazard(surv_pred_rsf(model, newdata, times))
}
times $times)
risk_pred_rsf times)
times $times)
risk_pred_rsf times)

The reverse utility (cumulative_hazard_to_survival()) also exists.

If no risk prediction is provided for your model, you can use a utility to sum the cumulative hazard function for each observation to achieve risk scores. This approach is recommended by Ishwaran et al. and Sonabend et al. 

library(randomForestSRC)
rsf manual_rsf_explainer                                          data = veteran_data,
                                         y = veteran_y,
                                         predict_function = risk_pred_rsf,
                                         predict_survival_function = surv_pred_rsf,
                                         predict_cumulative_hazard_function = chf_pred_rsf,
                                         label = "manual rsf")


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/172819