预测当前时间的生存概率



我用以下几行训练我的生存模型:

wft = WeibullAFTFitter()
wft.fit(train, 'duration', event_col='y')

之后,我希望看到当前时间的生存概率(duration列(。

如果使用以下循环使用以下内容:

p_surv = np.zeros(len(test))
for i in range(len(p_surv)):
    row = test.iloc[i:i+1].drop(dep_var, axis=1)
    t = test.iloc[i:i+1, col_num]
    p_surv[i] = wft.predict_survival_function(row, t).values[0][0]

但是,考虑到IM使用for loop(200k 行(,这确实很慢。执行wft.predict_survival_function(test, test['duration'])的另一个替代方法将创建一个200000x200000矩阵,因为它会在所有提供的时间检查每行。

我只想检查其自己的持续时间的生存概率。lifelines中是否有一个功能?

好问题。我认为目前,最好的方法是重现预测生存功能所做的事情。也就是说,做这样的事情:

def predict_cumulative_hazard_at_single_time(self, X, times, ancillary_X=None):
    lambda_, rho_ = self._prep_inputs_for_prediction_and_return_scores(X, ancillary_X)
    return (times / lambda_) ** rho_
def predict_survival_function_at_single_time(self, X, times, ancillary_X=None):
    return np.exp(-self.predict_cumulative_hazard_at_single_time(X, times=times, ancillary_X=ancillary_X))

wft.predict_survival_function_at_single_time = predict_survival_function_at_single_time.__get__(wft)
wft.predict_cumulative_hazard_at_single_time = predict_cumulative_hazard_at_single_time.__get__(wft)
p_surv2 = wft.predict_survival_function_at_single_time(test, test['duration'])

我认为这样的事情会起作用。这可能是我将来添加到API中的东西。

最新更新