2015-05-05 66 views
5

TLDR:scikit的roc_curve函數僅返回某個數據集的3個點。 爲什麼會這樣呢,我們如何控制要返回的點數?在scikit中繪製ROC曲線只會得到3分

我試圖繪製ROC曲線,但始終得到一個「ROC三角形」。

lr = LogisticRegression(multi_class = 'multinomial', solver = 'newton-cg') 
y = data['target'].values 
X = data[['feature']].values 

model = lr.fit(X,y) 

# get probabilities for clf 
probas_ = model.predict_log_proba(X) 

只是爲了確保長度都OK:

print len(y) 
print len(probas_[:, 1]) 

返回13759兩個。

然後運行:

false_pos_rate, true_pos_rate, thresholds = roc_curve(y, probas_[:, 1]) 
print false_pos_rate 

返回[0 0.28240129 1]

如果我請threasholds,我得到陣列([0.4822225,-0.5177775,-0.84595197])(總是隻有3分)。

因此,我的ROC曲線看起來像一個三角形就不足爲奇了。

我不明白的是爲什麼scikit的roc_curve只返回3分。非常感謝。

enter image description here

+0

您是否檢查過'probas _ [:, 1]'中的值?雖然它的長度爲13759,但它可能只包含3個值... – pyan

+0

感謝您的幫助,我做了'[print pd.Series(probas _ [:,1])。unique()]',實際上只有2獨一無二('[-0.84595197 -0.5177775]')被退回 –

+1

很高興它有幫助。如果你喜歡,請接受答案。 – pyan

回答

5

點的數量取決於在輸入唯一值的數量。由於輸入向量只有2個唯一值,因此該函數會提供正確的輸出。