Classification সমস্যা পরিচিতি
গল্প দিয়ে শুরু করি 🎭
ধরুন আপনি একজন ডাকঘরের কর্মচারী। রোজ হাজার হাজার চিঠি আসে। কিছু চিঠি জরুরি, কিছু অপ্রয়োজনীয় বিজ্ঞাপনের (Spam)। আপনি প্রতিটি চিঠি দেখে দুটো বাক্সে ভাগ করেন। এটাই Classification! মেশিন লার্নিং এই কাজটা কম্পিউটার দিয়ে অটোমেটিক করে।
🏷️ Classification কী?
Classification হলো ডেটাকে পূর্বনির্ধারিত শ্রেণীতে ভাগ করা। উত্তর সবসময় নির্দিষ্ট কয়েকটি শ্রেণীর একটি।
📊 Binary vs Multi-Class Classification
| ধরন | শ্রেণী সংখ্যা | উদাহরণ |
|---|---|---|
| Binary Classification | ২টি মাত্র | Spam/Not Spam, পাস/ফেল, সুস্থ/অসুস্থ |
| Multi-Class Classification | ৩টি বা বেশি | A/B/C/D গ্রেড, ফুলের প্রজাতি, ভাষা সনাক্তকরণ |
📊 বাস্তব জীবনের Classification উদাহরণ
| পরিস্থিতি | Input | Output (Class) |
|---|---|---|
| 📧 ইমেইল | শব্দ, প্রেরক | Spam / Not Spam |
| 🎓 ছাত্র | পড়ার ঘণ্টা, উপস্থিতি | পাস / ফেল |
| 🏥 রোগী | বয়স, রক্তচাপ, লক্ষণ | অসুস্থ / সুস্থ |
| 🏦 ঋণ | আয়, ক্রেডিট স্কোর | অনুমোদিত / প্রত্যাখ্যাত |
| 📱 কাস্টমার | ব্যবহার, অভিযোগ | Churn / No Churn |
কেন আরেকটি Algorithm দরকার?
সমস্যাটা কোথায়? 🤔
Logistic Regression, KNN, Decision Tree — এগুলো অনেক কাজে ভালো। কিন্তু কিছু পরিস্থিতিতে এগুলো সেরা Decision Boundary দিতে পারে না। বিশেষ করে যখন দুটো শ্রেণী একে অপরের খুব কাছাকাছি থাকে। SVM এই সমস্যার সমাধান করে!
⚠️ আগের Algorithm-এর সীমাবদ্ধতা
| Algorithm | সীমাবদ্ধতা | কখন সমস্যা হয়? |
|---|---|---|
| Logistic Regression | শুধু Linear সীমানা | ডেটা বাঁকা প্যাটার্নে থাকলে |
| Decision Tree | Overfitting সমস্যা | ডেটা কম হলে |
| KNN | বড় Dataset-এ ধীর | লক্ষ লক্ষ ডেটায় |
কাছাকাছি শ্রেণী — কোথায় সীমানা টানব?
SVM কী? — মূল ধারণা
গল্প: ক্লাসরুমের দড়ি 🪢
কল্পনা করুন, একটি ক্লাসরুমে দুটো দল দাঁড়িয়ে আছে — একটি দল বাঁ দিকে, আরেকটি দল ডান দিকে। আপনার কাজ হলো তাদের মাঝে একটি দড়ি টানানো — এমনভাবে যাতে দড়িটা দুই দল থেকে যত দূরে সম্ভব থাকে। এটাই SVM-এর মূল ধারণা! দড়ি হলো Decision Boundary, আর দড়ি থেকে সবচেয়ে কাছের দলের মানুষরা হলো Support Vectors।
📖 SVM-এর সংজ্ঞা
Support Vector Machine (SVM) একটি Classification Algorithm যা দুটো শ্রেণীর মধ্যে সবচেয়ে বড় সম্ভাব্য "ফাঁকা জায়গা" (Margin) তৈরি করে একটি Decision Boundary আঁকে। এই Boundary দুই শ্রেণীকে সর্বোত্তমভাবে আলাদা করে।
🌉 তিনটি সহজ উপমা
| উপমা | দুই শ্রেণী | Decision Boundary | Margin |
|---|---|---|---|
| 🛣️ রাস্তার বিভাজক | আসা ও যাওয়ার গাড়ি | মাঝের রেখা | রেখা থেকে গাড়ির দূরত্ব |
| ⚽ ফুটবল মাঠ | দুই দলের খেলোয়াড় | মাঝের রেখা | দুই দলের মধ্যবর্তী অঞ্চল |
| 🌾 খামারের বেড়া | দুটো পাশের খামার | বেড়া | বেড়া থেকে ফসলের দূরত্ব |
💡 "Support Vector Machine" নামটি কেন?
Support Vectors: দুই শ্রেণীর মধ্যে যে ডেটা পয়েন্টগুলো Decision Boundary-র সবচেয়ে কাছে থাকে — তারা Boundary-কে "Support" বা ধরে রাখে।
Machine: কম্পিউটার অ্যালগরিদম।
পুরো নাম মানে: "এমন একটি মেশিন যা Support Vector-গুলো ব্যবহার করে সিদ্ধান্ত নেয়।"
Decision Boundary বোঝা
📖 Decision Boundary কী?
Decision Boundary হলো সেই কাল্পনিক রেখা (বা সমতল) যা দুটো শ্রেণীকে আলাদা করে। এই রেখার এক পাশে পড়লে "পাস", আরেক পাশে পড়লে "ফেল"।
খারাপ, ভালো ও সেরা Decision Boundary
Margin — সবচেয়ে গুরুত্বপূর্ণ ধারণা
গল্প: নিরাপদ দূরত্ব 🛡️
ধরুন আপনি একটি সরু রাস্তায় হাঁটছেন। দুই পাশে কাদা। আপনি ঠিক মাঝ দিয়ে হাঁটবেন, যাতে কাদায় পড়ার ঝুঁকি সবচেয়ে কম থাকে। SVM একই কাজ করে — Decision Boundary-কে এমন জায়গায় রাখে যাতে উভয় শ্রেণী থেকে দূরত্ব সর্বোচ্চ হয়। এই দূরত্বটাই হলো Margin।
📐 Margin কী?
Margin হলো Decision Boundary থেকে উভয় শ্রেণীর সবচেয়ে কাছের ডেটা পয়েন্টের দূরত্বের সমষ্টি। SVM সবসময় এই Margin সর্বোচ্চ করার চেষ্টা করে।
ছোট, মাঝারি ও সর্বোচ্চ Margin-এর তুলনা
🎯 কেন বড় Margin ভালো?
বড় Margin মানে সিদ্ধান্তের বেশি নিশ্চয়তা। নতুন ডেটা যদি সামান্য এদিক-ওদিক থাকে, তবুও সঠিক শ্রেণীতে পড়বে। ছোট Margin-এর সীমানা সামান্য পরিবর্তনেই ভুল করে।
Support Vectors কী?
গল্প: দেয়ালের ভিত্তিপ্রস্তর 🧱
একটি বড় দেয়াল দাঁড়িয়ে আছে। দেয়ালের নিচে অনেক ইট আছে, কিন্তু দেয়ালকে আসলে ধরে রাখে ভিত্তির মাত্র কিছু গুরুত্বপূর্ণ পাথর। বাকিগুলো সরিয়ে নিলেও দেয়াল পড়বে না। SVM-এও একইভাবে — হাজার ডেটা পয়েন্টের মধ্যে মাত্র কয়েকটি "Support Vector" আছে, যারা Decision Boundary ঠিক করে। বাকি ডেটা সরিয়ে দিলেও Boundary বদলাবে না!
📐 Support Vectors কী?
Support Vectors হলো প্রতিটি শ্রেণীর সেই ডেটা পয়েন্টগুলো যেগুলো Decision Boundary থেকে সবচেয়ে কাছে থাকে। এরাই Boundary-র অবস্থান নির্ধারণ করে।
Support Vectors চিহ্নিতকরণ
🔑 মূল বিষয়
Support Vectors সরিয়ে নিলে Decision Boundary বদলে যায়। কিন্তু অন্য ডেটা পয়েন্ট সরিয়ে নিলেও Boundary একই থাকে। SVM তাই অনেক দক্ষ — শুধু কয়েকটি গুরুত্বপূর্ণ পয়েন্ট মনে রাখলেই চলে!
Data থেকে SVM Prediction — Step by Step
এক লাইনে পুরো গল্প
Training data দাও → Hyperplane (w·x+b=0) → Margin lines → Support Vectors → Max margin → sign(w·x+b) → পাস/ফেল predict।
Part 17-এর ৮ ছাত্রের dataset — canvas + math panel-এ প্রতিটি ধাপ live দেখানো হয়।
সব চিহ্ন এক নজরে (Math Dictionary)
| চিহ্ন | নাম | কী করে | উদাহরণ |
|---|---|---|---|
| x₁ | Study hours | Feature 1 — পড়ার ঘণ্টা | 5.2 |
| x₂ | Attendance | Feature 2 — উপস্থিতি % | 75 |
| w, b | Weights, Bias | Hyperplane সংজ্ঞায়ক | w=[1,0], b=−5 |
| score | w·x+b | Decision function — 0 = boundary | 0.2 |
| SV | Support Vector | Margin-এ সবচেয়ে কাছের point | G★, H★ |
| C | Soft-margin | বড় C = কম slack, সঙ্কুচিত band | 1.0 |
| ŷ | Predicted Class | +1 পাস, −1 ফেল | +1 |
💡 এক লাইনে মনে রাখো
Data → w·x+b=0 → margin ±1 → support vectors → max margin → sign(score) → ŷ · SVM = শুধু সীমানার কাছের point মনে রাখে
Mathematical Intuition
📐 সহজ ধারণা থেকে সূত্রে যাওয়া
একটি সরলরেখার সমীকরণ আমরা সবাই চিনি: y = mx + c। SVM-এর Decision Boundary-ও একটি রেখা (বা সমতল), তবে সেটা আলাদাভাবে লেখা হয়।
📊 উপাদানগুলো বোঝা
| উপাদান | Symbol | সহজ ভাষায় | উদাহরণ |
|---|---|---|---|
| Features | x₁, x₂ | Input ডেটার মান | পড়ার ঘণ্টা, উপস্থিতি |
| Weights | w₁, w₂ | প্রতিটি Feature-এর গুরুত্ব | পড়া বেশি গুরুত্বপূর্ণ → w বড় |
| Bias | b | রেখার অবস্থান পরিবর্তন | শুরুর অবস্থান |
| Output | w·x + b | ডেটা কোন পাশে আছে? | ধনাত্মক = ক্লাস +1, ঋণাত্মক = ক্লাস −1 |
💡 সহজ ব্যাখ্যা
কল্পনা করুন একটি দাঁড়িপাল্লা। বাম দিকে ওজন বেশি হলে বাঁ দিকে ঝোঁকে (Class -1), ডান দিকে বেশি হলে ডান দিকে (Class +1)। w·x+b হলো সেই দাঁড়িপাল্লার ভারসাম্য।
🎯 SVM-এর লক্ষ্য
এমন w ও b খুঁজে বের করা যাতে:
• w·x+b ≥ +1 → ক্লাস +1 (পাস)
• w·x+b ≤ −1 → ক্লাস −1 (ফেল)
• এবং Margin (= 2/|w|) সর্বোচ্চ হয়
Linear vs Non-Linear SVM
Linear ও Non-Linear ডেটার পার্থক্য
📊 তুলনা
| বিষয় | Linear SVM | Non-Linear SVM |
|---|---|---|
| Decision Boundary | সরল রেখা/সমতল | বাঁকা রেখা/পৃষ্ঠ |
| Kernel | Linear Kernel | RBF, Polynomial Kernel |
| কখন ব্যবহার? | ডেটা সহজে আলাদা হলে | ডেটা মিশ্রিত বা বৃত্তাকার হলে |
| গতি | দ্রুত | তুলনামূলক ধীর |
Kernel Trick — সবচেয়ে শক্তিশালী কৌশল
গল্প: কাগজ ভাঁজ করা 📄
কল্পনা করুন, একটি কাগজে দুই ধরনের বিন্দু আঁকা আছে — কিছু বিন্দু মাঝখানে, কিছু চারদিকে। সমতল কাগজে সরল রেখায় ভাগ করা অসম্ভব। কিন্তু কাগজটি ভাঁজ করলে (৩D-তে নিলে) মাঝখানের বিন্দু উপরে উঠে যাবে! তখন একটি সমতল দিয়ে সহজেই ভাগ করা যাবে। এটাই Kernel Trick — ডেটাকে উচ্চমাত্রায় নিয়ে গিয়ে সহজে আলাদা করা।
Kernel Trick — ২D থেকে ৩D রূপান্তর
🔮 Kernel-এর ধরন
📏 Linear Kernel
সূত্র: K(x,y) = xᵀy
কাজ: সাধারণ সরল রেখা/সমতল
কখন? ডেটা linearly separable হলে
সুবিধা: দ্রুত, সহজ ব্যাখ্যা
উদাহরণ: Text Classification, Spam
📐 Polynomial Kernel
সূত্র: K(x,y) = (γxᵀy + r)ᵈ
কাজ: বাঁকা (polynomial) সীমানা
কখন? ডেটায় polynomial সম্পর্ক থাকলে
সুবিধা: Non-linear সমস্যা সমাধান
উদাহরণ: হাতের লেখা চেনা
🌊 RBF / Gaussian Kernel
সূত্র: K(x,y) = exp(−γ|x−y|²)
কাজ: বৃত্তাকার সীমানা, Gaussian bell
কখন? সাধারণ ক্ষেত্রে (default)
সুবিধা: সবচেয়ে নমনীয় ও শক্তিশালী
উদাহরণ: Image, Cancer Detection
🔀 Sigmoid Kernel
সূত্র: K(x,y) = tanh(γxᵀy + r)
কাজ: Neural Network-এর মতো আচরণ
কখন? Neural Network-like সমস্যায়
সুবিধা: Non-linear, নমনীয়
উদাহরণ: NLP, Text Mining
📊 Kernel তুলনা সারসংক্ষেপ
| Kernel | সীমানার ধরন | গতি | কখন ভালো? |
|---|---|---|---|
| Linear | সরল রেখা | সবচেয়ে দ্রুত | Linearly separable ডেটায় |
| Polynomial | বাঁকা polynomial রেখা | মাঝারি | Image recognition |
| RBF (Gaussian) | বৃত্তাকার/যেকোনো আকৃতি | মাঝারি | সাধারণ ক্ষেত্রে (default) |
| Sigmoid | S-আকৃতি | ধীর | Neural Network-like সমস্যায় |
Hyperparameters — C ও Gamma
📊 C Parameter — কঠোরতা বনাম নমনীয়তা
| C মান | মানে কী? | Margin | ঝুঁকি | উদাহরণ |
|---|---|---|---|---|
| ছোট C (যেমন 0.1) | নরম সীমানা, কিছু ভুল সহ্য করে | বড় Margin | Underfitting | ডেটায় অনেক noise থাকলে |
| বড় C (যেমন 100) | কঠোর সীমানা, সব ডেটা সঠিকভাবে ভাগ করতে চায় | ছোট Margin | Overfitting | ডেটা পরিষ্কার হলে |
📊 Gamma Parameter — RBF Kernel-এ প্রভাব
| Gamma মান | মানে কী? | Decision Boundary | ঝুঁকি |
|---|---|---|---|
| ছোট Gamma | দূরের ডেটাও প্রভাব ফেলে | মসৃণ, সরল | Underfitting |
| বড় Gamma | কাছের ডেটাই শুধু প্রভাব ফেলে | জটিল, অনিয়মিত | Overfitting |
💡 সহজ নিয়ম মনে রাখুন
C এবং Gamma দুটোই Grid Search বা Cross Validation দিয়ে বেছে নিন। সাধারণত শুরু করুন: C=1, Gamma='scale' দিয়ে, তারপর ফলাফল দেখে পরিবর্তন করুন।
সুবিধা ও অসুবিধা
✅ সুবিধা (Advantages)
- উচ্চমাত্রায়: অনেক Feature-এ ভালো কাজ করে
- জটিল সীমানা: Kernel দিয়ে যেকোনো আকৃতির সীমানা
- Overfitting কম: Maximum Margin নিশ্চিত করে
- Support Vectors: মেমোরি দক্ষ
❌ অসুবিধা (Disadvantages)
- বড় Dataset-এ ধীর: লক্ষ লক্ষ ডেটায় সমস্যা
- Kernel নির্বাচন: সঠিক Kernel বেছে নেওয়া কঠিন
- ব্যাখ্যা কঠিন: Decision Tree-এর মতো সহজে বোঝানো যায় না
- Scaling বাধ্যতামূলক: Feature Scaling ছাড়া কাজ করে না
Real-Life Applications
Face Recognition
মুখ চেনা, ছবিতে ব্যক্তি সনাক্তকরণ
Handwriting Recognition
হাতের লেখা ডিজিটাল পড়া
Cancer Detection
টিউমার সৌম্য বা ম্যালিগন্যান্ট
Image Classification
ছবিতে বস্তু চেনা (বিড়াল/কুকুর)
Fraud Detection
সন্দেহজনক লেনদেন সনাক্তকরণ
Text Classification
নিউজ ক্যাটাগরি, Spam ফিল্টার
Google Colab কোডিং সেশন
📋 আজকের লক্ষ্য
Linear SVM ও RBF Kernel SVM তৈরি করব এবং তুলনা করব। Feature Scaling-এর গুরুত্বও দেখব।
# প্রয়োজনীয় লাইব্রেরি import pandas as pd import numpy as np from sklearn.svm import SVC from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, confusion_matrix, classification_report import matplotlib.pyplot as plt # Dataset data = { 'study_hours': [1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,3,5,7,2,8], 'attendance': [40,50,45,55,60,70,65,75,80,85,90,88,95,92,98,48,72,88,42,96], 'previous_marks': [30,40,35,45,50,55,60,58,65,70,75,72,80,78,88,38,62,79,33,84], 'pass_fail': [0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1] } df = pd.DataFrame(data) print(df.head(8))
•
SVC = Support Vector Classifier — sklearn-এর SVM ক্লাস•
StandardScaler — SVM-এ Feature Scaling বাধ্যতামূলক!X = df[['study_hours', 'attendance', 'previous_marks']] y = df['pass_fail'] # Train-Test Split আগে X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) # তারপর Scaling scaler = StandardScaler() X_train_sc = scaler.fit_transform(X_train) X_test_sc = scaler.transform(X_test) print("Scaling সম্পন্ন!") print("আগে (study_hours range):", X_train['study_hours'].min(), "to", X_train['study_hours'].max()) print("পরে (scaled range):", X_train_sc[:,0].min().round(2), "to", X_train_sc[:,0].max().round(2))
• SVM Distance-ভিত্তিক — Scaling ছাড়া attendance (40-98) পুরো হিসাব দখল করবে
•
fit_transform শুধু Train-এ, transform শুধু Test-এ (Data Leakage এড়াতে)fit_transform ব্যবহার করা। এতে Test ডেটার তথ্য Training-এ ঢুকে যায় (Data Leakage) — ফলাফল বিভ্রান্তিকর হবে!# Linear SVM svm_linear = SVC(kernel='linear', C=1.0, random_state=42) svm_linear.fit(X_train_sc, y_train) y_pred_l = svm_linear.predict(X_test_sc) print("✅ Linear SVM Accuracy:", accuracy_score(y_test, y_pred_l)) print("\nSupport Vectors সংখ্যা:", svm_linear.n_support_) print("(ফেল শ্রেণীর, পাস শ্রেণীর)") print("\n📊 Confusion Matrix:") print(confusion_matrix(y_test, y_pred_l))
•
kernel='linear' → সরল রেখার সীমানা•
n_support_ → মোট ৩টি Support Vector: ১টি ফেল শ্রেণীর, ২টি পাস শ্রেণীর• মাত্র ৩টি ডেটা পয়েন্ট পুরো Boundary নির্ধারণ করছে!
# RBF Kernel SVM svm_rbf = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42) svm_rbf.fit(X_train_sc, y_train) y_pred_r = svm_rbf.predict(X_test_sc) print("✅ RBF SVM Accuracy:", accuracy_score(y_test, y_pred_r)) print("\n📋 Classification Report:") print(classification_report(y_test, y_pred_r, target_names=['ফেল', 'পাস']))
•
gamma='scale' → sklearn নিজে Gamma হিসাব করবে (ভালো শুরু)• RBF Kernel বাঁকা সীমানা তৈরি করতে পারে — জটিল ডেটায় ভালো
# Scaling ছাড়া SVM svm_no_scale = SVC(kernel='rbf', random_state=42) svm_no_scale.fit(X_train, y_train) acc_no_scale = accuracy_score(y_test, svm_no_scale.predict(X_test)) # Scaling সহ SVM (আগে দেখা) acc_scaled = accuracy_score(y_test, y_pred_r) print(f"Scaling ছাড়া SVM Accuracy: {acc_no_scale:.2%}") print(f"Scaling সহ SVM Accuracy: {acc_scaled:.2%}") print("\n💡 পার্থক্য স্পষ্ট! Feature Scaling SVM-এ বাধ্যতামূলক।")
• Scaling ছাড়া: attendance (40-98) অন্য Feature-কে চাপা দেয়
• Scaling সহ: সব Feature সমান গুরুত্ব পায় → ভালো ফলাফল
print("C মান | Train Accuracy | Test Accuracy") print("-" * 42) for c in [0.01, 0.1, 1, 10, 100]: m = SVC(kernel='rbf', C=c, gamma='scale', random_state=42) m.fit(X_train_sc, y_train) tr = accuracy_score(y_train, m.predict(X_train_sc)) te = accuracy_score(y_test, m.predict(X_test_sc)) print(f"C={c:6} | {tr:.2%} | {te:.2%}")
• C=0.01 → অতিরিক্ত নরম, Underfitting
• C=1 থেকে বেশি → এই Dataset-এ যথেষ্ট, বড় Dataset-এ আলাদা হতে পারে
Model Evaluation — মডেল মূল্যায়ন
Confusion Matrix
আসলে পাস ✅
বলেছি পাস
আসলে পাস ❌
বলেছি ফেল
আসলে ফেল ❌
বলেছি পাস
আসলে ফেল ✅
বলেছি ফেল
📊 Evaluation Metrics
| Metric | সূত্র | সহজ ভাষায় | কখন গুরুত্বপূর্ণ? |
|---|---|---|---|
| Accuracy | (TP+TN)/Total | সবমিলিয়ে কতটা সঠিক? | ভারসাম্যপূর্ণ ডেটায় |
| Precision | TP/(TP+FP) | পাস বলা জনের মধ্যে কতজন সত্যিই পাস? | Spam Detection |
| Recall | TP/(TP+FN) | আসল পাস-এর মধ্যে কতজন ধরা গেল? | Cancer Detection |
| F1 Score | 2×(P×R)/(P+R) | Precision ও Recall-এর সামঞ্জস্য | Imbalanced Data |
অন্যান্য Algorithm-এর সাথে তুলনা
📊 SVM vs Logistic Regression vs KNN vs Decision Tree vs Random Forest
| বিষয় | SVM | Logistic Reg | KNN | Decision Tree | Random Forest |
|---|---|---|---|---|---|
| Feature Scaling | বাধ্যতামূলক | সাধারণত না | বাধ্যতামূলক | লাগে না | লাগে না |
| Non-linear সীমানা | Kernel দিয়ে হ্যাঁ | না | হ্যাঁ | হ্যাঁ (Step) | খুব ভালো |
| ব্যাখ্যাযোগ্যতা | কঠিন | মাঝারি | সহজ | খুব সহজ | কঠিন |
| বড় Dataset গতি | ধীর | দ্রুত | ধীর | দ্রুত | মাঝারি |
| Overfitting ঝুঁকি | কম | কম | K-তে নির্ভরশীল | বেশি | কম |
| ছোট Dataset | ভালো | ভালো | ভালো | মাঝারি | মাঝারি |
| High-Dimensional | চমৎকার | ঠিকমতো | খারাপ | মাঝারি | ভালো |
🎯 কোনটা কখন?
Common Beginner Mistakes
❌ ভুল ১: Feature Scaling ভুলে যাওয়া
ভুল: Scaling ছাড়া SVM চালানো। সমাধান: সবসময় StandardScaler বা MinMaxScaler ব্যবহার করুন। Test-এ শুধু transform (fit নয়)।
❌ ভুল ২: ভুল Kernel বেছে নেওয়া
ভুল: সবসময় Linear Kernel বা সবসময় RBF ব্যবহার। সমাধান: Linear দিয়ে শুরু করুন, তারপর RBF চেষ্টা করুন। GridSearchCV দিয়ে সেরা Kernel খুঁজুন।
❌ ভুল ৩: C ও Gamma ডিফল্টেই রাখা
ভুল: C=1, Gamma='scale' সবসময় ভালো ভাবা। সমাধান: বিভিন্ন C ও Gamma দিয়ে পরীক্ষা করুন।
❌ ভুল ৪: SVM সবসময় সরল রেখা ভাবা
ভুল: SVM শুধু সরল রেখার Boundary দেয়। সমাধান: Kernel Trick দিয়ে SVM যেকোনো আকৃতির Boundary তৈরি করতে পারে।
❌ ভুল ৫: বিশাল Dataset-এ SVM
ভুল: ১০ লক্ষ+ ডেটায় SVM চালানো। সমাধান: বড় Dataset-এ LinearSVC বা SGDClassifier ব্যবহার করুন — অনেক দ্রুত।
End-to-End Visual Example
📊 ছোট Dataset — ৮টি ডেটা পয়েন্ট
| # | পড়ার ঘণ্টা (x₁) | উপস্থিতি % (x₂) | ফলাফল |
|---|---|---|---|
| A | 2 | 40 | ফেল (−1) |
| B | 3 | 55 | ফেল (−1) |
| C | 4 | 65 | ফেল (−1) |
| D | 5 | 70 | পাস (+1) |
| E | 6 | 80 | পাস (+1) |
| F | 7 | 88 | পাস (+1) |
| G | 4.5 | 68 | ফেল (−1) ← Support Vector! |
| H | 5.5 | 72 | পাস (+1) ← Support Vector! |
ধাপে ধাপে SVM — Scatter → Support Vectors → Margin → Boundary → Prediction
Revision — পুনরাবৃত্তি ও MCQ
⚡ Quick Revision Chips
🎤 Viva Questions (ক্লিক করলে উত্তর)
📝 MCQ — Multiple Choice Questions
- Accuracy
- Margin
- Decision Boundary-র সংখ্যা
- Support Vectors-এর সংখ্যা
- মডেল দ্রুত হওয়ার জন্য
- SVM Distance-ভিত্তিক, তাই সব Feature সমান স্কেলে থাকা দরকার
- Decision Tree-র মতো হওয়ার জন্য
- Kernel কাজ করার জন্য
- শুধু সরল রেখা
- শুধু polynomial
- যেকোনো আকৃতির (বৃত্তাকারসহ)
- শুধু ত্রিভুজ
- Margin বড় হয়
- Margin ছোট হয়, মডেল কঠোর, Overfitting ঝুঁকি
- Support Vectors বেশি হয়
- Kernel পরিবর্তিত হয়
- Linear
- Polynomial
- RBF (Gaussian)
- Sigmoid
- কিছুই হবে না
- Margin বাড়বে
- Decision Boundary বদলে যাবে
- Kernel পরিবর্তিত হবে
- লক্ষ লক্ষ ডেটা
- মাঝারি আকার, উচ্চমাত্রার Feature
- শুধু ছবির ডেটা
- শুধু টেক্সট ডেটা
📚 Homework Assignment
- Google Colab খুলুন এবং আজকের সম্পূর্ণ SVM কোড নিজে হাতে লিখুন।
- Linear, RBF, Polynomial সব Kernel-এ Accuracy তুলনা করুন।
- C=0.01, 0.1, 1, 10, 100 দিয়ে Train vs Test Accuracy টেবিল বানান।
- Scaling ছাড়া ও Scaling সহ — দুটো মডেলের Confusion Matrix তুলনা করুন।
- Kaggle-এ "Breast Cancer Dataset" নামিয়ে SVM দিয়ে সৌম্য/ম্যালিগন্যান্ট classify করুন।
💼 Interview Questions
| # | প্রশ্ন | মূল বিষয় |
|---|---|---|
| 1 | SVM কীভাবে Maximum Margin খুঁজে বের করে? | Optimization, Lagrange Multipliers |
| 2 | Hard Margin vs Soft Margin SVM-এর পার্থক্য? | C Parameter, Slack Variables |
| 3 | Kernel Trick-এর গাণিতিক ব্যাখ্যা? | Feature Map, Inner Product |
| 4 | SVM কি Multi-Class Classification করতে পারে? | One-vs-One, One-vs-Rest |
| 5 | SVM vs Logistic Regression — কখন কোনটা? | High-D, Small N vs Large N |
| 6 | বড় Dataset-এ SVM ধীর কেন? | O(n²) থেকে O(n³) Time Complexity |
🎉 অভিনন্দন! আজকের SVM ক্লাস সম্পন্ন!
আপনি আজ শিখেছেন: Classification, Decision Boundary, Maximum Margin, Support Vectors, Kernel Trick, Linear vs RBF Kernel, C ও Gamma Hyperparameter, Feature Scaling-এর গুরুত্ব এবং সম্পূর্ণ Python কোডিং!
পরের ক্লাস: Random Forest — Decision Tree-এর সম্মিলিত শক্তি 🌲🌲🌲