2015-06-03 9 views
7

मैं scikit से roc_auc_score फ़ंक्शन का उपयोग कर रहा हूं- मेरे मॉडल प्रदर्शन का मूल्यांकन करने के लिए सीखें। Howver, मैं विभिन्न मूल्यों है कि क्या मैं भविष्यवाणी का उपयोग करें() या predict_proba()विज्ञान-सीखें: 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 

कृपया उस पर सलाह देने के लिए किया जा सका है?

अग्रिम धन्यवाद

उत्तर

6

की भविष्यवाणी और predict_proba के बीच अंतर पर सबसे पहले देखो। पूर्व फीचर सेट के लिए कक्षा की भविष्यवाणी करता है जहां बाद वाले ने विभिन्न वर्गों की संभावनाओं की भविष्यवाणी की है।

आप y_test_predicted के बाइनरी प्रारूप में अंतर्निहित गोलाकार त्रुटि का प्रभाव देख रहे हैं। y_test_predicted में 1 और 0 के शामिल हैं, जहां p_pred 0 और 1 के बीच फ़्लोटिंग पॉइंट मानों में शामिल है। roc_auc_score routine थ्रेसहोल्ड मान बदलता है और वास्तविक सकारात्मक दर और झूठी सकारात्मक दर उत्पन्न करता है, इसलिए स्कोर काफी अलग दिखता है।

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] 

ध्यान दें कि ROC वक्र सभी कटऑफ थ्रेसहोल्ड पर विचार द्वारा उत्पन्न होता है:

मामले में जहां पर विचार करें। अब 0.65 की एक सीमा से ...

पर विचार p_pred मामले देता है:

TPR=0.5, FPR=0, 

और y_test_predicted मामले देता है:

TPR=.75 FPR=.25. 

आप शायद देख सकते हैं कि इन दो बिंदुओं अलग हैं, तो दो घटता के नीचे का क्षेत्र भी काफी अलग होगा।

लेकिन वास्तव में इसे समझने के लिए, मैं सुझाव देता हूं कि आरओसी वक्र खुद को इस अंतर को समझने में मदद के लिए देखें।

आशा है कि इससे मदद मिलती है!

+0

और y_test_predicted मामले को: 'TPR = .75 FPR = .33.' – yonglin

+0

लाभांश एफपीएस, न सिर्फ टीएनएस शामिल करना चाहिए: FPR = एफपी/(एफपी + तमिलनाडु)। – AN6U5

+0

क्षमा करें शायद मैं आपको गलत समझा। यदि आपका मतलब है कि हम y_test और y_test_predicted की तुलना करते हैं, तो TN = 2, और FP = 1। – yonglin