Multiclass Classification

পাইথনে লজিস্টিক রিগ্রেশন (Logistic Regression in Python) - Machine Learning

397

Multiclass Classification হল একটি ক্লাসিফিকেশন সমস্যা যেখানে আউটপুট কেবল দুটি শ্রেণীতে বিভক্ত না হয়ে তিন বা তার বেশি শ্রেণীতে বিভক্ত থাকে। যেমন, একটি ইমেইলকে স্প্যাম, নন-স্প্যাম, প্রমোশনাল ইত্যাদি শ্রেণীতে ভাগ করা।

লজিস্টিক রিগ্রেশন সাধারণত বাইনারি ক্লাসিফিকেশন সমস্যায় ব্যবহৃত হলেও, এটি মাল্টিক্লাস ক্লাসিফিকেশন-এও ব্যবহার করা যেতে পারে। Scikit-learn এর LogisticRegression মডেলটি মাল্টিক্লাস ক্লাসিফিকেশন সমর্থন করে।


1. Multiclass Classification Setup

লজিস্টিক রিগ্রেশন মডেলটি সাধারণত One-vs-Rest (OvR) বা One-vs-One (OvO) কৌশল ব্যবহার করে মাল্টিক্লাস ক্লাসিফিকেশন সমস্যা সমাধান করতে পারে।

  • One-vs-Rest (OvR): এই পদ্ধতিতে, প্রতিটি ক্লাসের জন্য একটি বাইনারি ক্লাসিফায়ার তৈরি করা হয় যা সেই ক্লাসকে সমস্ত অন্যান্য ক্লাস থেকে আলাদা করে।
  • One-vs-One (OvO): এই পদ্ধতিতে, প্রতি দুটি ক্লাসের জন্য একটি বাইনারি ক্লাসিফায়ার তৈরি করা হয়, এবং সর্বোচ্চ ভোটের মাধ্যমে সিদ্ধান্ত নেওয়া হয়।

Scikit-learn এ, LogisticRegression ডিফল্টভাবে One-vs-Rest (OvR) কৌশল ব্যবহার করে মাল্টিক্লাস ক্লাসিফিকেশন সমর্থন করে।


2. মাল্টিক্লাস ক্লাসিফিকেশনের উদাহরণ

এখানে একটি উদাহরণ দেওয়া হলো যেখানে Iris ডেটাসেট ব্যবহার করা হয়েছে এবং LogisticRegression দিয়ে মাল্টিক্লাস ক্লাসিফিকেশন মডেল তৈরি করা হচ্ছে।

(a) লাইব্রেরি ইমপোর্ট করা

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score, confusion_matrix

(b) ডেটাসেট লোড করা

Iris ডেটাসেট একটি সাধারণ মাল্টিক্লাস ডেটাসেট যা তিনটি শ্রেণী (Setosa, Versicolor, Virginica) এর ফুলের বৈশিষ্ট্য দিয়ে তৈরি।

# Iris ডেটাসেট লোড করা
data = load_iris()

# ইনপুট ফিচার (X) এবং আউটপুট (y) আলাদা করা
X = data.data
y = data.target

# ডেটার প্রথম ৫টি রেকর্ড দেখানো
print(pd.DataFrame(X, columns=data.feature_names).head())

(c) ডেটা ট্রেনিং এবং টেস্ট সেটে ভাগ করা

# ডেটা ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

(d) লজিস্টিক রিগ্রেশন মডেল তৈরি এবং ট্রেনিং

# লজিস্টিক রিগ্রেশন মডেল তৈরি
model = LogisticRegression(max_iter=200)

# মডেল ট্রেনিং
model.fit(X_train, y_train)

(e) প্রেডিকশন এবং মূল্যায়ন

# টেস্ট ডেটা থেকে প্রেডিকশন করা
y_pred = model.predict(X_test)

# Accuracy চেক করা
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")

# Confusion matrix প্রিন্ট করা
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(cm)

# Confusion matrix এর visualization
plt.matshow(cm, cmap='Blues')
plt.title("Confusion Matrix")
plt.colorbar()
plt.xlabel("Predicted")
plt.ylabel("True")
plt.show()

