Как интерпретировать вывод.predict() из адаптированной модели выживания в Python?

Я запутался, как интерпретировать вывод .predict из подогнанного CoxnetSurvivalAnalysis модель в скикит-выживании. Я прочитал записную книжку " Введение в анализ выживания" в "Scikit-Survival" и справку по API, но не могу найти объяснения. Ниже приведен минимальный пример того, что приводит меня в замешательство:

import pandas as pd
from sksurv.datasets import load_veterans_lung_cancer
from sksurv.linear_model import CoxnetSurvivalAnalysis

# load data
data_X, data_y = load_veterans_lung_cancer()

# one-hot-encode categorical columns in X
categorical_cols = ['Celltype', 'Prior_therapy', 'Treatment']

X = data_X.copy()
for c in categorical_cols:
    dummy_matrix = pd.get_dummies(X[c], prefix=c, drop_first=False)
    X = pd.concat([X, dummy_matrix], axis=1).drop(c, axis=1)

# display final X to fit Cox Elastic Net model on
del data_X
print(X.head(3))

Итак, вот X, входящий в модель:

   Age_in_years  Celltype  Karnofsky_score  Months_from_Diagnosis  \
0          69.0  squamous             60.0                    7.0   
1          64.0  squamous             70.0                    5.0   
2          38.0  squamous             60.0                    3.0   

  Prior_therapy Treatment  
0            no  standard  
1           yes  standard  
2            no  standard  

... переход к подходящей модели и генерация прогнозов:

# Fit Model
coxnet = CoxnetSurvivalAnalysis()
coxnet.fit(X, data_y)    

# What are these predictions?    
preds = coxnet.predict(X)

preds имеет столько же записей, сколько X, но их значения значительно отличаются от значений в data_y, даже если они предсказаны на тех же данных, на которые они были вписаны.

print(preds.mean()) 
print(data_y['Survival_in_days'].mean())

выход:

-0.044114643249153422
121.62773722627738

Так что же это такое preds? очевидно .predict здесь что-то совсем другое, чем в scikit-learn, но я не могу понять, что. Справочник по API говорит, что возвращает "функцию прогнозируемого решения", но что это значит? И как мне добраться до прогнозируемой оценки по месяцам? yhat для данного X? Я новичок в анализе выживания, поэтому я явно что-то упускаю.

2 ответа

Я разместил этот вопрос на github, хотя автор переименовал вопрос в вопрос.

Я получил несколько полезных объяснений того, что predict вывод есть, но я все еще не уверен, как добраться до набора предсказанных времен выживания, чего я действительно хочу. Вот пара полезных объяснений из этой ветки github:

predictions are risk scores on an arbitrary scale, which means you can 
usually only determine the sequence of events, but not their exact time.

-sebp (автор библиотеки)

It [predict] returns a type of risk score. Higher value means higher
risk of your event (class value = True)...You were probably looking
for a predicted time. You can get the predicted survival function with
estimator.predict_survival_function as in the example 00
notebook...EDIT: Actually, I’m trying to extract this but it’s been a
bit of a pain to munge

-pavopax.

В ветке github есть больше объяснений, хотя я не был в состоянии следить за всем этим. Мне нужно поиграть с predict_survival_function а также predict_cumulative_hazard_function и посмотреть, смогу ли я получить набор прогнозов для наиболее вероятного времени выживания по строке в Xчто я и хочу.

Я не собираюсь принимать этот ответ здесь, в случае, если у кого-то еще есть лучший ответ.

С вводом X вы получите оценку входного массива:

def predict(self, X, alpha=None):
    """The linear predictor of the model.
    Parameters
    ----------
    X : array-like, shape = (n_samples, n_features)
        Test data of which to calculate log-likelihood from
    alpha : float, optional
        Constant that multiplies the penalty terms. If the same alpha was used during training, exact
        coefficients are used, otherwise coefficients are interpolated from the closest alpha values that
        were used during training. If set to ``None``, the last alpha in the solution path is used.
    Returns
    -------
    T : array, shape = (n_samples,)
        The predicted decision function
    """
    X = check_array(X)
    coef = self._get_coef(alpha)
    return numpy.dot(X, coef)

Определение check_array происходит из другой библиотеки. Вы можете просмотреть код coxnet.

Другие вопросы по тегам