Class Weights ব্যবহার করে Logistic Regression তৈরি

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

371

Class Weights হল একটি গুরুত্বপূর্ণ ধারণা যখন আপনি Imbalanced Classes বা অসামঞ্জস্যপূর্ণ শ্রেণী নিয়ে কাজ করছেন। যখন একটি শ্রেণী অন্য শ্রেণীর তুলনায় অনেক বেশি থাকে, তখন মডেলটি বেশি সংখ্যক শ্রেণীর দিকে পক্ষপাতিত্ব করতে পারে। এধরনের পরিস্থিতিতে, Class Weights ব্যবহার করা মডেলকে কম সংখ্যক শ্রেণীর উপর বেশি মনোযোগ দেওয়ার জন্য ওজন দেয়।

Scikit-learn এর LogisticRegression মডেলে class_weight প্যারামিটার ব্যবহার করে আপনি এটি নিয়ন্ত্রণ করতে পারেন। class_weight='balanced' দিলে এটি স্বয়ংক্রিয়ভাবে প্রতিটি ক্লাসের জন্য ওজন নির্ধারণ করে, যা ডেটার শ্রেণীর অনুপাত এর উপর ভিত্তি করে থাকে।


1. Class Weights এর প্রয়োজনীয়তা

যখন আপনার ডেটাতে একটি শ্রেণী অন্য শ্রেণীর তুলনায় বেশি হয়, তখন class weights ব্যবহার করে আপনি মডেলকে সেই কম সংখ্যক শ্রেণীর দিকে মনোযোগ দিতে সাহায্য করতে পারেন। উদাহরণস্বরূপ:

  • ধরুন, একটি ডেটাসেটে 80% ক্লাস A এবং 20% ক্লাস B রয়েছে। মডেলটি সম্ভবত ক্লাস A এর দিকে বেশি পক্ষপাতিত্ব করবে। কিন্তু class_weight ব্যবহার করলে এটি ক্লাস B এর জন্য বেশি গুরুত্ব দেবে।

2. class_weight প্যারামিটার ব্যবহার

class_weight প্যারামিটার দুটি ধরনের মান গ্রহণ করতে পারে:

  • 'balanced': এটি স্বয়ংক্রিয়ভাবে প্রতিটি শ্রেণীর জন্য একটি ওজন নির্ধারণ করে, যা শ্রেণীর সংখ্যা অনুযায়ী সামঞ্জস্যপূর্ণ।
  • ডিকশনারি: আপনি যদি নিজের কাস্টম ওয়েট প্রদান করতে চান, তবে একটি ডিকশনারি ব্যবহার করতে পারেন, যেখানে প্রতিটি ক্লাসের জন্য একটি নির্দিষ্ট ওজন দেওয়া থাকে।

1. Balanced Class Weights:

যদি আপনি class_weight='balanced' ব্যবহার করেন, তাহলে Scikit-learn এটি নিজে থেকেই ক্লাসগুলোর জন্য একটি "স্বয়ংক্রিয়" ওজন সেট করবে।

উদাহরণ:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# একটি অসামঞ্জস্যপূর্ণ ডেটাসেট তৈরি করা
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_classes=2, 
                            weights=[0.9, 0.1], flip_y=0, random_state=1)

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

# Logistic Regression মডেল তৈরি করা, class_weight='balanced' ব্যবহার করে
model = LogisticRegression(class_weight='balanced')

# মডেল প্রশিক্ষণ
model.fit(X_train, y_train)

# টেস্ট সেটে পারফরম্যান্স মূল্যায়ন
accuracy = model.score(X_test, y_test)
print(f'Accuracy: {accuracy * 100}%')

এখানে class_weight='balanced' দেওয়ার মাধ্যমে মডেলটি প্রতিটি শ্রেণীর জন্য স্বয়ংক্রিয়ভাবে ক্লাসের ইনভার্স ফ্রিকোয়েন্সি অনুযায়ী একটি ওজন প্রয়োগ করবে।

2. Custom Class Weights:

আপনি যদি নিজের ওজন সেট করতে চান, তবে ডিকশনারি ব্যবহার করতে পারেন। প্রতিটি ক্লাসের জন্য একটি নির্দিষ্ট মান দেবেন যা ওজন হিসাবে ব্যবহার হবে।