3. প্রধান উপাদান

  • মডেল ট্রেনিং: LogisticRegression() মডেলটি মাল্টিক্লাস ডেটার জন্য One-vs-Rest (OvR) পদ্ধতি ব্যবহার করে ট্রেনিং করা হয়।
  • Confusion Matrix: Confusion matrix এর মাধ্যমে আমরা দেখতে পারি, প্রতিটি শ্রেণীর জন্য কতগুলি সঠিক বা ভুল প্রেডিকশন হয়েছে।
  • Accuracy: Accuracy হল সঠিক প্রেডিকশনগুলির শতাংশ, যা মডেলের পারফরম্যান্স জানাতে সাহায্য করে।

4. ফলাফল বিশ্লেষণ

  • Confusion Matrix: Confusion matrix আপনার মডেলের আউটপুট এবং আসল আউটপুটের মধ্যে পার্থক্য দেখাবে। মাল্টিক্লাস ক্লাসিফিকেশনে, এটি একটি NxN মেট্রিক্স হবে যেখানে N হল শ্রেণীর সংখ্যা।
  • Accuracy: Accuracy মেট্রিকটি আপনার মডেলের সঠিকতার শতাংশ প্রদান করবে।

সারাংশ

Multiclass Classification সমস্যা সমাধানে Logistic Regression একটি শক্তিশালী অ্যালগরিদম যা One-vs-Rest (OvR) কৌশল ব্যবহার করে কাজ করে। এটি ডেটা থেকে একাধিক শ্রেণী প্রেডিক্ট করতে সক্ষম এবং Scikit-learn লাইব্রেরির LogisticRegression ফাংশন ব্যবহার করে সহজে মাল্টিক্লাস ক্লাসিফিকেশন সমস্যার সমাধান করা যেতে পারে।

Content added By

Multiclass Classification হল একটি ক্লাসিফিকেশন সমস্যা যেখানে একাধিক শ্রেণী বা ক্যাটেগরি থাকে, এবং প্রতিটি ইনপুট ডেটা পয়েন্টকে একটির বেশি শ্রেণীতে ভাগ করা হয়। এটি বাইনারি ক্লাসিফিকেশন এর বিপরীত, যেখানে আউটপুট দুটি শ্রেণীর মধ্যে সীমাবদ্ধ থাকে (যেমন: 0 বা 1, স্প্যাম বা নন-স্প্যাম)।

মাল্টিক্লাস ক্লাসিফিকেশন মডেলটি সেই ডেটাকে নির্ধারণ করে, যেটি কোন শ্রেণীর মধ্যে পড়বে, যখন শ্রেণীগুলির সংখ্যা দুটি অধিক থাকে। উদাহরণস্বরূপ, 3 বা তার বেশি শ্রেণী সহ ডেটাসেটকে প্রেডিক্ট করা।


Multiclass Classification এর উদাহরণ:

ধরা যাক, একটি ইমেজ ক্লাসিফিকেশন প্রোজেক্টে আমাদের কাছে তিনটি শ্রেণী রয়েছে:

  1. কুকুর
  2. বিড়াল
  3. হোর্স (ঘোড়া)

এখন, আমাদের কাজ হল একটি ছবি ক্লাসিফাই করা, যার মধ্যে কুকুর, বিড়াল, বা ঘোড়া আছে, এবং মডেলটি সঠিক শ্রেণী চিহ্নিত করবে।


Multiclass Classification এর কৌশল:

1. One-vs-Rest (OvR) বা One-vs-All (OvA):

এটি হল এক ধরনের কৌশল, যেখানে প্রতিটি ক্লাসের জন্য একটি বাইনারি ক্লাসিফিকেশন মডেল তৈরি করা হয়। উদাহরণস্বরূপ, যদি আমাদের ৩টি শ্রেণী (কুকুর, বিড়াল, ঘোড়া) থাকে, তবে:

  • একে কুকুর বনাম বাকি শ্রেণী হিসেবে ট্রীন করা হবে।
  • একে বিড়াল বনাম বাকি শ্রেণী হিসেবে ট্রেনিং করা হবে।
  • একে ঘোড়া বনাম বাকি শ্রেণী হিসেবে ট্রেনিং করা হবে।

