2016-06-21 53 views
1

我正在使用scikit-learn進行分類問題以預測勝利或失敗的機會。
我使用的一段代碼:如何在scikit-learn中解釋roc_curve(測試,預測)

fpr, tpr, thresholds =roc_curve(yTest,predictions) 

,其結果是:

(array([ 0.  , 0.2628946, 1.  ]), 
    array([ 0.  , 0.73692477, 1.  ]), 
    array([2, 1, 0])) 

我知道使用FPR計算AUC的,TPR用於各種閾值在範圍內變化的(1, 0)。理想情況下,我知道thresold應該在1和0之間。

但是,這裏的閾值是2,1,0。要從中理解什麼以及如何解釋這一點。

示例代碼看起來罰款:

import numpy as np 
from sklearn import metrics 
y = np.array([1, 1, 2, 2]) 
scores = np.array([0.1, 0.4, 0.35, 0.8]) 
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2) 
>>>fpr 
array([ 0. , 0.5, 0.5, 1. ]) 
>>>tpr 
array([ 0.5, 0.5, 1. , 1. ]) 
>>> thresholds 
array([ 0.8 , 0.4 , 0.35, 0.1 ]) 

我predict_proba(yTest)爲:

[ 0.09573287 0.90426713] 
[ 0.14987409 0.85012591] 
[ 0.16348188 0.83651812] 
..., 
[ 0.13957409 0.86042591] 
[ 0.04478675 0.95521325] 
[ 0.03492729 0.96507271] 
+0

你能分享你的yTest和預測數組中的值嗎? –

+0

@AbhinavArora:編輯我的問題 –

回答

0

閾值並不侷限於[0; 1]。

只有TPR和FPR是利率,即0到1

如果你看到文檔,它會告訴你如何到達值2:關於

降低門檻用於計算fpr和tpr的決策函數。 thresholds[0]表示沒有被預測的實例,並且被任意設置爲max(y_score) + 1

如果您的輸入數據的值爲[100,42,42,3.14],那麼它會考慮閾值[101, 100, 42, 3.14]

從您的閾值判斷爲[2,1,0],您是而不是使用此功能的方式正確。你可能已經切換了這兩個參數?因爲輸出表明你的輸入分數都是0或1。在這樣的數據上,ROC曲線退化,你只需使用精度和回憶。但是如果你已經改變了分數和標籤,你可能會得到一個真正的ROC曲線。