2015-06-03 11 views
7

Używam funkcji roc_auc_score z scikit-learn, aby ocenić moje występy modelek. Howver, mam differents wartości czy używam przewidzieć() lub() predict_probaScikit-learn: roc_auc_score

p_pred = forest.predict_proba(x_test) 
y_test_predicted= forest.predict(x_test) 
fpr, tpr, _ = roc_curve(y_test, p_pred[:, 1]) 
roc_auc = auc(fpr, tpr) 

roc_auc_score(y_test,y_test_predicted) # = 0.68 
roc_auc_score(y_test, p_pred[:, 1]) # = 0.93 

mógłby doradzić na które proszę?

góry dzięki

Odpowiedz

6

najpierw przyjrzeć się różnicy pomiędzy przewidzenia i predict_proba. Pierwsza z nich przewiduje klasę zestawu cech, w którym to ostatnie przewiduje prawdopodobieństwa różnych klas.

Widzisz efekt błędu zaokrąglania, który jest ukryty w binarnym formacie y_test_predicted. y_test_predicted składa się z 1 i 0, gdzie p_pred składa się z wartości zmiennoprzecinkowych z zakresu od 0 do 1. Procedura roc_auc_score zmienia wartość progu i generuje stopę prawdziwie dodatnią i liczbę fałszywych trafień, więc wynik wygląda zupełnie inaczej.

Rozważmy przypadek, gdy:

y_test   = [ 1, 0, 0, 1, 0, 1, 1] 
p_pred   = [.6,.4,.6,.9,.2,.7,.4] 
y_test_predicted = [ 1, 0, 1, 1, 0, 1, 0] 

Należy zauważyć, że krzywa ROC jest generowany przez rozważa wszystkie progi odcięcia. Rozważmy teraz próg 0,65 ...

p_pred przypadek daje:

TPR=0.5, FPR=0, 

i y_test_predicted przypadek daje:

TPR=.75 FPR=.25. 

Prawdopodobnie można zobaczyć, że jeśli te dwa punkty są różne, wtedy powierzchnia pod dwiema krzywymi również będzie całkiem inna.

Ale aby to naprawdę zrozumieć, sugeruję przyjrzeć się krzywym ROC, aby pomóc zrozumieć tę różnicę.

Mam nadzieję, że to pomoże!

+0

i y_test_predicted przypadku należy: 'TPR = 0,75 FPR = .33.' – yonglin

+0

Dywidenda powinna zawierać zabezpieczający, nie tylko TNS: FPR = FP/(FP + TN). – AN6U5

+0

Przepraszam, może po prostu źle cię zrozumiałem. Jeśli masz na myśli to, że porównujemy y_test i y_test_predicted, to TN = 2, a FP = 1. – yonglin