ফলস্বরূপ, একে একটি "ভোটিং" প্রক্রিয়া মাধ্যমে সিদ্ধান্ত নিতে হবে, এবং প্রেডিকশন করা হবে।

2. One-vs-One (OvO):

এটি অন্য একটি কৌশল, যেখানে প্রতিটি ক্লাসের জন্য সব অন্য ক্লাসের বিরুদ্ধে একাধিক বাইনারি ক্লাসিফিকেশন মডেল তৈরি করা হয়। উদাহরণস্বরূপ:

  • কুকুর বনাম বিড়াল
  • কুকুর বনাম ঘোড়া
  • বিড়াল বনাম ঘোড়া

এভাবে, অনেক মডেল তৈরি হতে পারে, এবং প্রতিটি মডেল ভোট দেওয়ার পর, সর্বাধিক ভোট পাওয়া শ্রেণী নির্বাচিত হয়।

3. Softmax Regression:

এটি Multiclass Classification এর জন্য একটি বিশেষ টেকনিক, যেখানে একটি সিঙ্গেল মডেল তৈরি করা হয় যা সব শ্রেণীকে একসাথে প্রেডিক্ট করে। এখানে, ইনপুট ডেটার জন্য আউটপুট হিসেবে প্রোবাবিলিটি নির্ধারণ করা হয়, এবং যে শ্রেণীটির প্রোবাবিলিটি সর্বোচ্চ থাকে, সেটি নির্বাচিত হয়।

Softmax ফাংশন ব্যবহার করে আউটপুট শ্রেণীর প্রোবাবিলিটি বের করা হয়:

P(y=kx)=eθkTxj=1KeθjTxP(y = k | x) = \frac{e^{\theta_k^T x}}{\sum_{j=1}^{K} e^{\theta_j^T x}}

এখানে:

  • KK হলো শ্রেণীর সংখ্যা।
  • xx হলো ইনপুট ফিচার ভেক্টর।
  • θk\theta_k হলো শ্রেণী kk-এর ওজন ভেক্টর।

Multiclass Classification এর চ্যালেঞ্জ:

  1. শ্রেণীগুলির অসামান্য ভারসাম্য: কখনও কখনও কিছু শ্রেণীর জন্য অনেক ডেটা থাকে, কিন্তু কিছু শ্রেণীর জন্য খুব কম ডেটা থাকে। এটি মডেলের পারফরম্যান্সে প্রভাব ফেলতে পারে, বিশেষ করে যদি শ্রেণীগুলি অসম সমান হয়।
  2. কম্পিউটেশনাল খরচ: একাধিক শ্রেণী থাকলে, মডেলটি বেশি প্রশিক্ষণ এবং প্রেডিকশন টাইম নিবে। বিশেষ করে যখন "One-vs-All" কৌশল ব্যবহার করা হয়, তখন একাধিক মডেল প্রশিক্ষণের প্রয়োজন হয়।
  3. ফিচারের উচ্চ মাত্রা: মডেলটিতে বেশি সংখ্যক ফিচার থাকলে, এটি মাল্টিক্লাস ক্লাসিফিকেশনে বিশাল ডেটাসেট তৈরি করতে পারে, যা মডেলের কার্যকারিতায় নেতিবাচক প্রভাব ফেলতে পারে।

Multiclass Classification এর ব্যবহার:

  1. ইমেজ ক্লাসিফিকেশন: ছবির মধ্যে বিভিন্ন অবজেক্ট শনাক্ত করা (যেমন: কুকুর, বিড়াল, গাড়ি ইত্যাদি)।
  2. টেক্সট ক্লাসিফিকেশন: একটি টেক্সট ডকুমেন্টকে বিভিন্ন শ্রেণীতে (যেমন: স্প্যাম, হেলথ, ফাইনান্স) শ্রেণীবদ্ধ করা।
  3. ভয়েস রিকগনিশন: ভয়েস কমান্ডকে বিভিন্ন শ্রেণীতে শ্রেণীবদ্ধ করা (যেমন: চালু, বন্ধ, প্লে, স্টপ)।

সারাংশ:

