मैं बहु-श्रेणी वर्गीकरण के कार्य को हल कर रहा हूं और स्केलेर में आरओसी वक्र का उपयोग करके परिणाम का अनुमान लगाना चाहता हूं। जैसा कि मुझे पता है, अगर मैं सकारात्मक लेबल सेट करता हूं तो यह इस मामले में वक्र प्लॉट करने की अनुमति देता है। मैंने सकारात्मक लेबल का उपयोग करके एक roc वक्र प्लॉट करने का प्रयास किया और अजीब परिणाम प्राप्त किए: वर्ग का "सकारात्मक लेबल" जितना बड़ा होगा, शीर्ष बाएं कोने के करीब roc वक्र बन जाएगा। फिर मैं सरणियों के पिछले बाइनरी लेबलिंग के साथ एक रॉक वक्र प्लॉट करता हूं। ये 2 प्लॉट अलग थे! मुझे लगता है कि दूसरा सही ढंग से बनाया गया था, लेकिन बाइनरी कक्षाओं के मामले में साजिश में केवल 3 अंक हैं और यह जानकारीपूर्ण नहीं है।

मैं समझना चाहता हूं, बाइनरी कक्षाओं के लिए आरसी वक्र और "सकारात्मक लेबल" के साथ आरओसी वक्र अलग क्यों दिखते हैं और सकारात्मक लेबल के साथ आरसी वक्र को सही तरीके से कैसे प्लॉट करें।

यहाँ कोड है:

from sklearn.metrics import roc_curve, auc
y_pred = [1,2,2,2,3,3,1,1,1,1,1,2,1,2,3,2,2,1,1]
y_test = [1,3,2,2,1,3,2,1,2,2,1,2,2,2,1,1,1,1,1]
fp, tp, _ = roc_curve(y_test, y_pred, pos_label = 2)
from sklearn.preprocessing import label_binarize
y_pred = label_binarize(y_pred, classes=[1, 2, 3])
y_test = label_binarize(y_test, classes=[1, 2, 3])
fpb, tpb, _b = roc_curve(y_test[:,1], y_pred[:,1])
plt.plot(fp, tp, 'ro-', fpb, tpb, 'bo-', alpha = 0.5)
plt.show()
print('AUC with pos_label', auc(fp,tp))
print('AUC binary variant', auc(fpb,tpb))

यह साजिश का उदाहरण है

लाल वक्र pos_label के साथ roc_curve का प्रतिनिधित्व करता है, नीला वक्र "बाइनरी केस" में roc_curve का प्रतिनिधित्व करता है

0
svetlana 11 जुलाई 2019, 18:05

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि टिप्पणियों में बताया गया है, आरओसी वक्र नहीं दहलीज पूर्वानुमानों (अर्थात कठिन वर्ग) का मूल्यांकन करने के लिए उपयुक्त हैं, जैसा कि आपके y_pred; इसके अलावा, एयूसी का उपयोग करते समय, कुछ सीमाओं को ध्यान में रखना उपयोगी होता है जो कई चिकित्सकों के लिए स्पष्ट रूप से स्पष्ट नहीं हैं - अधिक विवरण के लिए कम ROC AUC स्कोर लेकिन उच्च सटीकता प्राप्त करना

क्या आप कृपया मुझे कुछ सलाह दे सकते हैं, "कठिन" वर्गों के साथ इस तरह के बहु-वर्ग वर्गीकरण की गुणवत्ता का मूल्यांकन करने के लिए मैं कौन से मीट्रिक का उपयोग कर सकता हूं?

सबसे सरल दृष्टिकोण भ्रम मैट्रिक्स और स्किकिट-लर्न द्वारा आसानी से प्रदान की जाने वाली वर्गीकरण रिपोर्ट होगी:

from sklearn.metrics import confusion_matrix, classification_report

y_pred = [1,2,2,2,3,3,1,1,1,1,1,2,1,2,3,2,2,1,1]
y_test = [1,3,2,2,1,3,2,1,2,2,1,2,2,2,1,1,1,1,1]

print(classification_report(y_test, y_pred)) # caution - order of arguments matters!
# result:
             precision    recall  f1-score   support

          1       0.56      0.56      0.56         9
          2       0.57      0.50      0.53         8
          3       0.33      0.50      0.40         2

avg / total       0.54      0.53      0.53        19

cm = confusion_matrix(y_test, y_pred) # again, order of arguments matters
cm
# result:
array([[5, 2, 2],
       [4, 4, 0],
       [0, 1, 1]], dtype=int64)

कन्फ्यूजन मैट्रिक्स से, आप ब्याज की अन्य मात्राएं निकाल सकते हैं, जैसे प्रति वर्ग सही और गलत सकारात्मक आदि - विवरण के लिए, कृपया पायथन में कन्फ्यूजन मैट्रिक्स से सटीक, रिकॉल और f-माप कैसे प्राप्त करें

1
desertnaut 11 जुलाई 2019, 19:20