Arefin Anwar
SVC (support vector machine) মডেল মূলত ডেটা ক্লাসিফিকেশনের জন্য ব্যবহৃত হয়। সহজভাবে বললে, এটি এমন একটি পদ্ধতি যা ডেটাকে বিভিন্ন গ্রুপ বা শ্রেণিতে ভাগ করতে সাহায্য করে। উদাহরণস্বরূপ, যদি তোমার কাছে ফুলের দুটি ধরন থাকে এবং প্রতিটি ধরনে ফুলের পাপড়ি ও বোঁটার দৈর্ঘ্য ও প্রস্থের ডেটা থাকে, তাহলে SVC এই বৈশিষ্ট্যগুলো ব্যবহার করে ফুলের ধরন আলাদা করতে পারবে।
মূল ধারণা হলো, ডেটাগুলোকে একটি স্থানাঙ্কে (দ্বিমাত্রিক অথবা বেশি) কল্পনা করা হয় এবং তাদের মধ্যে এমন একটি সেরা রেখা বা সমতল (যদি ডেটা দ্বিমাত্রিকের বেশি হয়) আঁকা হয়, যা শ্রেণিগুলোকে আলাদা করে। এই রেখাটি এমনভাবে আঁকা হয় যাতে দুটি শ্রেণির ডেটার মধ্যবর্তী দূরত্ব (মার্জিন) সর্বোচ্চ হয়। এই সেরা পৃথককারী রেখাকেই “হাইপারপ্লেন” বলা হয়।
সাপোর্ট ভেক্টর: সাপোর্ট ভেক্টর হলো ডেটাসেটের সেই বিশেষ পয়েন্টগুলো, যেগুলো হাইপারপ্লেনের ঠিক কাছাকাছি অবস্থান করে এবং দুটি শ্রেণির ডেটাকে আলাদা করার জন্য সবচেয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে। সহজভাবে বললে, হাইপারপ্লেনটি দুটি শ্রেণিকে আলাদা করার সময় যে ডেটাপয়েন্টগুলোকে ধারে কাছে রেখে কাজ করে, সেগুলোই সাপোর্ট ভেক্টর। উদাহরণস্বরূপ, যদি তুমি লাল এবং সবুজ রঙের দুটি আলাদা ডেটাগ্রুপ কল্পনা করো, তবে সাপোর্ট ভেক্টর হলো সেই লাল এবং সবুজ পয়েন্ট, যেগুলো একে অপরের সবচেয়ে কাছাকাছি থাকে এবং তাদের মাঝ দিয়ে এমন একটি রেখা বা সমতল তৈরি হয় যা দুই গ্রুপকে আলাদা করে। এই পয়েন্টগুলোই মূলত নির্ধারণ করে যে হাইপারপ্লেনটি কোথায় হবে, এবং এগুলোর সঠিক অবস্থান মডেলের পারফরম্যান্সের জন্য অত্যন্ত গুরুত্বপূর্ণ।
কার্নেল ট্রিক: কার্নেল ট্রিক হলো একটি পাওয়ারফুল কৌশল, যা তখন ব্যবহৃত হয় যখন ডেটা সরলরেখা (লিনিয়ার) দিয়ে আলাদা করা সম্ভব হয় না। বাস্তবে ডেটা অনেক কাছাকাছি চেহারার হয়ে থাকে। কার্নেল ট্রিক, ডেটাকে এমন একটি উচ্চতর ডাইমেনশনে রূপান্তর করে যেখানে এটি সহজে আলাদা করা যায়। উদাহরণ হিসেবে কল্পনা করো, একটি গোলাকার ডেটাসেট আছে, যেখানে দুটি শ্রেণির ডেটা কেন্দ্র এবং বাহিরে অবস্থান করছে। এটি সরলরেখা দিয়ে বিভাজন সম্ভব নয়। তবে, কার্নেল ট্রিক ব্যবহার করে ডেটাকে ত্রিমাত্রিক স্থানান্তরে নিয়ে যাওয়া হলে, কেন্দ্রের ডেটাগুলো নিচে এবং বাহিরের ডেটাগুলো উপরে উঠে যাবে, যা একটি সমতল বা সরলরেখা দিয়ে সহজেই আলাদা করা সম্ভব।
সাপোর্ট ভেক্টর মেশিনে (SVM) এটি ব্যবহার করা হয়, যেখানে কার্নেল ফাংশন ডেটার জটিল প্যাটার্ন শনাক্ত করে এবং তা আলাদা করার উপযোগী অবস্থানে নিয়ে আসে। এই কার্নেল ট্রিক মুলত একটি ফাংশান যা ডাটা আলাদা করে দেয়! মনে করো করো না আবার যে এই কার্নেল ট্রিক তোমার করা লাগবে! চিল! এইসব কাজ লাইব্রেরি সামলিয়ে নিবে, তুমি শুধু 1 লাইন কোড লিখবে জাস্ট!
এখন আরেকটু জানা যাক, SVM-এ C এবং γ (গামা) দুটি গুরুত্বপূর্ণ প্যারামিটার যা মডেলের কার্যকারিতা নির্ধারণ করে। C হলো মডেলের “সহনশীলতার” নির্দেশক। ছোট C মানে মডেল কিছু ভুল সহ্য করতে পারবে এবং সাধারণ প্যাটার্ন শিখতে চেষ্টা করবে, যা সাধারণত জেনারালাইজড মডেল তৈরি করে। উদাহরণস্বরূপ, যদি ডেটার মধ্যে কিছু ব্যতিক্রম (outliers) থাকে, ছোট C সেটিকে এড়িয়ে চলতে সাহায্য করবে। অন্যদিকে, বড় C মানে মডেল ভুল একদম সহ্য করবে না এবং ডেটার প্রতিটি পয়েন্ট মেনে চলে, যা ওভারফিটিং-এর ঝুঁকি বাড়ায়। γ (গামা) ডেটার পয়েন্টগুলোর প্রভাবের ব্যাপ্তি নির্ধারণ করে। ছোট γ মানে প্রতিটি ডেটা পয়েন্টের প্রভাব বেশি দূর পর্যন্ত যাবে, ফলে মডেল বৃহত্তর প্যাটার্ন শিখতে পারে। বড় γ মানে প্রতিটি ডেটা পয়েন্টের প্রভাব খুব কম দূরত্বে সীমাবদ্ধ থাকবে, ফলে মডেল ছোটখাটো বৈশিষ্ট্যে বেশি মনোযোগ দেবে। উদাহরণস্বরূপ, একটি ফুলের প্রজাতি শনাক্ত করতে হলে, ছোট γ মানে পুরো ফুলের গড় বৈশিষ্ট্য দেখা হবে, আর বড় γ মানে কেবল ফুলের নির্দিষ্ট পাপড়ির ওপর গুরুত্ব দেওয়া হবে। সঠিকভাবে C এবং γ মান নির্ধারণ করা হলে মডেল ভালোভাবে শিখে এবং সঠিক প্রেডিকশন দেয়।
C: এটি মডেল কতটা “সহনশীল” হবে তা নির্ধারণ করে। ছোট C মানে মডেল কিছু ভুল সহ্য করবে, বড় C মানে মডেল কম ভুল সহ্য করবে।
γ: এটি ডেটার পয়েন্টগুলোর প্রভাবের ব্যাপ্তি নিয়ন্ত্রণ করে।
বাস্তব জীবনের প্রয়োগ:
- ইমেইল স্প্যাম ডিটেকশন: ইমেইল ডেটার বৈশিষ্ট্যগুলো বিশ্লেষণ করে স্প্যাম এবং নন-স্প্যাম আলাদা করা।
- চিকিৎসা ক্ষেত্রে রোগ নির্ণয়: প্যাথলজিক্যাল ডেটা বিশ্লেষণ করে রোগ নির্ধারণ।
- বিপণন ও ব্যবহারকারীর আচরণ: গ্রাহকের ডেটা বিশ্লেষণ করে তাদের বিভিন্ন গ্রুপে ভাগ করা।
উদাহরণ:
ধরা যাক, তোমার কাছে দুটি ফলের ডেটা আছে: আপেল এবং কমলা। আপেল সাধারণত লাল ও গোলাকার এবং কমলা সাধারণত কমলা ও সামান্য চাপা গোলাকার। SVC এই বৈশিষ্ট্য ব্যবহার করে একটি সেরা রেখা তৈরি করবে, যা আপেল এবং কমলাকে আলাদা করতে পারবে।
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# ডেটা লোড করা
iris = datasets.load_iris()
X = iris.data[:, :2] # প্রথম দুটি ফিচার (সুবিধার জন্য)
y = iris.target
# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# মডেল তৈরি করা এবং প্রশিক্ষণ দেওয়া
model = SVC(kernel='linear', C=1.0)
model.fit(X_train, y_train)
# প্রেডিকশন এবং একুরেসি পরিমাপ
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"মডেলের একুরেসি: {accuracy * 100:.2f}%")
SVC মডেল ডেটাকে শ্রেণিবদ্ধ করার একটি অত্যন্ত কার্যকর পদ্ধতি, যা ছোট বা বড় ডেটাসেটে কাজ করতে পারে। এটি সহজেই বিভিন্ন বাস্তব জীবনের সমস্যার সমাধান দিতে পারে এবং Python দিয়ে সহজে বাস্তবায়নযোগ্য।