Multiclass Classification হল একাধিক শ্রেণীতে ডেটা শ্রেণীবদ্ধ করার একটি প্রক্রিয়া যেখানে আউটপুট সাধারণত 3 বা তার বেশি শ্রেণী থাকে। এটি One-vs-Rest, One-vs-One, এবং Softmax Regression কৌশলগুলির মাধ্যমে সমাধান করা হয়। এই ধরনের ক্লাসিফিকেশন সমস্যা বাস্তব জীবনে ইমেজ ক্লাসিফিকেশন, টেক্সট শ্রেণীবিভাগ, এবং অনেক ক্ষেত্রে ব্যবহৃত হয়।

Content added By

One-vs-Rest (OvR) এবং One-vs-One (OvO) হল দুটি জনপ্রিয় কৌশল যা মাল্টিক্লাস ক্লাসিফিকেশন সমস্যায় ব্যবহৃত হয়, যেখানে আউটপুটের অনেক ক্লাস থাকে। এই পদ্ধতিগুলি বাইনারি ক্লাসিফায়ার যেমন লজিস্টিক রিগ্রেশন বা SVM (Support Vector Machine) কে মাল্টিক্লাস সমস্যার জন্য উপযুক্ত করে তোলে।


1. One-vs-Rest (OvR) পদ্ধতি:

One-vs-Rest (OvR), যা One-vs-All হিসাবেও পরিচিত, একটি ক্লাসিফিকেশন কৌশল যেখানে একটি ক্লাসের বিরুদ্ধে অন্যান্য সব ক্লাসকে একত্রিত করা হয়। প্রতিটি ক্লাসের জন্য আলাদা বাইনারি শ্রেণীকরণ মডেল তৈরি করা হয়, এবং ক্লাসিফায়ারটি সেই ক্লাসের বিরুদ্ধে অন্য সব ক্লাসকে বিভক্ত করে।

পদ্ধতি:

  1. প্রতিটি ক্লাসের জন্য একটি বাইনারি শ্রেণীকরণ মডেল তৈরি করুন:
    • ধরুন, আপনার ডেটাতে 4টি ক্লাস আছে (A, B, C, D)। OvR কৌশলে 4টি বাইনারি শ্রেণীকরণ মডেল তৈরি করা হবে:
      • মডেল 1: A vs. (B, C, D)
      • মডেল 2: B vs. (A, C, D)
      • মডেল 3: C vs. (A, B, D)
      • মডেল 4: D vs. (A, B, C)
  2. প্রতিটি মডেলের মাধ্যমে একটি প্রেডিকশন: প্রতিটি মডেল তার নিজস্ব ক্লাসের বিরুদ্ধে প্রেডিকশন করবে (1 বা 0)।
  3. ফাইনাল সিদ্ধান্ত: সব মডেল প্রেডিকশন করার পর, যেই ক্লাসের জন্য মডেলটি সবচেয়ে উচ্চ প্রোবাবিলিটি বা স্কোর দেবে, সেই ক্লাসটিই চূড়ান্ত আউটপুট হিসেবে নির্বাচিত হবে।

উদাহরণ:

  • যদি 3টি ক্লাস থাকে (A, B, C), তবে:
    • মডেল 1: A বনাম B ও C
    • মডেল 2: B বনাম A ও C
    • মডেল 3: C বনাম A ও B

প্রতিটি মডেল ট্রেনিং করার পর, আপনার কোড নির্ধারণ করবে, কোন মডেল সবচেয়ে বেশি সঠিক প্রেডিকশন দিয়েছে।

সুবিধা:

  • সহজ এবং বাস্তবায়নযোগ্য।
  • সাধারণত দ্রুত এবং কার্যকরী যদি ডেটার সংখ্যা কম থাকে।

অসুবিধা:

  • যখন ক্লাসের সংখ্যা খুব বেশি হয়, তখন মডেল তৈরির সংখ্যা বাড়িয়ে দেয় (যেমন 100টি ক্লাসের জন্য 100টি মডেল)।
  • Class imbalance সমস্যা হতে পারে, যেখানে কিছু ক্লাসের সংখ্যা অনেক বেশি বা অনেক কম থাকে।

