सबसेट की सटीकता वास्तव में एक कठोर मीट्रिक है। 0.29 कितना अच्छा या बुरा है, इसका अंदाजा लगाने के लिए, कुछ विचार:
- देखो कि आपके पास प्रत्येक नमूने के लिए औसत कितने लेबल हैं
- अंतर-एनोटेटर समझौते को देखें, यदि उपलब्ध हो (यदि नहीं, तो यह देखने के लिए अपने आप को देखने की कोशिश करें कि जब आप कक्षा में हों तो क्या उपसमुच्चय सटीकता प्राप्त करें)
- सोचें कि क्या विषय अच्छी तरह से परिभाषित हैं
- प्रत्येक लेबल के लिए आपके पास कितने नमूने हैं
आप यह भी देख सकते हैं कि हैमिंग स्कोर की गणना करने के लिए, यह देखने के लिए कि क्या आपका क्लासिफायर क्लूलेस है, या इसके बजाय शालीनता से अच्छा है, लेकिन सभी लेबल को सही ढंग से अनुमान लगाने में समस्या है। हमिंग स्कोर की गणना करने के लिए नीचे देखें।
उसी समय, जो मुझे समझ में आया है कि मैं OneVsRestClassifier के साथ scikit.metrics का उपयोग नहीं कर सकता हूं, तो मुझे कुछ मीट्रिक (F1, प्रेसिजन, रिकॉल आदि) कैसे मिलेंगी ताकि यह पता चल सके कि क्या गलत है?
देखें कि मल्टीस्कलैस-मल्टीलेबल वर्गीकरण के लिए परिशुद्धता की गणना कैसे करें / याद करें? । मैं भूल गया कि क्या स्केलेर इसका समर्थन करता है, मुझे याद है कि इसकी कुछ सीमाएँ थीं, उदाहरण के लिए स्केलेर कन्फ्यूजन मैट्रिक्स के लिए मल्टी-लेबल का समर्थन नहीं करता है । इन नंबरों को वास्तव में देखना एक अच्छा विचार होगा।
हैमिंग स्कोर :
एक मल्टीलेबेल वर्गीकरण सेटिंग में, sklearn.metrics.accuracy_score
केवल सबसेट सटीकता (3) की गणना करता है : यानी एक नमूने के लिए अनुमानित लेबल का सेट बिल्कुल y_true में लेबल के संबंधित सेट से मेल खाना चाहिए।
सटीकता की गणना का यह तरीका कुछ समय का नाम है, शायद कम अस्पष्ट, सटीक मिलान अनुपात (1):
सटीकता की गणना करने का एक और विशिष्ट तरीका (1) और (2) में परिभाषित किया गया है, और कम अस्पष्ट रूप से हैमिंग स्कोर (4) के रूप में जाना जाता है (क्योंकि यह हैमिंग हानि से निकटता से संबंधित है), या लेबल-आधारित सटीकता )। इसकी गणना निम्न प्रकार से की जाती है:
हैमिंग स्कोर की गणना करने के लिए यहां एक अजगर विधि है:
# Code by /programming//users/1953100/william
# Source: /programming//a/32239764/395857
# License: cc by-sa 3.0 with attribution required
import numpy as np
y_true = np.array([[0,1,0],
[0,1,1],
[1,0,1],
[0,0,1]])
y_pred = np.array([[0,1,1],
[0,1,1],
[0,1,0],
[0,0,0]])
def hamming_score(y_true, y_pred, normalize=True, sample_weight=None):
'''
Compute the Hamming score (a.k.a. label-based accuracy) for the multi-label case
/programming//q/32239577/395857
'''
acc_list = []
for i in range(y_true.shape[0]):
set_true = set( np.where(y_true[i])[0] )
set_pred = set( np.where(y_pred[i])[0] )
#print('\nset_true: {0}'.format(set_true))
#print('set_pred: {0}'.format(set_pred))
tmp_a = None
if len(set_true) == 0 and len(set_pred) == 0:
tmp_a = 1
else:
tmp_a = len(set_true.intersection(set_pred))/\
float( len(set_true.union(set_pred)) )
#print('tmp_a: {0}'.format(tmp_a))
acc_list.append(tmp_a)
return np.mean(acc_list)
if __name__ == "__main__":
print('Hamming score: {0}'.format(hamming_score(y_true, y_pred))) # 0.375 (= (0.5+1+0+0)/4)
# For comparison sake:
import sklearn.metrics
# Subset accuracy
# 0.25 (= 0+1+0+0 / 4) --> 1 if the prediction for one sample fully matches the gold. 0 otherwise.
print('Subset accuracy: {0}'.format(sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)))
# Hamming loss (smaller is better)
# $$ \text{HammingLoss}(x_i, y_i) = \frac{1}{|D|} \sum_{i=1}^{|D|} \frac{xor(x_i, y_i)}{|L|}, $$
# where
# - \\(|D|\\) is the number of samples
# - \\(|L|\\) is the number of labels
# - \\(y_i\\) is the ground truth
# - \\(x_i\\) is the prediction.
# 0.416666666667 (= (1+0+3+1) / (3*4) )
print('Hamming loss: {0}'.format(sklearn.metrics.hamming_loss(y_true, y_pred)))
आउटपुट:
Hamming score: 0.375
Subset accuracy: 0.25
Hamming loss: 0.416666666667
(1) सॉवर, मोहम्मद एस। " मल्टी-लेबल लर्निंग के लिए एल्गोरिदम पर एक साहित्य सर्वेक्षण। " ओरेगन स्टेट यूनिवर्सिटी, कॉर्वेलिस (2010)।
(२) सऊमाकास, ग्रिगोरियोस, और आयोनिस कटाकिस। " मल्टी-लेबल वर्गीकरण: एक सिंहावलोकन। " डिपार्टमेंट ऑफ इंफोर्मेटिक्स, अरस्तू यूनिवर्सिटी ऑफ थेसालोनिकी, ग्रीस (2006)।
(३) घमरावी, नादिया और एंड्रयू मैक्कलम। " सामूहिक बहु-लेबल वर्गीकरण। " सूचना और ज्ञान प्रबंधन पर 14 वें एसीएम अंतर्राष्ट्रीय सम्मेलन की कार्यवाही। एसीएम, 2005।
(४) गोडबोले, शांतनु, और सुनीता सरावगी। " बहु-लेबल वर्गीकरण के लिए भेदभावपूर्ण तरीके। " ज्ञान डिस्कवरी और डेटा खनन में अग्रिम। स्प्रिंगर बर्लिन हीडलबर्ग, 2004. 22-30।