Skill

মডেল টিউনিং এবং Hyperparameter Optimization

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

422

মডেল টিউনিং এবং Hyperparameter Optimization হল মেশিন লার্নিং মডেলগুলির কার্যকারিতা উন্নত করার জন্য অপরিহার্য ধাপ। এটি মডেলের পারফরম্যান্স সর্বাধিক করতে সাহায্য করে। মডেল ট্রেনিংয়ের সময় কিছু প্যারামিটার থাকে যেগুলিকে হাইপারপ্যারামিটার বলা হয়, এবং তাদের সঠিক মান নির্ধারণ করলে মডেল আরো ভালো পারফর্ম করতে পারে।


1. হাইপারপ্যারামিটার কি?

হাইপারপ্যারামিটার হলো মডেল ট্রেনিংয়ের আগে সেট করা প্যারামিটার, যা মডেল ফিট করার সময় পরিবর্তিত হয় না। কিছু সাধারণ হাইপারপ্যারামিটার উদাহরণস্বরূপ:

  • লজিস্টিক রিগ্রেশন: লার্নিং রেট, C (regularization strength), solver ইত্যাদি।
  • ডিসিশন ট্রি: max_depth, min_samples_split, min_samples_leaf ইত্যাদি।
  • নিউরাল নেটওয়ার্ক: নোডের সংখ্যা, লেয়ারের সংখ্যা, লার্নিং রেট ইত্যাদি।

2. মডেল টিউনিং পদ্ধতি

মডেল টিউনিং মূলত হাইপারপ্যারামিটারগুলির মানের যথাযথ নির্বাচন করার প্রক্রিয়া। মডেল টিউনিং করার কয়েকটি জনপ্রিয় পদ্ধতি:

(a) Grid Search:

Grid Search হাইপারপ্যারামিটারগুলির একটি নির্দিষ্ট পরিসীমা পরীক্ষা করে এবং সেরা সেটিংস খুঁজে বের করে। এটি সব সম্ভাব্য কম্বিনেশনের জন্য মডেলটি ট্রেনিং করে।

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression

# মডেল তৈরি
model = LogisticRegression()

# হাইপারপ্যারামিটার গ্রিড
param_grid = {
    'C': [0.1, 1, 10],
    'solver': ['liblinear', 'saga'],
}

# Grid Search
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)

# সেরা প্যারামিটার প্রিন্ট করা
print("Best Parameters: ", grid_search.best_params_)

(b) Randomized Search:

Randomized Search একটি নির্দিষ্ট পরিসীমার মধ্যে র‍্যান্ডম প্যারামিটার নির্বাচন করে এবং পরীক্ষণ করে। এটি Grid Search এর তুলনায় বেশি দ্রুত হতে পারে।

from sklearn.model_selection import RandomizedSearchCV
from sklearn.linear_model import LogisticRegression
from scipy.stats import uniform

# মডেল তৈরি
model = LogisticRegression()

# হাইপারপ্যারামিটার গ্রিড
param_dist = {
    'C': uniform(0.1, 10),
    'solver': ['liblinear', 'saga'],
}

# Randomized Search
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=5)
random_search.fit(X_train, y_train)

# সেরা প্যারামিটার প্রিন্ট করা
print("Best Parameters: ", random_search.best_params_)

(c) Bayesian Optimization:

Bayesian Optimization একে অপরের উপর ভিত্তি করে পরবর্তী প্যারামিটার নির্বাচন করে, এবং এটি Grid Search এবং Randomized Search এর তুলনায় আরও দ্রুত এবং কার্যকরী হতে পারে। এটি scikit-optimize, hyperopt ইত্যাদি লাইব্রেরি ব্যবহার করে বাস্তবায়ন করা যেতে পারে।


3. Hyperparameter Optimization এর স্টেপস

  1. প্যারামিটার রেঞ্জ নির্বাচন: প্রথমে মডেলের গুরুত্বপূর্ণ হাইপারপ্যারামিটারগুলির জন্য একটি রেঞ্জ নির্ধারণ করতে হবে। এটি নির্ভর করে মডেল এবং ডেটাসেটের উপর।
  2. পদ্ধতি নির্বাচন:
    • Grid Search: যদি প্যারামিটারগুলির রেঞ্জ ছোট হয় এবং আপনাকে সঠিক মান নির্বাচন করতে হয়।
    • Random Search: যদি প্যারামিটারগুলির রেঞ্জ বড় হয় এবং আপনি দ্রুত পরীক্ষণ করতে চান।
    • Bayesian Optimization: যদি আপনি দ্রুত সঠিক ফলাফল পেতে চান এবং আপনার প্যারামিটারগুলো পরস্পর নির্ভরশীল হয়।
  3. মডেল প্রশিক্ষণ: প্রতিটি হাইপারপ্যারামিটার সেটিং এর জন্য মডেল প্রশিক্ষণ করুন এবং সেরা ফলাফল চিহ্নিত করুন।
  4. ফলাফল মূল্যায়ন: মডেলের সঠিকতা বা অন্যান্য মেট্রিক্স ব্যবহার করে সেরা হাইপারপ্যারামিটার নির্বাচন করুন।

