预测当前时间的生存概率
Predicting survival probability at current time
我用以下几行训练我的生存模型:
wft = WeibullAFTFitter()
wft.fit(train, 'duration', event_col='y')
在此之后我想看看当前时间(duration
列)的生存概率是多少。
如果使用以下 for 循环,我目前这样做的方式是:
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]
但是,考虑到我使用 for 循环(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 的内容。
我用以下几行训练我的生存模型:
wft = WeibullAFTFitter()
wft.fit(train, 'duration', event_col='y')
在此之后我想看看当前时间(duration
列)的生存概率是多少。
如果使用以下 for 循环,我目前这样做的方式是:
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]
但是,考虑到我使用 for 循环(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 的内容。