Linear এবং Non-linear SVM

Machine Learning - সাইকিট-লার্ন (Scikit-Learn) - Support Vector Machine (SVM)
222

SVM বা Support Vector Machine হল একটি জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা মূলত ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যা সমাধানের জন্য ব্যবহৃত হয়। এটি ক্লাসিফিকেশন সমস্যায় ইনপুট ডেটাকে বিভিন্ন শ্রেণীতে ভাগ করার জন্য একটি সীমানা (decision boundary) তৈরি করে। Linear SVM এবং Non-linear SVM হলো এই অ্যালগরিদমের দুটি ভিন্ন ধরনের বাস্তবায়ন, যা ডেটার প্রকৃতির উপর নির্ভর করে।


Linear SVM

Linear SVM হলো একটি ক্লাসিফিকেশন অ্যালগরিদম যা সরল, সোজা একটি সীমান্ত বা হাইপারপ্লেন ব্যবহার করে ডেটাকে দুটি শ্রেণিতে বিভক্ত করে। এটি কেবলমাত্র সেই সমস্ত ডেটাসেটের জন্য উপযোগী যেখানে ডেটা লিনিয়ারভাবে আলাদা (linearly separable) করা যায়। অর্থাৎ, দুটি শ্রেণীকে সরল একটি সোজা রেখা বা সমতল দ্বারা আলাদা করা যায়।

প্রক্রিয়া:

Linear SVM-এ, সেরা হাইপারপ্লেন (decision boundary) নির্বাচন করা হয় যা দুটি শ্রেণীর মধ্যে সর্বাধিক মার্জিন তৈরি করে, অর্থাৎ যে হাইপারপ্লেনটি দুটি শ্রেণীকে সর্বোচ্চ দূরত্বে আলাদা করে।

মডেলের লক্ষ্য:
Linear SVM দুটি শ্রেণীকে বিভক্ত করতে এমন একটি হাইপারপ্লেন খুঁজে বের করা যা দুটি শ্রেণীর মধ্যে সর্বাধিক মার্জিন তৈরি করে।

ম্যাথমেটিক্যাল মডেল:
wx+b=0w \cdot x + b = 0
এখানে,

  • w: হাইপারপ্লেনের normal vector
  • x: ডেটা পয়েন্ট
  • b: বাইয়াস (bias term)

Linear SVM এর উদাহরণ:

from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# ডেটা তৈরি করা
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_clusters_per_class=1, random_state=42)

# ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Linear SVM মডেল তৈরি করা
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# পূর্বাভাস
y_pred = model.predict(X_test)

Non-linear SVM

Non-linear SVM ব্যবহার করা হয় যখন ডেটা linearly separable (অর্থাৎ, সরল একটি সীমানা দ্বারা আলাদা করা যায় না) না হয়। এই ক্ষেত্রে, SVM ডেটাকে একটি higher-dimensional space-এ ম্যাপ করতে সাহায্য করে যেখানে ডেটা লিনিয়ারভাবে আলাদা করা যেতে পারে। এটি kernel trick ব্যবহার করে করা হয়।

Kernel Trick:

Kernel function একটি ম্য্যাথমেটিক্যাল ফাংশন যা ডেটাকে একটি উচ্চতর মাত্রায় ম্যাপ করে। SVM এই kernel function ব্যবহার করে higher-dimensional space-এ ডেটার মধ্যে সম্পর্ক শিখে।

প্রধান kernel functions:

  • Linear Kernel: সাধারণ লিনিয়ার ডেটার জন্য।
  • Polynomial Kernel: পলিনোমিয়াল ডেটার জন্য।
  • RBF (Radial Basis Function) Kernel: গড়ে ওঠা ডেটার জন্য, বিশেষ করে যেখানে ডেটা সোজা রেখা দ্বারা বিভক্ত করা যায় না।
  • Sigmoid Kernel: নিউরাল নেটওয়ার্কের মতো আচরণ করে।

Non-linear SVM এর উদাহরণ:

from sklearn.svm import SVC
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

# Non-linear ডেটাসেট তৈরি করা
X, y = make_moons(n_samples=100, noise=0.2, random_state=42)

# ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Non-linear SVM (RBF kernel) মডেল তৈরি করা
model = SVC(kernel='rbf')
model.fit(X_train, y_train)

# পূর্বাভাস
y_pred = model.predict(X_test)

Linear vs Non-linear SVM:

বৈশিষ্ট্যLinear SVMNon-linear SVM
ডেটা আকারলিনিয়ারভাবে আলাদা করা যায় এমন ডেটালিনিয়ারভাবে আলাদা না করা যায় এমন ডেটা
ক্লাসিফিকেশন বাউন্ডারিসরল একটি হাইপারপ্লেন (সোজা রেখা বা সমতল)উচ্চ মাত্রার স্পেসে ম্যাপ করা এবং সেখান থেকে সিদ্ধান্ত নেওয়া
Kernel functionKernel ফাংশন ব্যবহৃত হয় নাKernel trick (RBF, Polynomial, Sigmoid ইত্যাদি) ব্যবহার করা হয়
প্যারামিটারশুধুমাত্র হাইপারপ্লেনের জন্য সোজা প্যারামিটারKernel ফাংশন এবং তার প্যারামিটার নিয়ে কাজ করতে হয়
ব্যবহারসাধারণত সহজ এবং কম্পিউটেশনে দ্রুতজটিল এবং বিভিন্ন ক্ষেত্রে ব্যবহারযোগ্য

সারাংশ

  • Linear SVM একটি সরল সীমান্ত (hyperplane) ব্যবহার করে ডেটাকে দুটি শ্রেণিতে বিভক্ত করে। এটি কেবল তখনই কার্যকরী, যখন ডেটা লিনিয়ারভাবে আলাদা করা যায়।
  • Non-linear SVM ডেটাকে একটি উচ্চমাত্রার স্পেসে ম্যাপ করার জন্য kernel trick ব্যবহার করে, যেখানে ডেটা লিনিয়ারভাবে আলাদা করা যেতে পারে। এটি তখন ব্যবহার করা হয় যখন ডেটা সরল একটি সীমানা দ্বারা আলাদা করা সম্ভব নয়।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...