4. Hyperparameter Optimization Example with Logistic Regression

এখানে Logistic Regression এর জন্য Grid Search ব্যবহার করে হাইপারপ্যারামিটার অপটিমাইজেশন দেখানো হলো:

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 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.3, random_state=42)

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

# হাইপারপ্যারামিটার গ্রিড
param_grid = {
    'C': [0.1, 1, 10],  # Regularization strength
    'solver': ['liblinear', 'saga'],  # Optimization solver
}

# Grid Search
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)

# সেরা প্যারামিটার প্রিন্ট করা
print("Best Parameters: ", grid_search.best_params_)

# মডেল মূল্যায়ন
best_model = grid_search.best_estimator_
print("Test Accuracy: ", best_model.score(X_test, y_test))

5. Cross-Validation (CV) ব্যবহার করা

Cross-Validation (CV) একটি গুরুত্বপূর্ণ পদ্ধতি যা মডেলের স্থায়িত্ব এবং সাধারণীকরণ ক্ষমতা নিশ্চিত করতে সাহায্য করে। CV ব্যবহার করে মডেল প্রশিক্ষণ করার সময়, ডেটা সেটটিকে বিভিন্ন ভাগে ভাগ করা হয় এবং প্রতিটি ভাগের উপর মডেলটি পরীক্ষা করা হয়। এটি হাইপারপ্যারামিটার অপটিমাইজেশন প্রক্রিয়ায় ব্যবহার করা হয়।

from sklearn.model_selection import cross_val_score

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

# Cross-validation (5-fold)
cv_scores = cross_val_score(model, X_train, y_train, cv=5)

# সেরা স্কোরের গড়
print(f"Cross-validation scores: {cv_scores}")
print(f"Mean cross-validation score: {cv_scores.mean()}")

সারাংশ

  • মডেল টিউনিং এবং Hyperparameter Optimization হলো মডেলের কার্যকারিতা বাড়ানোর প্রক্রিয়া, যেখানে আমরা মডেলের হাইপারপ্যারামিটারগুলির সঠিক মান নির্বাচন করি।
  • Grid Search, Random Search, এবং Bayesian Optimization হল প্রধান অপটিমাইজেশন পদ্ধতি।
  • Cross-validation মডেল মূল্যায়নে সহায়ক একটি গুরুত্বপূর্ণ পদ্ধতি যা স্থায়িত্ব এবং সাধারণীকরণ ক্ষমতা বাড়ায়।

এই পদ্ধতিগুলির মাধ্যমে আপনি মডেল টিউনিং করে সেরা পারফরম্যান্স নিশ্চিত করতে পারেন।

Content added By

Hyperparameters হল সেই প্যারামিটারগুলি যা মডেল প্রশিক্ষণের আগে সেট করতে হয় এবং মডেলের পারফরম্যান্সকে প্রভাবিত করে। এগুলি মডেলের আচরণ এবং তার প্রশিক্ষণ প্রক্রিয়া কেমন হবে তা নিয়ন্ত্রণ করে। এই প্যারামিটারগুলি অ্যালগরিদমের বাহ্যিক সেটিংস হিসাবে কাজ করে এবং ডেটার অভ্যন্তরীণ স্ট্রাকচার এর সঙ্গে সম্পর্কিত নয়।

বিভিন্ন মেশিন লার্নিং অ্যালগরিদমের জন্য বিভিন্ন ধরনের hyperparameters থাকতে পারে, এবং সেগুলি বিভিন্নভাবে কাজ করে।


Hyperparameters vs Parameters:

  • Parameters: মডেল প্রশিক্ষণের সময় স্বয়ংক্রিয়ভাবে শেখা হয় (যেমন: লিনিয়ার রিগ্রেশন মডেলে ওজন বা স্লোপ)।
  • Hyperparameters: মডেল প্রশিক্ষণের পূর্বে প্রি-ডিফাইন করা হয় এবং এগুলি ম্যানুয়ালি নির্বাচন করা হয় (যেমন: মডেলের লার্নিং রেট, নেটওয়ার্কের স্তরের সংখ্যা, ব্যাচ সাইজ)।

Hyperparameters এর উদাহরণ:

এখানে কিছু সাধারণ hyperparameters এর উদাহরণ দেওয়া হলো, যা বিভিন্ন মেশিন লার্নিং অ্যালগরিদমে ব্যবহৃত হয়:

1. Learning Rate (লার্নিং রেট):

