मल्टीस्कल्स-मल्टीलेबल वर्गीकरण के लिए सटीक / रिकॉल की गणना कैसे करें?


72

मैं सोच रहा हूं कि मल्टीस्केल्स मल्टीलेबल वर्गीकरण के लिए सटीक और रिकॉल उपायों की गणना कैसे करें, अर्थात वर्गीकरण जहां दो से अधिक लेबल हैं, और जहां प्रत्येक उदाहरण में कई लेबल हो सकते हैं?


1
मल्टीलेबेल भाग इसे बहुत कठिन बनाता है और मुझे भी इसमें दिलचस्पी है। मुझे लगता है कि यह मल्टीलेबल समस्याओं पर लागू नहीं है, लेकिन मुझे बिल्कुल भी भरोसा नहीं है।
user798719

1
वास्तव में, सभी मल्टीलेबल्स समस्याएं मल्टीस्केल हैं, इसलिए आप उदाहरण के लिए आर में यूटिल पैकेज का उपयोग कर सकते हैं या जावा में मुलान।
एड्रियानो रिवोली

जवाबों:


19

वर्गीकरण प्रदर्शन को मापने के लिए एक अन्य लोकप्रिय उपकरण आरओसी / एयूसी है ; यह भी एक बहु-वर्ग / बहु-लेबल विस्तार है: देखें [हाथ 2001]

[हाथ 2001]: आरओसी वक्र के तहत क्षेत्र का एक साधारण सामान्यीकरण कई वर्ग वर्गीकरण समस्याओं के लिए


यह लोकप्रिय है, लेकिन यह छोटी गाड़ी हो सकती है। मैं पूरी तरह से इस पर भरोसा नहीं करता। आँकड़े.स्टैकएक्सचेंज.com
questions/

3
स्टैक ओवरफ्लो को कभी न बदलें! गाय एक समस्या पूछती है, अधिकांश मतदान का जवाब वास्तव में उसके सवाल का जवाब नहीं देता है, लेकिन कुछ अन्य उपकरण / पुस्तकालय को इंगित करता है जो बेहतर होगा
ragvri

हाँ, इस उत्तर में +20 कैसे हो सकता है? इसमें शब्द भी सटीक और याद नहीं हैं।
सिमोन डेरामियर

अगर आपको लगता है कि आप अच्छी तरह से महसूस करेंगे कि सटीक और याद वास्तव में AUC द्वारा कब्जा कर लिया गया है।
oDDsKooL

16

यहाँ भ्रम मैट्रिक्स और मल्टी-क्लास परिशुद्धता / रिकॉल माप के बारे में आंगन फोरम थ्रेड की कुछ चर्चा की गई है।

मूल विचार सभी वर्गों की सभी परिशुद्धता और याद की गणना करना है, फिर उन्हें एक वास्तविक संख्या माप प्राप्त करने के लिए औसत करें।

कन्फ्यूजन मैट्रिक्स सटीक और एक कक्षा को वापस बुलाना आसान बनाता है।

नीचे उस धागे से कॉपी किए गए भ्रम मैट्रिक्स के बारे में कुछ बुनियादी व्याख्या की गई है:

एक भ्रम मैट्रिक्स सही सकारात्मक, वास्तविक नकारात्मक, झूठी सकारात्मक और गलत नकारात्मक को वर्गीकृत करने का एक तरीका है, जब 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 स्कोर की गणना कर सकते हैं।

सभी वर्गों (अधिक वजन के साथ या बिना) का लाभ पूरे मॉडल के लिए मान देता है।


2
आपके पास अपनी कुल्हाड़ियां हैं। आपने जो भी लिखा है, उसके आधार पर, आपके सीएम को ट्रांसपोंड किया जाना चाहिए।
स्पेसी

@ टारेंटयुला आप ऐसा क्यों सोचते हैं? मुझे लगता है कि वह सही है।
शाहंशाह

@ शहंशाह ने इसे एक कॉलम के लिए आज़माया, यह गलत है।
स्पेसी


8
मुझे विश्वास नहीं है कि यह उत्तर बहुभाषी समस्या को संभालता है। यह बहु वर्ग की समस्याओं पर लागू होता है। मल्टीलेबल समस्याओं में एक झूठी सकारात्मक या झूठी नकारात्मक की धारणा क्या है?
user798719

13

मल्टी-लेबल वर्गीकरण के लिए आपके पास जाने के दो तरीके हैं सबसे पहले निम्नलिखित पर विचार करें।

  • n उदाहरणों की संख्या है।
  • Yi उदाहरण का जमीनी सच लेबल असाइनमेंट है ..ith
  • xi है उदाहरण।ith
  • h(xi) उदाहरण के लिए अनुमानित लेबल है ।ith

