Grid Search এবং Random Search ব্যবহার

মডেল টিউনিং এবং Hyperparameter Optimization - পাইথনে লজিস্টিক রিগ্রেশন (Logistic Regression in Python) - Machine Learning

379

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
Promotion

Are you sure to start over?

Loading...