এটি মডেলটি কত দ্রুত শিখবে তা নির্ধারণ করে। লার্নিং রেট একটি শিখন গতি এর মতো কাজ করে। খুব বেশি লার্নিং রেট হলে মডেলটি অত্যন্ত দ্রুত শিখতে পারে এবং সঠিকভাবে কনভার্জ না হতে পারে। খুব কম লার্নিং রেট হলে মডেলটি ধীরে ধীরে শিখবে এবং সময় বেশি লাগবে।

  • উদাহরণ: learning_rate=0.01

2. Batch Size (ব্যাচ সাইজ):

এই hyperparameterটি নির্ধারণ করে যে প্রতি প্রশিক্ষণ আপডেটের জন্য কতটি ডেটা পয়েন্ট একসাথে প্রক্রিয়া করা হবে। ছোট ব্যাচ সাইজ হলে মডেল দ্রুত আপডেট হতে পারে, কিন্তু এটি অস্থির হতে পারে। বড় ব্যাচ সাইজ হলে প্রশিক্ষণ স্থিতিশীল হবে, তবে এতে আরও সময় লাগতে পারে।

  • উদাহরণ: batch_size=32

3. Number of Epochs (এপোকের সংখ্যা):

এটি মডেল কতবার ডেটাসেটের উপর প্রশিক্ষিত হবে তা নির্ধারণ করে। একে "মডেলের প্রশিক্ষণের সময়কাল" বলা যেতে পারে। খুব বেশি epochs এর ফলে overfitting হতে পারে এবং খুব কম epochs হলে underfitting হতে পারে।

  • উদাহরণ: epochs=50

4. Number of Layers (স্তরের সংখ্যা):

নিউরাল নেটওয়ার্ক মডেলের ক্ষেত্রে, এটি মডেলের স্তরের সংখ্যা নির্ধারণ করে। আরও স্তর হলে মডেলটি আরও শক্তিশালী হতে পারে, তবে এটি বেশি সময় এবং রিসোর্স নিতে পারে। অনেক স্তর হলে মডেলটি আরও জটিল এবং তথ্যের মধ্যে আরও গভীর সম্পর্ক শিখতে সক্ষম হতে পারে।

  • উদাহরণ: layers=3

5. Regularization Parameter (রেগুলারাইজেশন প্যারামিটার):

এটি মডেলের complexity নিয়ন্ত্রণ করতে ব্যবহৃত হয় যাতে overfitting এড়ানো যায়। উদাহরণস্বরূপ, L1 বা L2 রেগুলারাইজেশন ব্যাবহার করা হয়।

  • উদাহরণ: C=1.0 (Logistic Regression এ)

6. Momentum (মোমেন্টাম):

এই hyperparameterটি gradient descent অ্যালগরিদমে ব্যবহৃত হয় এবং এটি previous আপডেটের প্রভাবকে নতুন আপডেটে অন্তর্ভুক্ত করতে সাহায্য করে, যাতে মডেল দ্রুত কনভার্জ করতে পারে।

  • উদাহরণ: momentum=0.9

7. Dropout Rate (ড্রপআউট রেট):

নিউরাল নেটওয়ার্ক মডেলে, ড্রপআউট হল একটি নিয়ম যা কিছু নিউরনের আউটপুট randomly drop করে, এটি মডেলের সাধারণীকরণ ক্ষমতা বৃদ্ধি করে এবং overfitting রোধে সাহায্য করে।

  • উদাহরণ: dropout_rate=0.5

Hyperparameters কিভাবে কাজ করে?

  1. মডেল ট্রেনিং এর গতি এবং কার্যকারিতা নির্ধারণ করা:
    • Hyperparameters মডেলের প্রশিক্ষণের গতি এবং কার্যকারিতা নির্ধারণ করতে সাহায্য করে। উদাহরণস্বরূপ, লার্নিং রেট খুব বড় হলে মডেলটি দ্রুত শিখতে চেষ্টা করবে কিন্তু সঠিকভাবে কনভার্জ করতে পারবে না, যদি ছোট হয় তবে ধীরে ধীরে শিখবে এবং সময় বেশি লাগবে।
  2. মডেল পারফরম্যান্স এবং সাধারণীকরণ প্রভাবিত করা:
    • কিছু hyperparameters মডেল পারফরম্যান্স এবং তার generalization capability প্রভাবিত করে, যেমন regularization parameters মডেলটিকে overfitting থেকে রক্ষা করতে সাহায্য করে।
  3. কাস্টমাইজেশন এবং টিউনিং:
    • Hyperparameters মডেলটিকে কাস্টমাইজ করার সুযোগ দেয়। আপনার ডেটা এবং লক্ষ্য অনুযায়ী hyperparameters সঠিকভাবে নির্বাচন করতে হবে। আপনি grid search বা random search ব্যবহার করে এই প্যারামিটারগুলো টিউন করতে পারেন।

Hyperparameters টিউনিং:

