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.
Czy sprawdziłeś wartości w 'probas _ [:, 1]'? Chociaż ma długość 13759, może zawierać tylko 3 wartości ... – pyan
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 –
Cieszę się, że to pomaga. Proszę zaakceptować odpowiedź, jeśli chcesz. – pyan