मैं Sklearn भ्रम मैट्रिक्स की व्याख्या कैसे कर सकता हूं


24

मैं अपने क्लासिफायरियर के प्रदर्शन की जांच करने के लिए भ्रम मैट्रिक्स का उपयोग कर रहा हूं।

मैं Scikit-Learn का उपयोग कर रहा हूं, मैं थोड़ा भ्रमित हूं। मैं परिणाम की व्याख्या कैसे कर सकता हूं

from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]])

मैं कैसे निर्णय ले सकता हूं कि यह अनुमानित मूल्य अच्छा है या नहीं।


1
शुरू में स्केलेर के बारे में भूल जाओ, कि लाल रंग की हेरिंग है। आपकी गलतफहमी का स्रोत अधिक मौलिक लगता है। : यहाँ एक नज़र en.wikipedia.org/wiki/Confusion_matrix । विकिपीडिया पृष्ठ पर 3 * 3 उदाहरण के कथन पर ध्यान दें। जो कुछ भी आपकी उलझन है, वह सबसे अधिक संभावना है।
झूब्बार

एक प्रासंगिक सूत्र: आंकड़े.stackexchange.com/a/340079/121522
मोनिका

जवाबों:


47

भ्रम मैट्रिक्स गलतफहमी की संख्या, यानी अनुमानित कक्षाओं की संख्या को सारणीबद्ध करने का एक तरीका है, जो कि सही वर्गों के आधार पर गलत वर्गीकरण बिन में समाप्त हो गया है।

जबकि sklearn.metrics.confusion_matrix एक संख्यात्मक मैट्रिक्स प्रदान करता है, मुझे निम्नलिखित का उपयोग करके 'रिपोर्ट' उत्पन्न करना अधिक उपयोगी लगता है:

import pandas as pd
y_true = pd.Series([2, 0, 2, 2, 0, 1, 1, 2, 2, 0, 1, 2])
y_pred = pd.Series([0, 0, 2, 1, 0, 2, 1, 0, 2, 0, 2, 2])

pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted'], margins=True)

जिसके परिणामस्वरूप:

Predicted  0  1  2  All
True                   
0          3  0  0    3
1          0  1  2    3
2          2  1  3    6
All        5  2  5   12

यह हमें यह देखने की अनुमति देता है कि:

  1. विकर्ण तत्व प्रत्येक वर्ग के लिए सही वर्गीकरण की संख्या दिखाते हैं: वर्ग 0, 1 और 2 के लिए 3, 1 और 3।
  2. ऑफ-विकर्ण तत्व मिसकैरेज प्रदान करते हैं: उदाहरण के लिए, क्लास 2 के 2 को 0 के रूप में मिसकॉलिफाइड किया गया, क्लास 0 के किसी को भी मिसकॉलिफाइड नहीं किया गया जैसे 2, आदि।
  3. "सभी" उप-योगों से प्रत्येक वर्ग के लिए वर्गीकरण की कुल संख्या y_trueऔरy_pred

यह विधि पाठ लेबल के लिए भी काम करती है, और डेटासेट में बड़ी संख्या में नमूनों को प्रतिशत रिपोर्ट प्रदान करने के लिए बढ़ाया जा सकता है।

import numpy as np
import pandas as pd

# create some data
lookup = {0: 'biscuit', 1:'candy', 2:'chocolate', 3:'praline', 4:'cake', 5:'shortbread'}
y_true = pd.Series([lookup[_] for _ in np.random.random_integers(0, 5, size=100)])
y_pred = pd.Series([lookup[_] for _ in np.random.random_integers(0, 5, size=100)])

pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted']).apply(lambda r: 100.0 * r/r.sum())

फिर आउटपुट है:

Predicted     biscuit  cake      candy  chocolate    praline  shortbread
True                                                                    
biscuit     23.529412    10  23.076923  13.333333  15.384615    9.090909
cake        17.647059    20   0.000000  26.666667  15.384615   18.181818
candy       11.764706    20  23.076923  13.333333  23.076923   31.818182
chocolate   11.764706     5  15.384615   6.666667  15.384615   13.636364
praline     17.647059    10  30.769231  20.000000   0.000000   13.636364
shortbread  17.647059    35   7.692308  20.000000  30.769231   13.636364

जहाँ संख्याएँ अब वर्गीकृत किए गए परिणामों के प्रतिशत (मामलों की संख्या के बजाय) का प्रतिनिधित्व करती हैं।

हालांकि ध्यान दें, कि sklearn.metrics.confusion_matrixआउटपुट का उपयोग करके सीधे कल्पना की जा सकती है:

