मुझे लगता है कि आपको इस बहु-वर्ग वर्गीकरण को एक-बनाम-बाकी तरीके से इलाज करना चाहिए (इसलिए प्रत्येक 2x2 तालिका i
बाइनरी वर्गीकरण समस्या के प्रदर्शन को मापती है कि प्रत्येक ऑब्जेक्ट i
लेबल से संबंधित है या नहीं)। नतीजतन, आप प्रत्येक व्यक्तिगत लेबल के लिए टीपी, एफपी, एफएन, टीएन की गणना कर सकते हैं।
import numpy as np
confusion_matrix = np.array([[2,0,3,4],
[0,4,5,1],
[1,0,3,2],
[5,0,0,4]])
def process_cm(confusion_mat, i=0, to_print=True):
# i means which class to choose to do one-vs-the-rest calculation
# rows are actual obs whereas columns are predictions
TP = confusion_mat[i,i] # correctly labeled as i
FP = confusion_mat[:,i].sum() - TP # incorrectly labeled as i
FN = confusion_mat[i,:].sum() - TP # incorrectly labeled as non-i
TN = confusion_mat.sum().sum() - TP - FP - FN
if to_print:
print('TP: {}'.format(TP))
print('FP: {}'.format(FP))
print('FN: {}'.format(FN))
print('TN: {}'.format(TN))
return TP, FP, FN, TN
for i in range(4):
print('Calculating 2x2 contigency table for label{}'.format(i))
process_cm(confusion_matrix, i, to_print=True)
Calculating 2x2 contigency table for label0
TP: 2
FP: 6
FN: 7
TN: 19
Calculating 2x2 contigency table for label1
TP: 4
FP: 0
FN: 6
TN: 24
Calculating 2x2 contigency table for label2
TP: 3
FP: 8
FN: 3
TN: 20
Calculating 2x2 contigency table for label3
TP: 4
FP: 7
FN: 5
TN: 18
स्रोत
2015-07-10 16:59:04
ग्रेट उत्तर! चर्चा में थोड़ा जोड़ने के लिए, मैं बताउंगा कि 'scikit-learn' में मल्टी-क्लास स्कोरिंग मीट्रिक के लिए कार्यक्षमता भी है। यदि आप आरओसी में टीपी, एफपी, एफएन और टीएन को एकत्रित करने की योजना बना रहे थे, तो मैं स्कोरिंग मीट्रिक विधियों का उपयोग करने का सुझाव दूंगा जो [यहां दस्तावेज हैं] (http://scikit-learn.org/stable/modules/classes.html # sklearn-metrics-metrics) और [यहां उपयोगकर्ता मार्गदर्शिका] में संबोधित किया गया है (http://scikit-learn.org/stable/modules/model_evaluation.html#classification-metrics)। एफ 1-स्कोर जैसे मीट्रिक बहुत भ्रमित हो जाते हैं जब कई कक्षाएं पेश की जाती हैं, इसलिए ये मेट्रिक्स बहुत उपयोगी हैं। – AN6U5