SMOTE (Synthetic Minority Over-sampling Technique) হল একটি জনপ্রিয় ওভার-স্যাম্পলিং কৌশল যা বৈষম্যপূর্ণ ডেটাসেটে (imbalance dataset) মাইনরিটি ক্লাস এর উদাহরণ তৈরি করতে ব্যবহৃত হয়। যখন একটি ডেটাসেটে এক শ্রেণীর উদাহরণ অন্য শ্রেণীর তুলনায় খুব কম থাকে, তখন মডেলটি মাইনরিটি ক্লাসের উপর কম শিখতে পারে এবং এর ফলে মডেলটি biased (পক্ষপাতি) হতে পারে। SMOTE এই সমস্যাটি সমাধান করার জন্য ডিজাইন করা হয়েছে।
SMOTE মাইনরিটি ক্লাসের উদাহরণগুলিকে পুনরায় তৈরি করে, যার ফলে মডেল ট্রেনিংয়ের সময় নির্ভুলতা এবং অন্যন্য (generalization) উন্নত হয়।
SMOTE কীভাবে কাজ করে?
SMOTE পদ্ধতিতে মাইনরিটি ক্লাসের উদাহরণগুলি থেকে নতুন উদাহরণ তৈরি করা হয়। এটি nearest neighbors (নিকটতম প্রতিবেশী) ব্যবহার করে নতুন উদাহরণ তৈরি করে, যার মাধ্যমে এক্সিস্টিং ডেটার উপর ভিত্তি করে নতুন উদাহরণ তৈরি করা হয়। এই নতুন উদাহরণগুলি প্রকৃত উদাহরণের মতো দেখতে হয়, তবে এটি অতিরিক্ত বৈশিষ্ট্য নিয়ে তৈরি হয়।
ধাপে ধাপে SMOTE এর কাজ:
- নিকটতম প্রতিবেশী নির্বাচন: মাইনরিটি ক্লাসের প্রতিটি উদাহরণ থেকে তার নিকটতম প্রতিবেশী (nearest neighbors) নির্বাচন করা হয়।
- নতুন উদাহরণ তৈরি করা: নতুন উদাহরণ তৈরি করতে প্রতিটি মাইনরিটি ক্লাসের উদাহরণ এবং তার নিকটতম প্রতিবেশীর মধ্যে লিনিয়ার ইন্টারপোলেশন করা হয়। অর্থাৎ, উদাহরণটির বৈশিষ্ট্যের মধ্যে কিছু পার্থক্য যোগ করা হয়।
- নতুন উদাহরণ যুক্ত করা: এই নতুন উদাহরণগুলি মূল ডেটাসেটে যুক্ত করা হয়।
এটি একটি সিন্থেটিক (কৃত্রিম) উদাহরণ তৈরি করে, যা মাইনরিটি ক্লাসের উদাহরণের সংখ্যা বাড়ায়।
SMOTE এর উদাহরণ:
ধরা যাক, একটি ডেটাসেটে ১টি মাইনরিটি ক্লাস (যেমন: 1) এবং ১টি ডোমিনেন্ট ক্লাস (যেমন: 0) রয়েছে এবং মাইনরিটি ক্লাসের উদাহরণের সংখ্যা খুব কম। SMOTE ব্যবহার করলে, এটি মাইনরিটি ক্লাসের উদাহরণগুলি দিয়ে নতুন উদাহরণ তৈরি করবে যাতে ডেটাসেটটি balanced (সামঞ্জস্যপূর্ণ) হয়।
SMOTE কিভাবে কাজ করে:
ধরা যাক, মাইনরিটি ক্লাসের একটি উদাহরণ হল:
[x1, y1]
এবং এর নিকটতম প্রতিবেশী:
[x2, y2]
SMOTE দুটি উদাহরণের মধ্যে ইন্টারপোলেশন করে একটি নতুন উদাহরণ তৈরি করবে:
[x_new, y_new] = [x1 + (x2 - x1) * λ, y1 + (y2 - y1) * λ]
এখানে, λ একটি র্যান্ডম ফ্যাক্টর যা 0 এবং 1 এর মধ্যে থাকে। এটি অন্তর্ভুক্তি (inclusion) পদ্ধতির মধ্যে পরিবর্তন আনতে ব্যবহৃত হয়, যাতে নতুন উদাহরণগুলি যথেষ্ট বৈশিষ্ট্যগতভাবে প্রাকৃত উদাহরণের মতো থাকে।
SMOTE এর সুবিধা:
- ওভারফিটিং কমানো: SMOTE অপ্রয়োজনীয় ক্লাসের উদাহরণ তৈরি করে, ফলে মডেলটি overfitting (অত্যাধিক প্রশিক্ষণ) থেকে রক্ষা পায় এবং বেশি সাধারণীকৃত হয়।
- ডেটার বৈচিত্র্য বাড়ানো: নতুন উদাহরণের মাধ্যমে ডেটার বৈচিত্র্য বৃদ্ধি পায়, যা মডেলটির কার্যকারিতা বাড়াতে সহায়ক।
- অন্যান্য অ্যালগরিদমে প্রয়োগ করা: এটি যে কোন ক্লাসিফিকেশন অ্যালগরিদমের সাথে ব্যবহার করা যায়, যেমন: লজিস্টিক রিগ্রেশন, ডিসিশন ট্রি, SVM ইত্যাদি।
SMOTE এর সীমাবদ্ধতা:
- নকল ডেটার সৃষ্টি: SMOTE প্রকৃত উদাহরণের মত সিন্থেটিক ডেটা তৈরি করে, যা কখনও কখনও ডেটা গুণগত মানে পরিবর্তন আনতে পারে।
- অতিরিক্ত উদাহরণ সৃষ্টি: মডেল যদি অতিরিক্ত সিন্থেটিক উদাহরণ গ্রহণ করে, তবে এর কার্যকারিতা হ্রাস পেতে পারে, বিশেষত যদি খুব বেশি উদাহরণ তৈরি করা হয়।
- নতুন আউটলায়ার তৈরি: SMOTE নতুন উদাহরণ তৈরি করার সময় আউটলায়ারও তৈরি করতে পারে, যা মডেলের ফলস ফলাফল দিতে পারে।
SMOTE ব্যবহার করার জন্য কোড উদাহরণ:
imbalanced-learn লাইব্রেরি ব্যবহার করে SMOTE সহজে ব্যবহার করা যায়। এই লাইব্রেরি SMOTE ক্লাস প্রদান করে, যা ডেটাসেটে SMOTE অ্যাপ্লাই করতে ব্যবহৃত হয়।
ইনস্টলেশন:
pip install imbalanced-learn
SMOTE ব্যবহার উদাহরণ:
from imblearn.over_sampling import SMOTE
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_classes=2,
n_clusters_per_class=1, weights=[0.9, 0.1], flip_y=0, random_state=42)
# ডেটা ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# SMOTE প্রয়োগ করা
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X_train, y_train)
# নতুন ডেটার শ্রেণী সমন্বয়
print("Before SMOTE:", y_train.tolist().count(1), y_train.tolist().count(0))
print("After SMOTE:", y_res.tolist().count(1), y_res.tolist().count(0))
এই কোডে:
- make_classification ব্যবহার করে একটি বৈষম্যপূর্ণ ডেটাসেট তৈরি করা হয়েছে।
- SMOTE এর মাধ্যমে মাইনরিটি ক্লাসের উদাহরণগুলি পুনরায় তৈরি করা হয়েছে।
- প্রশিক্ষণের আগে এবং পরে শ্রেণীগুলির সংখ্যা প্রদর্শিত হয়েছে।
সারাংশ:
SMOTE একটি শক্তিশালী ওভার-স্যাম্পলিং কৌশল যা মাইনরিটি ক্লাসের উদাহরণগুলি synthetically তৈরি করে, যাতে ডেটাসেটটি balanced হয়। এটি মডেলের কার্যকারিতা বৃদ্ধি করতে সাহায্য করে, বিশেষ করে imbalance dataset এর ক্ষেত্রে। তবে, এটি ব্যবহারের সময় কিছু সীমাবদ্ধতা যেমন overfitting এবং synthetic data তৈরি হওয়ার সমস্যা থাকতে পারে।
Read more