SVM এর মৌলিক ধারণা

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

358

SVM (Support Vector Machine) হলো একটি জনপ্রিয় এবং শক্তিশালী মেশিন লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন এবং রিগ্রেশন সমস্যা সমাধানে ব্যবহৃত হয়। এটি মূলত Supervised Learning (সুপারভাইজড লার্নিং) পদ্ধতির অধীনে কাজ করে এবং ডেটার মধ্যে শ্রেণী বিভাজন করতে সাহায্য করে। SVM ক্লাসিফিকেশন মডেলগুলোর মধ্যে অন্যতম জনপ্রিয় এবং কার্যকরী অ্যালগরিদম হিসেবে বিবেচিত।


SVM এর মূল ধারণা

SVM একটি হাইপারপ্লেন (Hyperplane) ব্যবহার করে ডেটাকে দুটি শ্রেণিতে বিভক্ত করার চেষ্টা করে। এটি ডেটার মধ্যে শ্রেণীভেদ করতে একটি সীমানা তৈরি করে, যেখানে সেই সীমানার এক পাশে একটি শ্রেণী এবং অন্য পাশে অন্য শ্রেণী থাকে।

SVM এর লক্ষ্য হলো ডেটাকে একটি ম্যাক্সিমাম মার্জিনে বিভক্ত করা, অর্থাৎ দুটি শ্রেণীকে আলাদা করার জন্য এমন একটি হাইপারপ্লেন নির্বাচন করা যা উভয় শ্রেণীর সীমানার মধ্যে সর্বোচ্চ দূরত্ব সৃষ্টি করে। এটি Support Vectors ব্যবহার করে এই কাজটি করে।


Hyperplane এবং Margin

  1. Hyperplane (হাইপারপ্লেন):
    একটি Hyperplane হলো একটি সীমান্ত বা পৃষ্ঠ, যা ডেটাকে দুটি শ্রেণিতে বিভক্ত করে। এটি একটি k-ডাইমেনশনাল স্পেসে একটি (k-1)-ডাইমেনশনাল সীমানা। উদাহরণস্বরূপ, 2D স্পেসে এটি একটি রেখা (line), 3D স্পেসে এটি একটি পৃষ্ঠ (plane) এবং উচ্চতর ডাইমেনশনে এটি একটি হাইপারপ্লেন।
  2. Margin (মার্জিন):
    Margin হলো দুই শ্রেণীর মধ্যে দূরত্ব। SVM এই মার্জিনকে সর্বোচ্চ করতে চায়, অর্থাৎ এমন একটি হাইপারপ্লেন নির্বাচন করতে চায় যা দুই শ্রেণীকে সবচেয়ে বড় দূরত্বে বিভক্ত করে।
  3. Support Vectors (সাপোর্ট ভেক্টর):
    Support Vectors হলো সেই ডেটা পয়েন্টগুলি যা হাইপারপ্লেনের কাছাকাছি অবস্থান করে এবং মার্জিন তৈরি করতে সাহায্য করে। এই পয়েন্টগুলি ডেটার শ্রেণীভেদ নির্ধারণে গুরুত্বপূর্ণ ভূমিকা পালন করে।

SVM এর কাজের প্রক্রিয়া

  1. ডেটা পয়েন্টের মধ্যে শ্রেণী বিভাজন: SVM ডেটা পয়েন্টের মধ্যে শ্রেণী বিভাজন করতে একটি হাইপারপ্লেন তৈরি করে। এটি প্রথমে ডেটাকে 2D বা 3D স্পেসে পুঙ্খানুপুঙ্খভাবে বিশ্লেষণ করে এবং শ্রেণীভেদ করতে একটি হাইপারপ্লেন নির্বাচন করে।
  2. ম্যাক্সিমাম মার্জিন নির্বাচন: SVM সর্বাধিক মার্জিন নির্বাচন করতে চায়, যাতে শ্রেণীভেদ শক্তিশালী হয় এবং যে কোনো নতুন ডেটা পয়েন্টকে সঠিকভাবে শ্রেণীবদ্ধ করা যায়। মার্জিন যত বড় হবে, মডেলটি তত বেশি সাধারণীকৃত এবং ভাল পারফরম্যান্স প্রদান করবে।
  3. Kernel Trick (কর্ণেল ট্রিক): কিছু ক্ষেত্রে ডেটা সোজাসুজি বিভক্ত করা সম্ভব নয়। তখন Kernel Trick ব্যবহার করা হয়। এটি ডেটাকে একটি উচ্চতর মাত্রায় (higher dimension) ম্যাপ করে, যেখানে ডেটাকে সরলভাবে বিভক্ত করা সম্ভব হয়। বিভিন্ন ধরনের কের্নেল যেমন Linear, Polynomial, Radial Basis Function (RBF) ইত্যাদি ব্যবহার করা হয়।

