2015-05-05 9 views
5

TLDR: la funzione di scikit restituisce solo 3 punti per un determinato set di dati. Perché potrebbe essere così, e come possiamo controllare quanti punti recuperare?Tracciare una curva ROC nei rendimenti di scikit solo 3 punti

Sto provando a disegnare una curva ROC, ma ottengo sempre un "triangolo 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) 

Giusto per assicurarsi che le lunghezze sono ok:

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

Restituisce 13.759 su entrambi.

poi eseguire:

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

ritorna [0. ,28,240129 millions 1.]

Se chiamo threasholds, ottengo array ([,4822,225 mila, -,5177775, -,84595197]) (sempre solo 3 punti).

Non è quindi una sorpresa che la mia curva ROC assomigli ad un triangolo.

Quello che non riesco a capire è perché lo roc_curve di Scikit restituisce solo 3 punti. Aiuto estremamente apprezzato.

enter image description here

+0

Hai controllato i valori in 'probas _ [:, 1]'? Sebbene abbia una lunghezza di 13759, può contenere solo 3 valori ... – pyan

+0

Grazie per il tuo aiuto, ho fatto '[print pd.Series (probas _ [:, 1]). Unique()]', e in effetti solo 2 uniques ('[-0.84595197 -0.5177775]') sono stati restituiti –

+1

Felice è d'aiuto. Si prega di accettare la risposta, se ti piace. – pyan

risposta

5

Il numero di punti dipendono dal numero di valori unici nell'input. Poiché il vettore di input ha solo 2 valori univoci, la funzione restituisce l'output corretto.

Problemi correlati