उदाहरण आधारित

मैट्रिक्स की गणना प्रति डेटा पॉइंट तरीके से की जाती है। प्रत्येक अनुमानित लेबल के लिए इसके केवल स्कोर की गणना की जाती है, और फिर इन अंकों को सभी डेटा पॉइंट्स पर एकत्र किया जाता है।

  • परिशुद्धता = , भविष्यवाणी का कितना सही है इसका अनुपात। अंशकारक को पता चलता है कि अनुमानित सदिश में कितने लेबल जमीनी सच्चाई के साथ सामान्य हैं, और अनुपात गणना करता है, कि कितने अनुमानित वास्तविक लेबल वास्तव में जमीनी सच्चाई में हैं।1ni=1n|Yih(xi)||h(xi)|
  • याद करें = , वास्तविक लेबल कितने थे, इसका अनुपात। अंशवाहक को पता चलता है कि अनुमानित सदिश में कितने लेबल जमीनी सच्चाई (ऊपर की तरह) के साथ आम हैं, फिर वास्तविक लेबल की संख्या के अनुपात का पता लगाता है, इसलिए वास्तविक लेबल के किस अंश की भविष्यवाणी की गई थी।1ni=1n|Yih(xi)||Yi|

अन्य मेट्रिक्स भी हैं।

लेबल आधारित है

यहां चीजें लेबल-वार की जाती हैं। प्रत्येक लेबल के लिए मेट्रिक्स (उदा। सटीक, रिकॉल) की गणना की जाती है और फिर इन लेबल-वार मैट्रिक्स को एकत्र किया जाता है। इसलिए, इस मामले में आप पूरे डेटासेट पर प्रत्येक लेबल के लिए परिशुद्धता / रिकॉल की गणना करते हैं, जैसा कि आप एक द्विआधारी वर्गीकरण के लिए करते हैं (जैसा कि प्रत्येक लेबल में एक द्विआधारी असाइनमेंट है), फिर इसे समग्र करें।

इसका आसान तरीका सामान्य रूप प्रस्तुत करना है।

यह मानक मल्टी-क्लास समकक्ष का एक विस्तार है।

  • मैक्रो औसतन1qj=1qB(TPj,FPj,TNj,FNj)

  • माइक्रोB(j=1qTPj,j=1qFPj,j=1qTNj,j=1qFNj)

यहाँ क्रमशः केवल लेबल के लिए सही सकारात्मक, गलत सकारात्मक, वास्तविक नकारात्मक और गलत नकारात्मक गणना हैं ।TPj,FPj,TNj,FNjjth

यहां किसी भी भ्रम-मैट्रिक्स-आधारित मीट्रिक के लिए खड़ा है। अपने मामले में आप मानक परिशुद्धता में प्लग करेंगे और सूत्रों को याद करेंगे। मैक्रो औसत के लिए आप प्रति लेबल काउंट में पास होते हैं और फिर माइक्रो एवरेज के लिए, आप पहले काउंट को औसत करते हैं, फिर अपने मीट्रिक फ़ंक्शन को लागू करते हैं।B

आपको यहां मल्टी-लेबल मेट्रिक्स के लिए कोड पर एक नज़र रखने की दिलचस्पी हो सकती है , जो आर में पैकेज के एक भाग mldr है । इसके अलावा आप जावा मल्टी-लेबल लाइब्रेरी मुलान में देखने के लिए इच्छुक हो सकते हैं ।

विभिन्न मैट्रिक्स में आने के लिए यह एक अच्छा पेपर है: मल्टी-लेबल लर्निंग एल्गोरिदम पर एक समीक्षा


अच्छा होता अगर आप मेट्रिक की प्रामाणिकता के बारे में संदर्भ दे सकते थे जो आपने कुछ विकिपीडिया संदर्भों की तरह लिखा है। आपके द्वारा उल्लिखित संदर्भ मेट्रिक्स या शोध पत्र का कोडिंग भाग हैं ..
hacker315

2
एक समीक्षा पत्र पहले से ही उत्तर के अंत में जुड़ा हुआ है (ए-रिव्यू ऑन मल्टी-लेबल लर्निंग एल्गोरिदम) ieeexplore.ieee.org/document/6471714 । ये साहित्य में अच्छी तरह से ज्ञात मीट्रिक हैं जिनके आधार पर कार्यान्वयन किया जाता है। मुझे यकीन नहीं है कि मैं प्रामाणिकता कैसे प्रदर्शित कर सकता हूं।
फॉक्सिस