Hyperparameters সঠিকভাবে নির্বাচন করা মডেল ট্রেনিংয়ের সবচেয়ে গুরুত্বপূর্ণ অংশ। সঠিক hyperparameters নির্বাচন করতে কিছু টেকনিক রয়েছে:

1. Grid Search:

Grid Search হল একটি পদ্ধতি যেখানে আপনি নির্দিষ্ট hyperparameters এর বিভিন্ন মানের জন্য পরীক্ষার মাধ্যমে সেরা প্যারামিটার খুঁজে বের করেন।

from sklearn.model_selection import GridSearchCV

# নির্দিষ্ট hyperparameters
param_grid = {'C': [0.1, 1, 10], 'solver': ['liblinear', 'saga']}

# GridSearchCV ব্যবহার করে সেরা প্যারামিটার খোঁজা
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# সেরা প্যারামিটার দেখানো
print("Best parameters:", grid_search.best_params_)

2. Random Search:

Random Search পদ্ধতিতে hyperparameters এর বিভিন্ন সম্ভাব্য মান থেকে এলোমেলোভাবে কিছু পরীক্ষা করা হয়, যা Grid Search এর তুলনায় কম সময় নেয়।

from sklearn.model_selection import RandomizedSearchCV

# নির্দিষ্ট hyperparameters
param_dist = {'C': [0.1, 1, 10, 100], 'solver': ['liblinear', 'saga']}

# RandomizedSearchCV ব্যবহার করা
random_search = RandomizedSearchCV(LogisticRegression(), param_dist, n_iter=10, cv=5)
random_search.fit(X_train, y_train)

# সেরা প্যারামিটার দেখানো
print("Best parameters:", random_search.best_params_)

সারাংশ:

  • Hyperparameters মডেল ট্রেনিংয়ের আগে নির্ধারণ করা প্যারামিটার যা মডেলের আচরণ ও পারফরম্যান্স নিয়ন্ত্রণ করে।
  • এগুলি মডেলের গতি, সাধারণীকরণ ক্ষমতা, এবং প্রশিক্ষণ সময় প্রভাবিত করে।
  • Hyperparameter tuning করতে Grid Search এবং Random Search পদ্ধতি ব্যবহার করা হয়।
Content added By

Logistic Regression হল একটি জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা ক্লাসিফিকেশন টাস্কে ব্যবহৃত হয়। এর কিছু গুরুত্বপূর্ণ hyperparameters রয়েছে, যা মডেলের পারফরম্যান্স এবং প্রশিক্ষণ প্রক্রিয়াকে প্রভাবিত করে। নিচে প্রধান hyperparameters গুলি বিস্তারিত আলোচনা করা হলো: C, solver, এবং max_iter


1. C (Regularization Strength)

C হল Logistic Regression মডেলের রেগুলারাইজেশন শক্তি। এটি লজিস্টিক রিগ্রেশন এর Inverse Regularization Strength হিসেবে কাজ করে। সহজভাবে বলতে গেলে, C হচ্ছে রেগুলারাইজেশন এর শক্তি যা মডেলের জটিলতা নিয়ন্ত্রণ করে।

  • একটি ছোট C মান (যেমন 0.01) বেশি রেগুলারাইজেশন তৈরি করে, যার ফলে মডেলটি কম জটিল এবং বেশি সাধারণীকৃত (generalized) হয়।
  • একটি বড় C মান (যেমন 1000) কম রেগুলারাইজেশন তৈরি করে, যার ফলে মডেলটি বেশি জটিল এবং ওভারফিটিং হতে পারে।

উদাহরণ:

  • যদি আপনার C মান খুব ছোট হয়, তাহলে মডেলটি ডেটার প্রতি খুব বেশি স্থিতিশীলতা (bias) দেখাতে পারে এবং খুব সাধারণ হতে পারে।
  • যদি C মান বেশি হয়, মডেলটি ডেটা অনুযায়ী অনেক বেশি ফিট হতে পারে এবং ওভারফিটিংয়ের ঝুঁকি তৈরি করতে পারে।

ডিফল্ট মান:

  • C এর ডিফল্ট মান 1.0

কোড উদাহরণ:

from sklearn.linear_model import LogisticRegression

# C মান 0.1 দিয়ে মডেল তৈরি করা
model = LogisticRegression(C=0.1)

2. Solver (Optimization Algorithm)