import matplotlib.pyplot as plt
conf = sklearn.metrics.confusion_matrix(y_true, y_pred)
plt.imshow(conf, cmap='binary', interpolation='None')
plt.show()

4
हमारी साइट पर आपका स्वागत है! मैं उस देखभाल और गुणवत्ता की सराहना करता हूं जो आपने अपने पहले उत्तर में यहां रखी है।
whuber

1
पहला उदाहरण अब काम नहीं करता है, कम से कम पांडा के रूप में 0.13.1। मैं अभी पांडा-0.16.0 में अपग्रेड हुआ, और अभी भी वही त्रुटि है:AssertionError: arrays and names must have the same length
chbrown

1
@chbrown: लगता है जैसे पांडा में कुछ बदल गया है, जिसे बैठने के लिए एक सरणी या एक श्रृंखला की आवश्यकता है। मैंने उपयोग करने के लिए उदाहरण कोड अपडेट किया है y_pred = pd.Series(...)। यह अब काम करना चाहिए।
achennu

5

Y- अक्ष भ्रम मैट्रिक्स में वास्तविक मान होते हैं, और x- अक्ष पर भविष्यवक्ता द्वारा दिए गए मान होते हैं। इसलिए, विकर्ण पर गिनती सही भविष्यवाणियों की संख्या है। और विकर्ण के तत्व गलत भविष्यवाणियां हैं।

आपके मामले में:

>>> confusion_matrix(y_true, y_pred)
    array([[2, 0, 0],  # two zeros were predicted as zeros
           [0, 0, 1],  # one 1 was predicted as 2
           [1, 0, 2]]) # two 2s were predicted as 2, and one 2 was 0

यह थोड़ा भ्रामक है (आपने कहा "# 1 को 2 के रूप में भविष्यवाणी की गई थी" - जबकि विकर्ण 0 है), मेरे पास 50K तत्व का एक मैट्रिक्स है जो सभी मानों को प्रोजेक्ट करने के लिए थोड़ा कठिन है। क्या मुझे सीधे इन परिणामों को देने के लिए कोई मीट्रिक है? (मेरा मतलब है कि अगर मुझे अच्छा भ्रम मैट्रिक्स हो रहा है या नहीं)।
user3378649

1
आप विकर्ण पर तत्वों को देख सकते हैं, वे आपकी सही भविष्यवाणियां हैं, ऑफ-विकर्ण तत्व गलत भविष्यवाणियां हैं। यह एक शुरुआत है।
अकवल

मुझे दो अलग-अलग परिणाम मिले। लक्ष्य में, हमारे पास दो लेबल '0' या '1' हैं, क्या आप उन परिणामों को रोकने के लिए एक संकेत देने में मदद कर सकते हैं। - कन्फ्यूजन_मेट्रिक्स: [[० usion५usion२३] [० conf -]] - कंफ्यूजन_मेट्रिक्स: [[[
५६४

1

मैं इसे समझने के लिए रेखांकन को निर्दिष्ट करना चाहूंगा। यह एक सरल मैट्रिक्स है जिसे निष्कर्ष पर पहुंचने से पहले अच्छी तरह से समझने की आवश्यकता है। तो यहाँ ऊपर के उत्तरों का एक सरल व्याख्यात्मक संस्करण है।

        0  1  2   <- Predicted
     0 [2, 0, 0]  
TRUE 1 [0, 0, 1]  
     2 [1, 0, 2] 

# At 0,0: True value was 0, Predicted value was 0, - 2 times predicted
# At 1,1: True value was 1, Predicted value was 1, - 0 times predicted
# At 2,2: True value was 2, Predicted value was 2, - 2 times predicted
# At 1,2: True value was 1, Predicted value was 2, - 1 time predicted
# At 2,0: True value was 2, Predicted value was 0, - 1 time predicted...
...Like that

4
क्या आप यह कहने के लिए इसे संपादित कर सकते हैं कि आपको कैसे लगता है कि यह पहले से दिए गए उत्तरों से परे है?
mdewey

1
अरे! मैंने सिर्फ अकवाल के जवाब का हवाला दिया है। उन्होंने इसमें शामिल सोच का उल्लेख किया है। मैंने बस उसका जवाब समझाया है, जो सही मायने में, बेहतर तरीके से सही है।
प्रांजल

@Pranzell क्या आप ऐसी सुंदर टेक्स्ट-आधारित तालिका बनाने के लिए अपना कोड साझा करेंगे?
फू डीएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.