मैं सोच रहा हूं कि मल्टीस्केल्स मल्टीलेबल वर्गीकरण के लिए सटीक और रिकॉल उपायों की गणना कैसे करें, अर्थात वर्गीकरण जहां दो से अधिक लेबल हैं, और जहां प्रत्येक उदाहरण में कई लेबल हो सकते हैं?
मैं सोच रहा हूं कि मल्टीस्केल्स मल्टीलेबल वर्गीकरण के लिए सटीक और रिकॉल उपायों की गणना कैसे करें, अर्थात वर्गीकरण जहां दो से अधिक लेबल हैं, और जहां प्रत्येक उदाहरण में कई लेबल हो सकते हैं?
जवाबों:
वर्गीकरण प्रदर्शन को मापने के लिए एक अन्य लोकप्रिय उपकरण आरओसी / एयूसी है ; यह भी एक बहु-वर्ग / बहु-लेबल विस्तार है: देखें [हाथ 2001]
[हाथ 2001]: आरओसी वक्र के तहत क्षेत्र का एक साधारण सामान्यीकरण कई वर्ग वर्गीकरण समस्याओं के लिए
यहाँ भ्रम मैट्रिक्स और मल्टी-क्लास परिशुद्धता / रिकॉल माप के बारे में आंगन फोरम थ्रेड की कुछ चर्चा की गई है।
मूल विचार सभी वर्गों की सभी परिशुद्धता और याद की गणना करना है, फिर उन्हें एक वास्तविक संख्या माप प्राप्त करने के लिए औसत करें।
कन्फ्यूजन मैट्रिक्स सटीक और एक कक्षा को वापस बुलाना आसान बनाता है।
नीचे उस धागे से कॉपी किए गए भ्रम मैट्रिक्स के बारे में कुछ बुनियादी व्याख्या की गई है:
एक भ्रम मैट्रिक्स सही सकारात्मक, वास्तविक नकारात्मक, झूठी सकारात्मक और गलत नकारात्मक को वर्गीकृत करने का एक तरीका है, जब 2 से अधिक कक्षाएं होती हैं। इसका उपयोग सटीक और रीकॉलिंग के लिए किया जाता है और इसलिए मल्टी क्लास समस्याओं के लिए f1- स्कोर।
वास्तविक मान स्तंभों द्वारा दर्शाए जाते हैं। अनुमानित मानों को पंक्तियों द्वारा दर्शाया जाता है।
उदाहरण:
10 प्रशिक्षण उदाहरण जो वास्तव में 8 हैं, को 5
13 प्रशिक्षण उदाहरणों के रूप में गलत तरीके से वर्गीकृत (भविष्यवाणी) किया गया है जो वास्तव में 4 हैं, गलत तरीके से वर्गीकृत हैं 9 9
असमंजस का जाल
सेमी = 0 1 2 3 4 5 6 7 8 9 10 1 298 2 1 0 1 1 3 1 1 0 2 0 293 7 4 1 0 5 2 0 0 3 1 3 263 0 8 0 0 3 0 2 4 1 5 0 261 4 0 3 2 0 1 ५ ० ० १० ० २५४ ३ ० १० २ १ 6 0 4 1 1 4 300 300 1 1 0 0 7 1 3 2 0 0 0 264 0 7 1 8 3 5 3 1 7 1 0 289 1 0 ९ ० १ ३ १ १ १ ० ११ १ २ 0 ९ ० 10 0 6 0 1 6 1 2 1 4 304
कक्षा x के लिए:
सही सकारात्मक: विकर्ण स्थिति, सेमी (एक्स, एक्स)।
गलत धनात्मक: स्तंभ x का योग (मुख्य विकर्ण के बिना), योग (सेमी (:, x)) - सेमी (x, x)।
गलत ऋणात्मक: पंक्ति x का योग (मुख्य विकर्ण के बिना), योग (सेमी (x, :), 2) -cm (x, x)।
आप पाठ्यक्रम फॉर्मूला के बाद सटीक, रिकॉल और एफ 1 स्कोर की गणना कर सकते हैं।
सभी वर्गों (अधिक वजन के साथ या बिना) का लाभ पूरे मॉडल के लिए मान देता है।
मल्टी-लेबल वर्गीकरण के लिए आपके पास जाने के दो तरीके हैं सबसे पहले निम्नलिखित पर विचार करें।
मैट्रिक्स की गणना प्रति डेटा पॉइंट तरीके से की जाती है। प्रत्येक अनुमानित लेबल के लिए इसके केवल स्कोर की गणना की जाती है, और फिर इन अंकों को सभी डेटा पॉइंट्स पर एकत्र किया जाता है।
अन्य मेट्रिक्स भी हैं।
यहां चीजें लेबल-वार की जाती हैं। प्रत्येक लेबल के लिए मेट्रिक्स (उदा। सटीक, रिकॉल) की गणना की जाती है और फिर इन लेबल-वार मैट्रिक्स को एकत्र किया जाता है। इसलिए, इस मामले में आप पूरे डेटासेट पर प्रत्येक लेबल के लिए परिशुद्धता / रिकॉल की गणना करते हैं, जैसा कि आप एक द्विआधारी वर्गीकरण के लिए करते हैं (जैसा कि प्रत्येक लेबल में एक द्विआधारी असाइनमेंट है), फिर इसे समग्र करें।
इसका आसान तरीका सामान्य रूप प्रस्तुत करना है।
यह मानक मल्टी-क्लास समकक्ष का एक विस्तार है।
मैक्रो औसतन
माइक्रो
यहाँ क्रमशः केवल लेबल के लिए सही सकारात्मक, गलत सकारात्मक, वास्तविक नकारात्मक और गलत नकारात्मक गणना हैं ।
यहां किसी भी भ्रम-मैट्रिक्स-आधारित मीट्रिक के लिए खड़ा है। अपने मामले में आप मानक परिशुद्धता में प्लग करेंगे और सूत्रों को याद करेंगे। मैक्रो औसत के लिए आप प्रति लेबल काउंट में पास होते हैं और फिर माइक्रो एवरेज के लिए, आप पहले काउंट को औसत करते हैं, फिर अपने मीट्रिक फ़ंक्शन को लागू करते हैं।
आपको यहां मल्टी-लेबल मेट्रिक्स के लिए कोड पर एक नज़र रखने की दिलचस्पी हो सकती है , जो आर में पैकेज के एक भाग mldr है । इसके अलावा आप जावा मल्टी-लेबल लाइब्रेरी मुलान में देखने के लिए इच्छुक हो सकते हैं ।
विभिन्न मैट्रिक्स में आने के लिए यह एक अच्छा पेपर है: मल्टी-लेबल लर्निंग एल्गोरिदम पर एक समीक्षा
मैं मल्टी-लेबल भाग के बारे में नहीं जानता, लेकिन म्यूटली-क्लास वर्गीकरण के लिए वे लिंक आपकी मदद करेंगे
यह लिंक बताता है कि भ्रम की मैट्रिक्स का निर्माण कैसे करें जिसका उपयोग आप प्रत्येक श्रेणी के लिए सटीक और याद करने के लिए कर सकते हैं
और यह लिंक बताता है कि समग्र रूप से वर्गीकरण का मूल्यांकन करने के लिए माइक्रो-एफ 1 और मैक्रो-एफ 1 उपायों की गणना कैसे करें।
आशा है कि आपको वह उपयोगी लगा।
इस लिंक ने मेरी मदद की .. https://www.youtube.com/watch?v=HBi-P5j0Kec मुझे उम्मीद है कि यह आपकी भी मदद करेगा
नीचे के रूप में वितरण कहते हैं
A B C D
A 100 80 10 10
B 0 9 0 1
C 0 1 8 1
D 0 1 0 9
ए के लिए सटीक होगा
पी (ए) = 100/100 + 0 + 0 +0 = 100
P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... अनिवार्य रूप से वर्ग का सही सकारात्मक लेते हैं और स्तंभ डेटा को पंक्तियों में विभाजित करते हैं
एक के लिए याद होगा
आर (ए) = 100 / 100+ 80 + 10 + 10 = 0.5
आर (बी) = 9 / 9+ 0 + 0 + 1 = 0.9
psst ... अनिवार्य रूप से वर्ग का वास्तविक सकारात्मक ले लो और स्तंभों में पंक्ति डेटा द्वारा विभाजित करें
एक बार जब आप सभी मान प्राप्त कर लेते हैं, तो मैक्रो औसत ले लें
avg (P) = P (A) + P (B) + P (C) + P (D) / 4
avg (R) = R (A) + R (B) + R (C) + R (D) / 4
एफ 1 = 2 * एवीजी (पी) * एवीजी (आर) / एवीजी (पी) + एवीजी (आर)
की जाँच करें हार्वर्ड में cs205.org से ये स्लाइड । एक बार जब आप त्रुटि माप पर अनुभाग में आते हैं, तो बहु-स्तरीय सेटिंग्स (जैसे, एक-बनाम-सभी या एक-बनाम-एक) और भ्रम की स्थिति में सटीक और याद करने की चर्चा होती है। भ्रम की परिपक्वता वही है जो आप वास्तव में यहाँ चाहते हैं।
FYI करें, पायथन सॉफ्टवेयर पैकेज scikits.learn में , मल्टी-क्लास डेटा पर प्रशिक्षित क्लासिफायर से भ्रम मैट्रिक्स जैसी चीजों को स्वचालित रूप से गणना करने के लिए अंतर्निहित तरीके हैं। यह संभवतः आपके लिए भी सटीक-रिकॉल प्लॉट की गणना कर सकता है। देखने लायक।
ओजगुर एट अल (2005) से यह देखना संभव है कि आपको सामान्य भावों के बाद प्रेसिजन और रिकॉल की गणना करनी चाहिए, लेकिन अपने डेटासेट में कुल एन उदाहरणों के औसत के बजाय, आपको एन = [इंस्टेंस का उपयोग कम से कम एक लेबल के साथ करना चाहिए। कक्षा में विचाराधीन]।
यहाँ उल्लेख किया गया संदर्भ है: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf
ठीक उसी तरह जिस तरह से आप इसे सामान्य स्थिति में सेट के साथ करेंगे:
http://en.wikipedia.org/wiki/F1_score
http://en.wikipedia.org/wiki/Precision_and_recall
यहाँ सरल पायथन कार्य हैं जो वास्तव में ऐसा करते हैं:
def precision(y_true, y_pred):
i = set(y_true).intersection(y_pred)
len1 = len(y_pred)
if len1 == 0:
return 0
else:
return len(i) / len1
def recall(y_true, y_pred):
i = set(y_true).intersection(y_pred)
return len(i) / len(y_true)
def f1(y_true, y_pred):
p = precision(y_true, y_pred)
r = recall(y_true, y_pred)
if p + r == 0:
return 0
else:
return 2 * (p * r) / (p + r)
if __name__ == '__main__':
print(f1(['A', 'B', 'C'], ['A', 'B']))