Solver হল সেই অ্যালগরিদম যা লজিস্টিক রিগ্রেশন এর প্যারামিটারগুলি অপটিমাইজ করতে ব্যবহৃত হয়। sklearn এর লজিস্টিক রিগ্রেশন বিভিন্ন solver সাপোর্ট করে, যার মধ্যে কিছু সাধারণ solver হলো:

  1. liblinear: ছোট ডেটাসেটের জন্য উপযুক্ত। এটি লিনিয়ার রিগ্রেশন এবং লজিস্টিক রিগ্রেশন এর জন্য সেরা।
  2. newton-cg: বড় ডেটাসেটের জন্য কার্যকরী এবং নিউটন কনজিগেট গ্রাডিয়েন্ট মেথড ব্যবহার করে।
  3. lbfgs: বড় ডেটাসেটের জন্য একটি অত্যন্ত জনপ্রিয় solver। এটি Limited-memory Broyden–Fletcher–Goldfarb–Shanno অ্যালগরিদম ব্যবহার করে।
  4. saga: L1 রেগুলারাইজেশন এবং SVM এর জন্য উপযুক্ত। এটি বড় ডেটাসেটের জন্য এবং লিনিয়ার স্কেলিং এর জন্য ভালো।

কোড উদাহরণ:

from sklearn.linear_model import LogisticRegression

# solver=liblinear ব্যবহার করে মডেল তৈরি করা
model = LogisticRegression(solver='liblinear')

ডিফল্ট মান:

  • solver এর ডিফল্ট মান liblinear

3. max_iter (Maximum Number of Iterations)

max_iter হল অপটিমাইজেশন অ্যালগরিদম এর সর্বোচ্চ পুনরাবৃত্তির সংখ্যা। এর মান নির্ধারণ করে কতবার মডেলটি প্যারামিটারগুলি আপডেট করতে পারে। যদি max_iter খুব কম হয়, তাহলে মডেলটি কনভার্জ (convergence) করতে পারে না এবং সঠিক ফলাফল নাও পেতে পারে। যদি এটি খুব বেশি হয়, তবে এটি অপ্রয়োজনীয়ভাবে বেশি সময় নিতে পারে।

  • max_iter এর মান বাড়ালে, মডেলটি আরও বেশি পুনরাবৃত্তি করে এবং কনভার্জেন্স পেতে সহায়ক হয়, তবে এর ফলে ট্রেনিং সময়ও বেড়ে যায়।

কোড উদাহরণ:

from sklearn.linear_model import LogisticRegression

# max_iter 1000 দিয়ে মডেল তৈরি করা
model = LogisticRegression(max_iter=1000)

ডিফল্ট মান:

  • max_iter এর ডিফল্ট মান 100

সারাংশ:

HyperparameterDescriptionDefault Value
CRegularization strength. Small values lead to high regularization (simple model), large values lead to low regularization (complex model).1.0
solverOptimization algorithm used to find the model coefficients. Common options are liblinear, newton-cg, lbfgs, saga.liblinear
max_iterMaximum number of iterations for optimization algorithms. A higher number allows for more training time, but may help with convergence.100

Hyperparameters নির্বাচন:

  • C: মডেলের রেগুলারাইজেশন শক্তি নির্ধারণ করে, যেখানে কম C মান ডেটাকে বেশি সাধারণীকৃত করে এবং বড় C মান ডেটাকে বেশি ফিট করে (ওভারফিটিং এর ঝুঁকি)।
  • solver: বড় ডেটাসেট বা বিভিন্ন ধরনের রেগুলারাইজেশন ব্যবহার করার জন্য উপযুক্ত solver নির্বাচন করা গুরুত্বপূর্ণ। যেমন lbfgs বা saga বড় ডেটাসেটের জন্য ভাল।
  • max_iter: কনভার্জেন্স নিশ্চিত করার জন্য পর্যাপ্ত পুনরাবৃত্তি সংখ্যা নির্ধারণ করা।

এগুলি মডেলের পারফরম্যান্স এবং প্রশিক্ষণের গতি প্রভাবিত করতে পারে, তাই আপনার ডেটা এবং সমস্যার ধরন অনুযায়ী এগুলির মান নির্বাচন করা উচিত।

Content added By

Grid Search এবং Random Search হল দুটি জনপ্রিয় পদ্ধতি, যা মেশিন লার্নিং মডেল ট্রেনিংয়ের সময় হাইপারপ্যারামিটার টিউনিং করতে ব্যবহৃত হয়। এই পদ্ধতিগুলি ব্যবহৃত হয় মডেলের পারফরম্যান্স উন্নত করার জন্য, বিশেষ করে যখন মডেলের পারফরম্যান্স প্রভাবিত হয় কিছু নির্দিষ্ট হাইপারপ্যারামিটার দ্বারা (যেমন লার্নিং রেট, নিকটবর্তী নেপথ্য সার্বিকতা ইত্যাদি)।

এখানে, আমরা দেখাবো কিভাবে Grid Search এবং Random Search ব্যবহার করা যায় scikit-learn লাইব্রেরি দিয়ে।


1. Grid Search