8

मैं मल्टी-लेबल भाग के बारे में नहीं जानता, लेकिन म्यूटली-क्लास वर्गीकरण के लिए वे लिंक आपकी मदद करेंगे

यह लिंक बताता है कि भ्रम की मैट्रिक्स का निर्माण कैसे करें जिसका उपयोग आप प्रत्येक श्रेणी के लिए सटीक और याद करने के लिए कर सकते हैं

और यह लिंक बताता है कि समग्र रूप से वर्गीकरण का मूल्यांकन करने के लिए माइक्रो-एफ 1 और मैक्रो-एफ 1 उपायों की गणना कैसे करें।

आशा है कि आपको वह उपयोगी लगा।


4
मुख्य बिंदु यह है: इन मैट्रिक्स की गणना करने के लिए कई संभावित वैध तरीके हैं (उदाहरण के लिए, माइक्रो-एफ 1 बनाम मैक्रो-एफ 1) क्योंकि सही क्या है इसे परिभाषित करने के कई तरीके हैं। यह आपके आवेदन और वैधता मानदंडों पर निर्भर करता है।
जैक टान्नर

अहमद: लिंक के लिए धन्यवाद! @JackTanner क्या आपके पास इसके लिए (बहु-वर्ग मल्टी-लेबल वर्गीकरण के मामले के लिए) एक संदर्भ होगा?
वाम

1
@MaVe, क्षमा करें, कोई लिंक नहीं। यह सिर्फ व्यक्तिगत अनुभव से है। आप अपने उद्देश्यों के लिए एक सकारात्मक और झूठे सकारात्मक गठन के बारे में सोचकर बस वहां पहुंचेंगे।
जैक टान्नर

4
पहले लिंक की मृत्यु हो गई
निकाना रेक्लाविक्स

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 * एवीजी (पी) * एवीजी (आर) / एवीजी (पी) + एवीजी (आर)


0

की जाँच करें हार्वर्ड में cs205.org से ये स्लाइड । एक बार जब आप त्रुटि माप पर अनुभाग में आते हैं, तो बहु-स्तरीय सेटिंग्स (जैसे, एक-बनाम-सभी या एक-बनाम-एक) और भ्रम की स्थिति में सटीक और याद करने की चर्चा होती है। भ्रम की परिपक्वता वही है जो आप वास्तव में यहाँ चाहते हैं।

FYI करें, पायथन सॉफ्टवेयर पैकेज scikits.learn में , मल्टी-क्लास डेटा पर प्रशिक्षित क्लासिफायर से भ्रम मैट्रिक्स जैसी चीजों को स्वचालित रूप से गणना करने के लिए अंतर्निहित तरीके हैं। यह संभवतः आपके लिए भी सटीक-रिकॉल प्लॉट की गणना कर सकता है। देखने लायक।


4
दुर्भाग्य से स्लाइड्स का लिंक मृत है और मुझे स्लाइड्स कहीं और मिल सकती हैं।
f3lix

जब वे इस साल के पाठ्यक्रम में उस व्याख्यान के लिए मिलेंगे तो इसकी भरपाई करेंगे। यदि मैं पीडीएफ को एक स्थायी लिंक स्थान पर कॉपी कर सकता हूं, तो मैं करूंगा, लेकिन मैं नहीं कर सकता, इसलिए यह समय-समय पर टूटना अपरिहार्य है और नोट्स खोजने के लिए कोई अन्य स्थान नहीं होगा, वे उस पाठ्यक्रम के लिए विशिष्ट हैं।
ईली

स्केलेर भ्रम मैट्रिक्स के लिए मल्टी-लेबल का समर्थन नहीं करता है github.com/scikit-learn/scikit-learn/issues/3452
फ्रेंक डेर्नोनकोर्ट

0

ओजगुर एट अल (2005) से यह देखना संभव है कि आपको सामान्य भावों के बाद प्रेसिजन और रिकॉल की गणना करनी चाहिए, लेकिन अपने डेटासेट में कुल एन उदाहरणों के औसत के बजाय, आपको एन = [इंस्टेंस का उपयोग कम से कम एक लेबल के साथ करना चाहिए। कक्षा में विचाराधीन]।

यहाँ उल्लेख किया गया संदर्भ है: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf


0

ठीक उसी तरह जिस तरह से आप इसे सामान्य स्थिति में सेट के साथ करेंगे:

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']))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.