আমি কীভাবে স্কলারন কনফিউশন ম্যাট্রিক্সের ব্যাখ্যা করতে পারি


24

আমি আমার শ্রেণিবদ্ধের পারফরম্যান্স পরীক্ষা করতে কনফিউশন ম্যাট্রিক্স ব্যবহার করছি ।

আমি সাইকিট-লার্ন ব্যবহার করছি, আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি। আমি কীভাবে ফলাফলটি ব্যাখ্যা করতে পারি

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.wikedia.org/wiki/ কনফিউশন_ম্যাট্রিক্স । উইকিপিডিয়া পৃষ্ঠায় 3 * 3 উদাহরণের বিবরণটিতে ফোকাস করুন। এটি সম্ভবত আপনার বিভ্রান্তি যাই হোক না কেন সমাধান করবে।
ঝুবার্ব

একটি প্রাসঙ্গিক থ্রেড: stats.stackexchange.com/a/340079/121522
মনিকা

উত্তর:


47

বিভ্রান্তির ম্যাট্রিক্স হ'ল ভুল শংসাপত্রের সংখ্যা, যেমন, পূর্বাভাসীকৃত শ্রেণীর সংখ্যা যা সত্য শ্রেণীর উপর ভিত্তি করে একটি ভুল শ্রেণিবদ্ধকরণ বিনে শেষ হয়েছিল তা ট্যাবলেট করার একটি উপায়।

স্কলেয়ার.মেট্রিক্স.কনফিউশন_ম্যাট্রিক্স একটি সংখ্যার ম্যাট্রিক্স সরবরাহ করে, আমি নিম্নলিখিতটি ব্যবহার করে একটি 'প্রতিবেদন' উত্পন্ন করতে আরও দরকারী বলে মনে করি:

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 হিসাবে বিযুক্ত ছিল না, ইত্যাদি etc.
  3. উভয় y_trueএবং y_pred"সমস্ত" সাবটোটাল থেকে প্রতিটি শ্রেণীর জন্য মোট শ্রেণিবদ্ধকরণের সংখ্যা

এই পদ্ধতিটি পাঠ্য লেবেলগুলির জন্যও কাজ করে এবং ডেটাসেটে প্রচুর পরিমাণে নমুনার জন্য শতাংশের প্রতিবেদন সরবরাহ করা যায় to

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
কমপক্ষে প্যান্ডাস -১.০৩.১ হিসাবে প্রথম উদাহরণটি আর কাজ করে না। আমি সবেমাত্র AssertionError: arrays and names must have the same length
পান্ডাস -১.০6.০ এ

1
@ চিব্রাউন: পান্ডায় এমন কিছু পরিবর্তিত হয়েছে যা অ্যারে বা সিরিজ হতে বসতে হবে। আমি ব্যবহার করার জন্য উদাহরণ কোড আপডেট করেছি y_pred = pd.Series(...)। এটি এখন কাজ করা উচিত।
আচেন্নু

5

Y- অক্ষের বিভ্রান্তির ম্যাট্রিক্সের প্রকৃত মান রয়েছে এবং এক্স-অক্ষের উপরে ভবিষ্যদ্বাণীকের দেওয়া মানগুলি। অতএব, তির্যকের উপরের গণনাগুলি সঠিক পূর্বাভাসের সংখ্যা। এবং ত্রিভুজের উপাদানগুলি ভুল পূর্বাভাস।

তোমার ক্ষেত্রে:

>>> 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 হিসাবে 2" হিসাবে পূর্বাভাস দেওয়া হয়েছিল - যখন তির্যকটি 0 হয়), আমার কাছে 50K উপাদানটির একটি ম্যাট্রিক্স রয়েছে যা সমস্ত মানগুলি প্রজেক্ট করা সামান্য কঠিন। আমাকে সরাসরি এই ফলাফলগুলি দেওয়ার জন্য কোনও মেট্রিক আছে? (মানে আমি যদি ভাল বিভ্রান্তির ম্যাট্রিক্স পেয়েছি বা না)।
ব্যবহারকারী 3378649

1
আপনি তির্যকটিতে উপাদানগুলি দেখতে পারেন, সেগুলি আপনার সঠিক ভবিষ্যদ্বাণী, অফ-তির্যক উপাদানগুলি ভুল পূর্বাভাস। এটি একটি শুরু।
আকাওয়াল

আমি দুটি ভিন্ন ফলাফল পেয়েছি। লক্ষ্যবস্তুতে, আমাদের দুটি '0' বা '1' লেবেল রয়েছে, কীভাবে আপনি কীভাবে এই ফলাফলগুলিকে ব্যাখ্যা করতে পারেন তা বোঝাতে সহায়তা করতে পারেন। - বিভ্রান্তি_ম্যাট্রিক্স: [[0 85723] [0 77]] - বিভ্রান্তি_ম্যাট্রিক্স: [[85648 75] [75 2]]
ব্যবহারকারী 3378649

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
হে! আমি স্রেফ আকাওয়ালের উত্তর উল্লেখ করেছি। তিনি জড়িত চিন্তার কথা উল্লেখ করেছেন। আমি কেবল তার উত্তরটি ব্যাখ্যা করেছি, যা সঠিক হতে থাকে, সম্ভবত আরও ভাল উপায়ে।
প্রানজেল

@ প্রানজেল আপনি কি দয়া করে এত সুন্দর একটি পাঠ্য-ভিত্তিক টেবিল আঁকতে আপনার কোডটি ভাগ করবেন?
ফু ডিএল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.