2015-05-05 14 views
5

TLDR: scikits roc_curve Funktion gibt nur 3 Punkte für einen bestimmten Datensatz zurück. Warum könnte das sein, und wie kontrollieren wir, wie viele Punkte zurückkommen?Plotten einer ROC-Kurve in Scikit ergibt nur 3 Punkte

Ich versuche, eine ROC-Kurve zu zeichnen, aber immer ein "ROC-Dreieck" zu bekommen.

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) 

Nur um sicherzustellen, dass die Längen sind ok:

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

Kosten 13759 auf beiden.

Dann läuft:

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

returns [0 0,28240129 1.]

Wenn ich threasholds anrufe, bekomme ich Array ([0,4822225, -,5177775, -,84595197]) (immer nur 3 Punkte).

Es ist daher keine Überraschung, dass meine ROC-Kurve wie ein Dreieck aussieht.

Was ich nicht verstehen kann ist warum scikits roc_curve gibt nur 3 Punkte zurück. Hilfe sehr geschätzt.

enter image description here

+0

Haben Sie die Werte in 'probas _ [:, 1]' überprüft? Obwohl es eine Länge von 13759 hat, darf es nur 3 Werte enthalten ... – pyan

+0

Danke für Ihre Hilfe, ich habe '[print pd.Series (probas _ [: 1]). Unique()]', und tatsächlich nur 2 uniques ('[-0.84595197 -0.5177775]') wurden zurückgegeben –

+1

Schön, dass es hilft. Bitte akzeptieren Sie die Antwort, wenn Sie möchten. – pyan

Antwort

5

Die Anzahl der Punkte hängt von der Anzahl der eindeutigen Werte in der Eingabe. Da der Eingabevektor nur 2 eindeutige Werte hat, gibt die Funktion korrekte Ausgabe.

Verwandte Themen