উদাহরণ:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# একটি অসামঞ্জস্যপূর্ণ ডেটাসেট তৈরি করা
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_classes=2, 
                            weights=[0.9, 0.1], flip_y=0, random_state=1)

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

# কাস্টম class_weight ডিকশনারি তৈরি করা
class_weights = {0: 1, 1: 10}  # ক্লাস 0 এর জন্য ওজন 1, ক্লাস 1 এর জন্য ওজন 10

# Logistic Regression মডেল তৈরি করা, custom class_weight ব্যবহার করে
model = LogisticRegression(class_weight=class_weights)

# মডেল প্রশিক্ষণ
model.fit(X_train, y_train)

# টেস্ট সেটে পারফরম্যান্স মূল্যায়ন
accuracy = model.score(X_test, y_test)
print(f'Accuracy: {accuracy * 100}%')

এখানে, ক্লাস 0 এর জন্য ওজন 1 এবং ক্লাস 1 এর জন্য ওজন 10 নির্ধারণ করা হয়েছে। এই কাস্টম ওজন ব্যবহার করে মডেলটি ক্লাস 1 এর উপর বেশি গুরুত্ব দেবে।


3. Class Weights এর সুবিধা এবং অসুবিধা

সুবিধা:

  • Class Imbalance সমস্যা সমাধান: অসামঞ্জস্যপূর্ণ ডেটাসেটের ক্ষেত্রে class_weight ব্যবহার করলে, মডেল কম সংখ্যক শ্রেণীর জন্য বেশি গুরুত্ব দেয়, যা ওভারফিটিং এবং underfitting সমস্যা কমাতে সাহায্য করে।
  • উন্নত পারফরম্যান্স: ক্লাসের ভিন্নতা এবং অনুপাতের দিকে মনোযোগ দিয়ে মডেলকে কার্যকরীভাবে প্রশিক্ষিত করা যায়।

অসুবিধা:

  • Overfitting: যখন একটি শ্রেণীর জন্য খুব বেশি ওজন নির্ধারণ করা হয়, তখন এটি অতিরিক্ত প্রশিক্ষণের কারণ হতে পারে, যার ফলে overfitting হতে পারে।
  • দ্রুততা কমানো: ক্লাস ওয়েটিং যখন ডেটাসেট বড় হয়, তখন কম্পিউটেশনাল খরচ বাড়িয়ে দিতে পারে।

4. Hyperparameter Tuning

Class Weights এবং অন্যান্য প্যারামিটার যেমন C, solver, max_iter ইত্যাদি কাস্টমাইজ করে, আপনি মডেলের পারফরম্যান্স অপটিমাইজ করতে পারেন। মডেলের প্রাপ্ত ফলাফল মূল্যায়ন এবং বিভিন্ন হাইপারপ্যারামিটার সেটিংসের সাথে পরীক্ষা করে সবচেয়ে ভালো আউটপুট পাওয়া যায়।

from sklearn.model_selection import GridSearchCV

# Hyperparameter tuning for logistic regression with class weights
param_grid = {'C': [0.1, 1, 10], 'solver': ['liblinear', 'lbfgs'], 'class_weight': ['balanced', None]}

grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

print("Best Parameters:", grid_search.best_params_)

সারাংশ:

  • Class Weights ব্যবহার করলে মডেলটি অস্বাভাবিক বা কম সংখ্যক শ্রেণীর জন্য আরও বেশি গুরুত্ব দেয়, যা class imbalance সমস্যা সমাধানে সহায়ক।
  • LogisticRegressionclass_weight প্যারামিটার ব্যবহার করে এটি balanced বা কাস্টম ডিকশনারি মানের মাধ্যমে কনফিগার করা যায়।
  • Class Weights ব্যবহার করলে মডেলটি ছোট শ্রেণীগুলির প্রতি বেশি মনোযোগ দেয়, তবে এটি Overfitting এড়ানোর জন্য সচেতনভাবে ব্যবহার করতে হয়।
Content added By
Promotion

Are you sure to start over?

Loading...