2015-05-05 25 views
5

TLDR: funkcja scikit's roc_curve zwraca tylko 3 punkty za pewien zestaw danych. Dlaczego to możliwe i jak kontrolować, ile punktów powrócić?Wykreślanie krzywej ROC w scikicie daje tylko 3 punkty

Próbuję narysować krzywą ROC, ale konsekwentnie uzyskać "trójkąt 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) 

Wystarczy, aby upewnić się, że odcinki są ok:

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

Zwraca 13759 na obu.

Następnie uruchomiony:

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

powraca [0. 0,28240129 1.]

Jeśli zadzwonię threasholds, mam array ([0,4822225, -0.5177775, -0,84595197]) (zawsze tylko 3 punkty).

Nie jest zatem niespodzianką, że moja krzywa ROC wygląda jak trójkąt.

To, czego nie rozumiem, to , dlaczego scikit's roc_curve zwraca tylko 3 punkty. Pomoc ogromnie doceniona.

enter image description here

+0

Czy sprawdziłeś wartości w 'probas _ [:, 1]'? Chociaż ma długość 13759, może zawierać tylko 3 wartości ... – pyan

+0

Dziękuję za pomoc, zrobiłem '[print pd.Series (probas _ [:, 1]). Unique()]', a nawet tylko 2 unikalne ('[-0.84595197 -0.5177775]') zostały zwrócone –

+1

Cieszę się, że to pomaga. Proszę zaakceptować odpowiedź, jeśli chcesz. – pyan

Odpowiedz

5

Liczba punktów zależy od liczby unikatowe wartości na wejściu. Ponieważ wektor wejściowy ma tylko 2 unikalne wartości, funkcja daje prawidłowe wyniki.