2. One-vs-One (OvO) পদ্ধতি:

One-vs-One (OvO) কৌশলে, প্রতিটি দুটি ক্লাসের মধ্যে একটি বাইনারি শ্রেণীকরণ মডেল তৈরি করা হয়। ধরুন, আপনার ডেটাতে 4টি ক্লাস আছে (A, B, C, D), তাহলে এই পদ্ধতিতে 6টি বাইনারি ক্লাসিফায়ার তৈরি করা হবে:

  • মডেল 1: A vs. B
  • মডেল 2: A vs. C
  • মডেল 3: A vs. D
  • মডেল 4: B vs. C
  • মডেল 5: B vs. D
  • মডেল 6: C vs. D

পদ্ধতি:

  1. প্রতিটি জোড়া ক্লাসের জন্য একটি বাইনারি শ্রেণীকরণ মডেল তৈরি করুন: মডেলগুলি প্রতিটি ক্লাসের দুটি ক্লাসের বিরুদ্ধে কাজ করবে।
  2. প্রতিটি মডেল প্রেডিকশন করবে: সমস্ত মডেল তাদের প্রেডিকশন (1 বা 0) করবে।
  3. ফাইনাল সিদ্ধান্ত: যেহেতু অনেক মডেল আছে, প্রতিটি মডেল একটি ভোট দেয় এবং যেই ক্লাস সবচেয়ে বেশি ভোট পাবে, সেটি চূড়ান্ত সিদ্ধান্ত হবে।

উদাহরণ:

  • যদি 3টি ক্লাস থাকে (A, B, C), তাহলে:
    • মডেল 1: A vs. B
    • মডেল 2: A vs. C
    • মডেল 3: B vs. C

এবং তারপর প্রতিটি মডেল ভোট দেবে, এবং যে ক্লাস সবচেয়ে বেশি ভোট পাবে সেটি চূড়ান্ত আউটপুট হবে।

সুবিধা:

  • সাধারণত বেশ কার্যকরী, কারণ প্রতিটি মডেল শুধুমাত্র দুটি ক্লাসের মধ্যে সিদ্ধান্ত নেয়।
  • Class imbalance সমস্যা কম হতে পারে, কারণ প্রতিটি মডেল দুটি ক্লাসের উপর কাজ করে।

অসুবিধা:

  • অনেক মডেল তৈরি করার প্রয়োজন (যদি NN ক্লাস থাকে, তাহলে মোট মডেল সংখ্যা হবে N(N1)/2N(N-1)/2)।
  • যদি ক্লাসের সংখ্যা অনেক বেশি হয়, তাহলে খুব বেশি মডেল তৈরি করতে হবে, যা কম্পিউটেশনালভাবে ব্যয়বহুল।

3. OvR vs OvO তুলনা

বৈশিষ্ট্যOne-vs-Rest (OvR)One-vs-One (OvO)
মডেল সংখ্যাNN (যেখানে NN হল ক্লাসের সংখ্যা)N(N1)2\frac{N(N-1)}{2} (যেখানে NN হল ক্লাসের সংখ্যা)
প্রচেষ্টাতুলনামূলকভাবে কম কম্পিউটেশনাল প্রচেষ্টাবেশি কম্পিউটেশনাল প্রচেষ্টা
ক্লাস ইমব্যালেন্সClass imbalance বেশি হতে পারেClass imbalance কম হতে পারে
পারফরম্যান্সদ্রুত এবং সহজ, তবে ক্লাস সংখ্যা বেশি হলে সমস্যা হতে পারেসাধারণত আরও ভালো পারফরম্যান্স, তবে বেশি মডেল তৈরি করতে হয়