SVM এর ধরণ

  1. লাইনিয়ার SVM:
    যখন ডেটা দুই শ্রেণিতে সোজাসুজি বিভক্ত করা যায়, তখন লাইনিয়ার SVM ব্যবহার করা হয়। এতে ডেটা পয়েন্টগুলোর মধ্যে একটি সোজা হাইপারপ্লেন নির্বাচন করা হয়।
  2. নন-লাইনিয়ার SVM:
    যদি ডেটা পয়েন্টগুলির মধ্যে সোজা বিভাজন সম্ভব না হয়, তবে নন-লাইনিয়ার SVM ব্যবহার করা হয়। এখানে, Kernel Trick ব্যবহার করে ডেটাকে উচ্চতর মাত্রায় ম্যাপ করা হয় এবং সেখানে বিভাজন তৈরি করা হয়।

SVM এর সুবিধা:

  • ম্যাক্সিমাম মার্জিন:
    SVM সর্বাধিক মার্জিন তৈরি করে, যা মডেলের সাধারণীকরণ ক্ষমতা বাড়ায় এবং এটি নতুন ডেটার উপরও ভালো পারফরম্যান্স দেয়।
  • প্রযুক্তিগতভাবে শক্তিশালী:
    SVM বিশেষত কম ডেটা এবং উচ্চ মাত্রার ডেটা (high-dimensional data) নিয়ে কাজ করতে খুবই কার্যকরী।
  • Kernel Trick:
    SVM তে Kernel Trick ব্যবহারের মাধ্যমে এটি নন-লাইনিয়ার ডেটা সোজাসুজি বিভক্ত করার জন্য শক্তিশালী এবং উপযোগী।
  • দ্রুত এবং দক্ষ:
    এটি প্রশিক্ষণ ও পূর্বাভাস তৈরির জন্য খুবই দক্ষ এবং কম্পিউটেশনালভাবে কার্যকরী।

SVM এর সীমাবদ্ধতা:

  • প্রশিক্ষণ সময়:
    বড় ডেটাসেটের জন্য SVM কিছুটা ধীর হতে পারে, কারণ এটি প্রশিক্ষণের জন্য অনেক গণনা সম্পাদন করে।
  • কির্নেল পছন্দ:
    সঠিক কির্নেল নির্বাচন করা গুরুত্বপূর্ণ এবং ভুল কির্নেল ব্যবহার করলে মডেলটি ভালোভাবে কাজ নাও করতে পারে।

SVM এর উদাহরণ:

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# ডেটাসেট লোড করা
iris = load_iris()
X = iris.data
y = iris.target

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

# SVM মডেল তৈরি
model = SVC(kernel='linear')  # লিনিয়ার কির্নেল ব্যবহার করা হচ্ছে
model.fit(X_train, y_train)

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

# একুরেসি মাপা
print(f"Accuracy: {accuracy_score(y_test, y_pred)}")

সারাংশ

SVM একটি শক্তিশালী এবং জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা ডেটাকে শ্রেণীভেদ করতে হাইপারপ্লেন ব্যবহার করে। এটি Support Vectors ব্যবহার করে শ্রেণীভেদে সাহায্য করে এবং সর্বাধিক margin তৈরি করে। Kernel Trick এর মাধ্যমে এটি নন-লাইনিয়ার ডেটা বিশ্লেষণেও কার্যকরী। SVM সাধারণত কম ডেটাসেট বা উচ্চ মাত্রার ডেটাতে ভালো ফলাফল দেয়, কিন্তু বড় ডেটাসেটের জন্য এটি ধীর হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...