Прогнозирование вероятности выживания в настоящее время - PullRequest
0 голосов
/ 14 мая 2019

Я тренирую свою модель выживания со следующими строками:

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 функция, которая это делает?

1 Ответ

0 голосов
/ 14 мая 2019

хороший вопрос. Сейчас я думаю, что лучший способ - воспроизвести то, что делает функция предсказания выживания. То есть сделать что-то вроде этого:

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 в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...