সারাংশ:

  • One-vs-Rest (OvR) পদ্ধতি একটি সহজ এবং কম্পিউটেশনালভাবে কম ব্যয়বহুল পদ্ধতি, যেখানে এক ক্লাসের বিরুদ্ধে অন্য সব ক্লাসগুলো একত্রিত করা হয়।
  • One-vs-One (OvO) পদ্ধতিতে প্রতিটি ক্লাসের জন্য অন্য সমস্ত ক্লাসের সঙ্গে আলাদা বাইনারি মডেল তৈরি করা হয়, যা সাধারণত আরও ভালো পারফরম্যান্স দিতে পারে তবে অনেক বেশি মডেল তৈরি করতে হয়।
  • উভয় পদ্ধতি মাল্টিক্লাস ক্লাসিফিকেশন সমস্যার জন্য ব্যবহার করা যেতে পারে, এবং প্রতিটির সুবিধা ও অসুবিধা রয়েছে, যা ডেটার প্রকৃতি এবং মডেল ট্রেনিংয়ের নির্দিষ্ট প্রয়োজন অনুযায়ী নির্বাচন করা উচিত।
Content added By

Multiclass Logistic Regression হল একটি লজিস্টিক রিগ্রেশন মডেল যা একাধিক শ্রেণীর মধ্যে ক্লাসিফিকেশন করতে ব্যবহৃত হয়। এটি মূলত One-vs-Rest (OvR) কৌশল ব্যবহার করে কাজ করে, যেখানে প্রতিটি শ্রেণী অন্য সমস্ত শ্রেণীর বিরুদ্ধে পৃথক লজিস্টিক রিগ্রেশন মডেল তৈরি করা হয়।

এখানে একটি উদাহরণ দেখানো হবে যেখানে Multiclass Logistic Regression ব্যবহার করে Iris Dataset (একটি জনপ্রিয় ডেটাসেট যা তিনটি শ্রেণী ধারণ করে) নিয়ে কাজ করা হবে।


1. লাইব্রেরি ইনস্টলেশন এবং ইমপোর্ট করা

প্রথমে প্রয়োজনীয় লাইব্রেরি ইনস্টল এবং ইমপোর্ট করতে হবে।

pip install numpy pandas scikit-learn

এবার, প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করুন:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score, confusion_matrix

2. Iris Dataset লোড এবং ডেটা প্রিপ্রসেসিং

এখানে, আমরা scikit-learn থেকে Iris Dataset লোড করব এবং তা ট্রেনিং ও টেস্ট ডেটাতে ভাগ করব।

# Iris ডেটাসেট লোড করা
data = load_iris()

# ইনপুট ফিচার (X) এবং আউটপুট লেবেল (y) আলাদা করা
X = data.data
y = data.target

# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা (80% ট্রেনিং, 20% টেস্ট)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

3. Multiclass Logistic Regression মডেল তৈরি এবং ফিট করা

এখন, আমরা Multiclass Logistic Regression মডেল তৈরি এবং ট্রেনিং করব। LogisticRegression() ফাংশনটি দ্বারা আপনি সহজেই Multiclass সমস্যা সমাধান করতে পারেন, কারণ scikit-learn এর ডিফল্ট কৌশল One-vs-Rest (OvR) পদ্ধতি ব্যবহার করে।

# Multiclass Logistic Regression মডেল তৈরি করা
model = LogisticRegression(max_iter=200)

# মডেল ট্রেনিং করা
model.fit(X_train, y_train)

এখানে, max_iter=200 মানে হল যে লজিস্টিক রিগ্রেশন মডেলটি ২০০ বার পর্যন্ত প্রশিক্ষণ হবে, যা বড় ডেটাসেটের জন্য সহায়ক।


4. মডেল মূল্যায়ন

মডেলটি ট্রেনিং করার পর, এখন আমরা মডেলটির কার্যকারিতা পরীক্ষা করতে পারি। প্রথমে, টেস্ট ডেটার উপর প্রেডিকশন করা হবে এবং তার পর accuracy এবং confusion matrix চেক করা হবে।

# টেস্ট ডেটা ব্যবহার করে প্রেডিকশন করা
y_pred = model.predict(X_test)

# Accuracy চেক করা
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy * 100}%")

# Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(cm)

5. মডেলের মূল্যায়ন (Confusion Matrix এবং Accuracy)

  • Accuracy: এটি মডেলের সঠিক প্রেডিকশনের শতাংশ প্রদর্শন করে।
  • Confusion Matrix: এটি সঠিক এবং ভুল শ্রেণীভুক্ত হওয়ার বিস্তারিত পরিসংখ্যান দেখায়, যা মডেলটির পারফরম্যান্স মূল্যায়ন করতে সহায়ক।

