9

.predict çıktısını scikit-survival'ta takılı CoxnetSurvivalAnalysis modelinden nasıl yorumlayacağım konusunda kafam karıştı. Intro to Survival Analysis in scikit-survival not defterinden ve API referansından okudum, ancak bir açıklama bulamıyorum.Python'da takılan scikit-survival modelinden .predict() çıktısı nasıl yorumlanır?

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 

... uydurma modeline geçmeden ve üreten tahminler:

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)) 

işte modele girmeden X bulunuyor: Aşağıda benim karışıklığa yol açar ne minimal bir örnektir

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

# What are these predictions?  
preds = coxnet.predict(X) 
preds, X ile aynı sayıda kayda sahiptir, ancak değerleri, tahmin edildiği zaman bile data_y'daki değerlerden farklıdır. n aynı verilere uyuyorlardı.

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

çıkışı:

-0.044114643249153422 
121.62773722627738 

Peki tam preds nelerdir? Açıkça .predict, scikit-öğrenmesinden çok farklı bir şey ifade ediyor, ama ne olduğunu anlayamıyorum. API Reference, "Tahmin edilen karar işlevi" ni döndürdüğünü söylüyor, ancak bunun anlamı nedir? Ve belirli bir X için yhat aylarında tahmini tahmini nasıl elde edebilirim? Hayatta kalma analizinde yeniyim, bu yüzden bir şeyleri özlüyorum.

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) 

tanım check_array başka library geliyor: X girişi ile

+0

Bunu hiç anladın mı? – francium87d

+0

@ francium87d, – jeremycg

+0

@ francium87d türünde tehlike oranına benziyor. Bu soruyu github (https: // github.com/sebp/scikit-survival/issues/15) ve kütüphane yazarı, 'tahminlerin rasgele bir ölçekte risk puanları olduğunu belirtmiştir, bu da genellikle yalnızca olayların sırasını belirleyebileceğiniz anlamına gelir, fakat tam olarak değil. ' sanırım "bunu nasıl yorumluyorum" sorusunu sanırım, ama gerçekten istediğim şeye gerçekten yaklaşmadım, bu da muhtemelen hayatta kalma süresinin bir tahminiydi. Bunu elde etmek için, görünüşte "estimator.predict_survival_function" ifadesini kullanmam gerekiyor bir şekilde. –

cevap

0

, giriş dizinin bir değerlendirme olsun. coxnet kodunu gözden geçirebilirsiniz.
+0

Sanırım bu kodun anahtar kısmı muhtemelen 'coef = self._get_coef (alpha) 'değil' X = check_array (X) 'dır. –

3

Bu soruyu on github gönderdim, ancak yazar sorun sorusunu yeniden adlandırdı.

predict çıktısının ne olduğuyla ilgili bazı yararlı açıklamalarım var, ancak yine de beklediğim hayatta kalma süreleri kümesine nasıl ulaşacağımı bilmiyorum.

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 (kütüphane yazar)

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: İşte o github iplikten bir kaç yararlı açıklamalar var.

Github dizisinde daha fazla açıklama var, ancak tüm bunları takip edemedim. predict_survival_function ve predict_cumulative_hazard_function ile etrafta oynamayı ve X numaralı satırda muhtemelen hayatta kalma süresinin bir dizi tahminine ulaşabileceğimi görüyorum.

Bu cevabı burada, başka birinin daha iyi olması durumunda kabul etmeyeceğim.

İlgili konular