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.
Haben Sie die Werte in 'probas _ [:, 1]' überprüft? Obwohl es eine Länge von 13759 hat, darf es nur 3 Werte enthalten ... – pyan
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 –
Schön, dass es hilft. Bitte akzeptieren Sie die Antwort, wenn Sie möchten. – pyan