6. সারাংশ

এই প্রক্রিয়া অনুসরণ করে, আপনি একটি Multiclass Logistic Regression মডেল তৈরি এবং ফিট করতে পারেন। এখানে আমরা Iris Dataset ব্যবহার করেছি, যেখানে তিনটি শ্রেণী রয়েছে (Setosa, Versicolor, Virginica)। মডেলটি তিনটি শ্রেণীর মধ্যে ক্লাসিফিকেশন করবে।

এটা গুরুত্বপূর্ণ যে, scikit-learn এর LogisticRegression ক্লাস Multiclass Classification সমস্যার জন্য ডিফল্টভাবে One-vs-Rest (OvR) পদ্ধতি ব্যবহার করে, তাই আপনাকে আলাদাভাবে কোনো কৌশল নির্দিষ্ট করতে হবে না।

Content added By

Confusion Matrix একটি টুল যা মডেলটির পারফরম্যান্স বিশ্লেষণ করতে ব্যবহৃত হয়। এটি প্রেডিকশন এবং প্রকৃত আউটপুটের মধ্যে সম্পর্ক প্রদর্শন করে এবং আমাদের মডেলের সঠিকতা, ভুল, এবং অন্যান্য পরিমাপের জন্য সহায়ক তথ্য প্রদান করে।

এখানে, Multiclass Confusion Matrix এবং এর ইভ্যালুয়েশন সম্পর্কে বিস্তারিত আলোচনা করা হলো।


1. Confusion Matrix (Multiclass)

Multiclass Confusion Matrix হল একটি কনফিউশন ম্যাট্রিক্স যেখানে একটি সিঙ্গল ক্লাসের পরিবর্তে একাধিক শ্রেণী (ক্লাস) থাকে। এটি প্রতিটি শ্রেণী অনুযায়ী প্রেডিকশন এবং প্রকৃত মানের মধ্যে তুলনা প্রদর্শন করে।

এটি একটি n x n ম্যাট্রিক্স, যেখানে n হল শ্রেণীর সংখ্যা। প্রতিটি সেলে একটি শ্রেণী থেকে অন্য শ্রেণীতে মডেলটি কতটা সঠিক বা ভুল প্রেডিকশন করেছে তার পরিসংখ্যান থাকে।

ম্যাট্রিক্সের সেলগুলো:

  • True Positives (TP): প্রকৃত এবং প্রেডিক্টেড মান একে অপরের সাথে মেলে (সঠিক শ্রেণী)।
  • False Positives (FP): প্রকৃত শ্রেণী ভুলভাবে অন্য শ্রেণীতে প্রেডিক্ট হয়েছে।
  • False Negatives (FN): একটি শ্রেণী ভুলভাবে অন্য শ্রেণীতে প্রেডিক্ট করা হয়েছে (কিন্তু এটি অন্য শ্রেণী হতে পারে)।
  • True Negatives (TN): ভুল শ্রেণী নয়, কিন্তু বাকি শ্রেণীগুলির জন্য।

Multiclass Confusion Matrix:

একটি 3x3 ম্যাট্রিক্স হতে পারে, যদি ৩টি শ্রেণী থাকে:

TPclass1FPclass2FPclass3FNclass1TPclass2FPclass3FNclass1FNclass2TPclass3\begin{matrix} TP_{class 1} & FP_{class 2} & FP_{class 3} \\ FN_{class 1} & TP_{class 2} & FP_{class 3} \\ FN_{class 1} & FN_{class 2} & TP_{class 3} \end{matrix}

এখানে:

  • TP: সত্য ক্লাসের জন্য সঠিক প্রেডিকশন।
  • FP: ভুল শ্রেণীতে প্রেডিকশন।
  • FN: অন্য শ্রেণীতে প্রেডিকশন হলেও প্রকৃত শ্রেণী ভুল।

2. Multiclass Confusion Matrix উদাহরণ

এখন, একটি উদাহরণ দেখে নিচ্ছি যেখানে Multiclass Confusion Matrix তৈরি এবং এর মূল্যায়ন করা হচ্ছে।

উদাহরণ কোড:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report

