9

の出力を、フィットした生存のフィッティングされたCoxnetSurvivalAnalysisモデルからどのように解釈するのか混乱します。私はノートブックIntro to Survival Analysis in scikit-survivalとAPIリファレンスを読んだが、説明を見つけることができません。以下は私の混乱につながるものの最小限の例です。pythonでfitされたscikit-survivalモデルから.predict()の出力を解釈するには?

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の値とは異なります。 nそれらが適合した同じデータ。

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

出力:

-0.044114643249153422 
121.62773722627738 

だから何が正確にpredsですか?明らかに.predictはscikit-learnとはかなり違った意味ですが、何が分かりません。 API Referenceは「予測された決定関数」を返しますが、それはどういう意味ですか?また、Xの場合、予測される見積もりは月額yhatでどうなりますか?私は生存分析に新しいので、私は明らかに何かが欠けている。 X入力で

+0

あなたはこれを理解しましたか? – francium87d

+0

@ francium87dそれはハザード比 – jeremycg

+0

@ francium87dのように見えます。私はこの質問をgithub(https:// github。図書館の著者は、「予測は任意のスケールでのリスクスコアであり、通常はイベントの順序を決定することができますが、正確な時刻は決定できない」と述べています。この "私はどのように解釈するのですか"という質問に答えますが、実際に私が本当に望んでいたものに私を近づかせることはありませんでした。これは生存時間の予測でした。それを得るには、明らかに 'estimator.predict_survival_function'を何らかの方法。 –

答えて

0

、あなたは、入力配列の評価を得る:

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は別のlibraryから来ています。 coxnetのコードを確認できます。

+0

このコードの重要な部分は 'coef = self._get_coef(alpha)'ではなく、 'X = check_array(X)'ではないと思います。 –

3

投稿者は問題の名前を変更しましたが、on githubと投稿しました。

predictの出力についての説明がありますが、予測生存時間に到達する方法がわかりません。これは実際に欲しいものです。

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のスレッドから夫婦役に立つ説明があります。

githubスレッドでは説明がありますが、実際にはそれをすべて実行することはできませんでした。 predict_survival_functionpredict_cumulative_hazard_functionで遊んで、Xの行ごとに生存可能性の高い予測のセットを得ることができるかどうかを確認する必要があります。これは本当に欲しいものです。

他の誰かが優れている場合に備えて、私はここでこの回答を受け入れません。

関連する問題