Grid Search হল একটি পূর্ণসংখ্যক পদ্ধতি যেখানে আপনার নির্বাচিত হাইপারপ্যারামিটারদের জন্য একটি নির্দিষ্ট মানের গ্রিড তৈরি করা হয় এবং প্রতিটি কম্বিনেশনের জন্য মডেল ট্রেনিং করা হয়। এটি মডেলটির পারফরম্যান্স সর্বোচ্চ করার জন্য সেরা প্যারামিটার কম্বিনেশন খুঁজে বের করার চেষ্টা করে।

Grid Search কিভাবে কাজ করে:

  1. মডেলের জন্য বিভিন্ন হাইপারপ্যারামিটার নির্বাচন করুন।
  2. সেই হাইপারপ্যারামিটারগুলোর বিভিন্ন মানের গ্রিড তৈরি করুন।
  3. প্রতিটি হাইপারপ্যারামিটার কম্বিনেশনের জন্য মডেল প্রশিক্ষণ দিন এবং এর পারফরম্যান্স মূল্যায়ন করুন।
  4. সেরা মডেল নির্বাচন করুন।

Grid Search ব্যবহার করার উদাহরণ:

from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 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)

# হাইপারপ্যারামিটার গ্রিড নির্ধারণ
param_grid = {
    'C': [0.1, 1, 10],               # ইনভ্যারিয়েন্ট হাইপারপ্যারামিটার
    'solver': ['liblinear', 'saga'], # বিভিন্ন সলভার পদ্ধতি
    'multi_class': ['ovr', 'multinomial'] # multiclass কম্বিনেশন
}

# GridSearchCV ব্যবহার করে Grid Search চালানো
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')

# মডেল ফিট করা
grid_search.fit(X_train, y_train)

# সেরা প্যারামিটার এবং সেরা স্কোর বের করা
print(f"Best Parameters: {grid_search.best_params_}")
print(f"Best Cross-validation Score: {grid_search.best_score_}")

# সেরা মডেল মূল্যায়ন
best_model = grid_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print(f"Test Accuracy: {test_score}")

এখানে:

  • param_grid: হাইপারপ্যারামিটারগুলির জন্য বিভিন্ন মানের গ্রিড।
  • GridSearchCV: এটি Cross-Validation ব্যবহার করে গ্রিড সার্চ চালায়।
  • best_params_: সেরা প্যারামিটার কম্বিনেশন।
  • best_score_: সেরা ক্রস-ভ্যালিডেশন স্কোর।

2. Random Search

Random Search হল একটি হাইপারপ্যারামিটার টিউনিং পদ্ধতি যেখানে মডেলের জন্য হাইপারপ্যারামিটার স্পেসের মধ্যে র্যান্ডমভাবে বিভিন্ন প্যারামিটার কম্বিনেশন নির্বাচন করা হয়। এটি Grid Search এর তুলনায় কম সময় নেয় কারণ এটি প্রতিটি কম্বিনেশন পরীক্ষা করার পরিবর্তে র্যান্ডমভাবে নির্বাচিত কিছু কম্বিনেশন পরীক্ষা করে।

Random Search কিভাবে কাজ করে:

  1. মডেলের জন্য বিভিন্ন হাইপারপ্যারামিটার নির্বাচন করুন।
  2. নির্দিষ্ট সংখ্যক র্যান্ডম কম্বিনেশন নির্বাচন করুন।
  3. নির্বাচিত কম্বিনেশনগুলির জন্য মডেল প্রশিক্ষণ দিন এবং তার পারফরম্যান্স মূল্যায়ন করুন।
  4. সেরা মডেল নির্বাচন করুন।

Random Search ব্যবহার করার উদাহরণ:

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 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)

# হাইপারপ্যারামিটার ডিস্ট্রিবিউশন
param_dist = {
    'C': uniform(loc=0, scale=4), # C প্যারামিটার জন্য একটি র্যান্ডম ডিস্ট্রিবিউশন
    'solver': ['liblinear', 'saga'], # বিভিন্ন সলভার পদ্ধতি
    'multi_class': ['ovr', 'multinomial'] # multiclass কম্বিনেশন
}

# RandomizedSearchCV ব্যবহার করে Random Search চালানো
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=5, scoring='accuracy')

# মডেল ফিট করা
random_search.fit(X_train, y_train)

# সেরা প্যারামিটার এবং সেরা স্কোর বের করা
print(f"Best Parameters: {random_search.best_params_}")
print(f"Best Cross-validation Score: {random_search.best_score_}")

# সেরা মডেল মূল্যায়ন
best_model = random_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print(f"Test Accuracy: {test_score}")

এখানে:

  • param_distributions: হাইপারপ্যারামিটারগুলির জন্য সম্ভাব্য র্যান্ডম ডিস্ট্রিবিউশন।
  • RandomizedSearchCV: এটি র্যান্ডমলি কিছু প্যারামিটার কম্বিনেশন নির্বাচন করে ক্রস-ভ্যালিডেশন এর মাধ্যমে পরীক্ষা করে।
  • n_iter: র্যান্ডম কম্বিনেশন সংখ্যা, অর্থাৎ কতবার র্যান্ডম কম্বিনেশন পরীক্ষিত হবে।