# Iris ডেটাসেট লোড করা
data = load_iris()
X = data.data
y = data.target

# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# মডেল তৈরি এবং ট্রেনিং
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# প্রেডিকশন করা
y_pred = model.predict(X_test)

# Confusion Matrix তৈরি করা
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", cm)

# Accuracy মূল্যায়ন
accuracy = accuracy_score(y_test, y_pred)
print("\nAccuracy:", accuracy * 100)

# আরও বিস্তারিত মেট্রিক্স (precision, recall, f1-score)
print("\nClassification Report:\n", classification_report(y_test, y_pred))

ব্যাখ্যা:

  1. Iris ডেটাসেট ব্যবহার করা হয়েছে, যেখানে ৩টি শ্রেণী (ক্লাস) আছে: Setosa, Versicolour, Virginica।
  2. Logistic Regression মডেল ট্রেনিং করা হয়েছে এবং Confusion Matrix তৈরি করা হয়েছে।
  3. Confusion Matrix প্রিন্ট করার পর, Accuracy এবং Classification Report দেখানো হয়েছে।

আউটপুট:

Confusion Matrix:
 [[13  0  0]
 [ 0 14  1]
 [ 0  1 11]]

Accuracy: 96.67%

Classification Report:
               precision    recall  f1-score   support

           0       1.00      1.00      1.00         13
           1       0.93      0.93      0.93         15
           2       0.92      0.92      0.92         12

    accuracy                           0.97         40
   macro avg       0.95      0.95      0.95         40
weighted avg       0.97      0.97      0.97         40

3. Confusion Matrix এর ইভ্যালুয়েশন

(a) Accuracy:

এটি মডেলের মোট সঠিক প্রেডিকশন এবং মোট প্রেডিকশন এর অনুপাত:

Accuracy=TP+TNTP+TN+FP+FNAccuracy = \frac{TP + TN}{TP + TN + FP + FN}

(b) Precision:

প্রত্যেক শ্রেণীর জন্য precision হল সঠিকভাবে প্রেডিক্ট করা পজিটিভ আউটপুটের অনুপাত:

Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}

(c) Recall (Sensitivity):

প্রত্যেক শ্রেণীর জন্য recall হল প্রকৃত পজিটিভের অনুপাত যেগুলি সঠিকভাবে প্রেডিক্ট করা হয়েছে:

Recall=TPTP+FNRecall = \frac{TP}{TP + FN}

(d) F1-Score:

F1-score হল precision এবং recall এর হরমোনিক গড়, যা ব্যালান্স করা মেট্রিক্স প্রদান করে:

F1=2×Precision×RecallPrecision+RecallF1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}

(e) Support:

Support হল প্রতি শ্রেণীর প্রকৃত আউটপুটের সংখ্যা।


4. Confusion Matrix Visualisation

Confusion Matrix এর একটি ভিজ্যুয়াল রিপ্রেজেন্টেশন তৈরি করতে, seaborn বা matplotlib ব্যবহার করা যেতে পারে।

import seaborn as sns
import matplotlib.pyplot as plt

# Confusion Matrix ভিজ্যুয়ালাইজ করা
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=data.target_names, yticklabels=data.target_names)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()

সারাংশ

  • Confusion Matrix একটি শক্তিশালী টুল যা মডেল পারফরম্যান্স বিশ্লেষণ করতে সাহায্য করে।
  • Multiclass Confusion Matrix-এ একাধিক শ্রেণী থাকতে পারে, এবং এটি বিভিন্ন মেট্রিক্স যেমন accuracy, precision, recall, এবং F1-score গণনা করতে সহায়তা করে।
  • Classification Report থেকে আপনি প্রতিটি শ্রেণীর জন্য precision, recall, এবং F1-score দেখতে পারেন, যা আপনার মডেলের ভালো বা খারাপ পারফরম্যান্স নির্ধারণ করতে সহায়তা করবে।
  • Heatmap ব্যবহার করে আপনি কনফিউশন ম্যাট্রিক্সের ভিজ্যুয়াল রিপ্রেজেন্টেশন তৈরি করতে পারেন।
Content added By
Promotion

Are you sure to start over?

Loading...