3. Grid Search vs Random Search

Grid SearchRandom Search
সব কম্বিনেশন পরীক্ষা করা হয়কিছু র্যান্ডম কম্বিনেশন পরীক্ষা করা হয়
বেশি সময় নেয়, কারণ পুরো গ্রিড পরীক্ষা করতে হয়কম সময় নেয়, কারণ র্যান্ডম কম্বিনেশন পরীক্ষা করা হয়
কম্পিউটেশনালভাবে বেশি খরচ হয়কম্পিউটেশনালভাবে দক্ষ
সঠিক প্যারামিটার খুঁজে পাওয়ার সম্ভাবনা বেশিদ্রুত কার্যকর প্যারামিটার খুঁজে পাওয়ার সম্ভাবনা বেশি

সারাংশ

  • Grid Search: এটি পূর্ণ গ্রিড অনুসন্ধান করে, যেখানে সমস্ত হাইপারপ্যারামিটার কম্বিনেশন পরীক্ষা করা হয়। এটি সময়সাপেক্ষ কিন্তু সঠিক প্যারামিটার খুঁজে পেতে সহায়ক।
  • Random Search: এটি হাইপারপ্যারামিটার স্পেস থেকে র্যান্ডম কম্বিনেশন পরীক্ষা করে, যা কম সময় নেয় এবং কম্পিউটেশনালভাবে দক্ষ।

এ দুটি পদ্ধতি হাইপারপ্যারামিটার টিউনিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ, এবং নির্দিষ্ট পরিস্থিতিতে একে অপরের থেকে উত্তম হতে পারে।

Content added By

Hyperparameter Tuning হল মেশিন লার্নিং মডেলের পারফরম্যান্স উন্নত করার জন্য মডেলের হাইপারপ্যারামিটার গুলির উপযুক্ত মান নির্বাচন করার প্রক্রিয়া। হাইপারপ্যারামিটারগুলি এমন প্যারামিটার যা মডেল ট্রেনিংয়ের আগে সেট করা হয় এবং এটি মডেলের আউটপুট বা পারফরম্যান্সকে প্রভাবিত করে। সঠিক হাইপারপ্যারামিটার নির্বাচন করা মডেলটির সঠিকতা ও দক্ষতা বাড়াতে সাহায্য করে।

এই প্রক্রিয়াটি সাধারণত Grid Search বা Random Search পদ্ধতি ব্যবহার করে করা হয়।

নিচে একটি বাস্তব উদাহরণ দেওয়া হল যেখানে আমরা Grid Search পদ্ধতি ব্যবহার করে Logistic Regression মডেলের hyperparameter tuning করব।


Hyperparameter Tuning এর উদাহরণ

এখানে আমরা Iris ডেটাসেট ব্যবহার করব এবং Logistic Regression মডেলের জন্য GridSearchCV ব্যবহার করে হাইপারপ্যারামিটার টিউন করব। এটি বিভিন্ন কনফিগারেশন পরীক্ষা করবে এবং সেরা মডেলটির পারফরম্যান্স বেছে নেবে।

1. প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

প্রথমে প্রয়োজনীয় লাইব্রেরি ইনস্টল করুন, যদি আপনার সিস্টেমে আগে থেকে ইনস্টল না থাকে:

pip install scikit-learn

2. ডেটা লোড এবং মডেল তৈরি করা

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV

# 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)

3. Hyperparameter গ্রিড তৈরি করা

এখন আমরা একটি GridSearchCV গ্রিড তৈরি করব, যেখানে মডেলের বিভিন্ন হাইপারপ্যারামিটার এর বিভিন্ন মান থাকবে। এই প্যারামিটারগুলোর মধ্যে কিছু উদাহরণ হল C (যা regularization strength), solver ইত্যাদি।

# Logistic Regression এর জন্য হাইপারপ্যারামিটার গ্রিড তৈরি করা
param_grid = {
    'C': [0.01, 0.1, 1, 10, 100],  # Regularization strength
    'solver': ['liblinear', 'lbfgs'],  # Solver algorithm
    'max_iter': [100, 200, 300]  # Maximum number of iterations
}

4. Grid Search পরিচালনা করা

এখন আমরা GridSearchCV ব্যবহার করে হাইপারপ্যারামিটার টিউনিং করব। এটি বিভিন্ন প্যারামিটার কম্বিনেশনের জন্য ক্রস ভ্যালিডেশন পরিচালনা করে এবং সেরা প্যারামিটার সেট নির্বাচন করে।

# GridSearchCV সেটআপ করা
grid_search = GridSearchCV(LogisticRegression(), param_grid, cv=5, n_jobs=-1)

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

# সেরা প্যারামিটার সেট পাওয়া
print("Best Parameters:", grid_search.best_params_)

# সেরা মডেল ব্যবহার করে টেস্ট ডেটাতে প্রেডিকশন করা
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)

# সঠিকতা মূল্যায়ন
accuracy = best_model.score(X_test, y_test)
print(f"Accuracy: {accuracy * 100:.2f}%")

5. আউটপুট ব্যাখ্যা:

  • Best Parameters: grid_search.best_params_ দিয়ে আমরা সেরা প্যারামিটার সেট দেখতে পাব, যা GridSearchCV টেস্ট করেছে এবং সর্বোচ্চ সঠিকতা প্রদান করেছে।
  • Accuracy: সেরা মডেলটি টেস্ট ডেটাতে কতটুকু সঠিক প্রেডিকশন করেছে তার পার্সেন্টেজ দেখাবে।

Grid Search কি এবং কিভাবে কাজ করে?

  • GridSearchCV হল একটি টুল যা বিভিন্ন হাইপারপ্যারামিটার কম্বিনেশন পরীক্ষা করে এবং প্রতিটি কম্বিনেশনের জন্য মডেলটি কিভাবে পারফর্ম করছে তা মূল্যায়ন করে। এটি কখনো পুরো গ্রিড (param_grid) অনুসন্ধান করে।
  • Cross-Validation: GridSearchCV প্রতিটি প্যারামিটার সেটের জন্য ক্রস ভ্যালিডেশন (যেমন k-fold) ব্যবহার করে যাতে মডেলটি বিভিন্ন ডেটা সেগমেন্টে পরীক্ষা করা হয়, ফলে একটি ভালো সাধারণকৃত (generalized) মডেল পাওয়া যায়।

6. Hyperparameter Tuning এর সুবিধা ও গুরুত্বপূর্ণ বিষয়সমূহ

(a) মডেলের পারফরম্যান্স উন্নয়ন:

  • সঠিক হাইপারপ্যারামিটার নির্বাচন করলে মডেলের পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত হতে পারে। উদাহরণস্বরূপ, C এর মান পরিবর্তন করলে মডেলের অতি-ফিটিং বা আন্ডারফিটিং নিয়ন্ত্রণ করা যায়।

(b) সঠিক মডেল নির্বাচন:

  • বিভিন্ন প্যারামিটার টিউনিং করে একটি এমন মডেল পাওয়া যায় যা বাস্তব জগতে আরও কার্যকরী হতে পারে।

(c) প্রক্রিয়াটির সময় এবং খরচ:

  • GridSearchCV অনেক সময় নেয় কারণ এটি সমস্ত প্যারামিটার কম্বিনেশন পরীক্ষা করে, তবে RandomizedSearchCV একটি বিকল্প যা কিছু কম্বিনেশন র্যান্ডমভাবে নির্বাচন করে এবং দ্রুত ফলাফল পেতে সাহায্য করতে পারে।

7. RandomizedSearchCV: একটি বিকল্প

যদি আপনার হাইপারপ্যারামিটার স্পেস বিশাল হয়, তবে RandomizedSearchCV ব্যবহার করা যেতে পারে, যেখানে র্যান্ডমভাবে কিছু হাইপারপ্যারামিটার কম্বিনেশন নির্বাচন করা হয়।

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

# হাইপারপ্যারামিটার স্পেস তৈরি করা
param_dist = {
    'C': np.logspace(-3, 3, 7),
    'solver': ['liblinear', 'lbfgs'],
    'max_iter': [100, 200, 300]
}

# RandomizedSearchCV সেটআপ করা
random_search = RandomizedSearchCV(LogisticRegression(), param_dist, n_iter=10, cv=5, n_jobs=-1)

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

# সেরা প্যারামিটার এবং সঠিকতা
print("Best Parameters:", random_search.best_params_)
accuracy = random_search.score(X_test, y_test)
print(f"Accuracy: {accuracy * 100:.2f}%")

সারাংশ

  • Hyperparameter Tuning হল মডেলের পারফরম্যান্স উন্নত করার জন্য সঠিক হাইপারপ্যারামিটার নির্বাচন করা।
  • GridSearchCV হল একটি টুল যা বিভিন্ন প্যারামিটার কম্বিনেশন পরীক্ষা করে এবং সেরা সেট নির্বাচন করে।
  • RandomizedSearchCV একটি বিকল্প যা কিছু কম্বিনেশন র্যান্ডমভাবে পরীক্ষা করে এবং দ্রুত ফলাফল প্রদান করে।
  • এই প্রক্রিয়াগুলি মডেলটির পারফরম্যান্স উন্নত করতে সাহায্য করে, বিশেষত Logistic Regression, SVM, Decision Tree ইত্যাদি মডেলে।
Content added By
Promotion

Are you sure to start over?

Loading...