SVM তত্ত্ব — maximum margin
এই পাঠে যা শিখবেন
- হাইপারপ্লেন কী — ২-D-তে রেখা, ৩-D-তে সমতল, $n$-D-তে $n-1$ মাত্রার সীমানা
- Margin ও geometric distance সূত্র — কেন $\dfrac{2}{\|\mathbf{w}\|}$
- Support vector কারা — এবং কেন বাকিরা matter করে না
- Hard-margin SVM-এর constrained optimization — সরাসরি গণিত
- scikit-learn-এ
LinearSVCদিয়ে toy data-তে hands-on
১ · সমস্যা — অসংখ্য রেখা, কোনটা বাছব?
২-D-তে দু'টি শ্রেণির বিন্দু কল্পনা করুন — এক পাশে নীল ✚, আরেক পাশে লাল ✖। এদের মাঝে আপনি একটা সরল রেখা টেনে আলাদা করতে চান। সমস্যা — এমন রেখা অসংখ্য আঁকা যায়। কোনটা সেরা?
Logistic regressionLogistic RegressionL12-এ পড়েছেন। Sigmoid দিয়ে probability output, log-loss minimize। কিন্তু একই data-এ অনেক ভিন্ন decision boundary আসতে পারে।-এর উত্তর: যেটা log-loss minimize করে। PerceptronPerceptronRosenblatt (১৯৫৭) — প্রথম neural unit। শুধু এমন একটা rekha খোঁজে যেটা ভুল ক্লাসিফাই করে না — কিন্তু কোনটা ভাল তা বিচার করে না।-এর উত্তর: যেকোনো একটা যেটা সব ঠিক ক্লাসিফাই করে। SVM-এর উত্তর — সবচেয়ে চওড়া রাস্তা যে রেখা ফেলতে পারে, সেটাই।
একটি দু'লেনের রাস্তা ভাবুন — মাঝখানে সাদা দাগ (decision boundary), দু'পাশে চওড়া shoulder (margin)। SVM সেই rekha বাছে যেখানে রাস্তার shoulder সবচেয়ে চওড়া। চওড়া shoulder মানে — নতুন data সামান্য সরে গেলেও ভুল class-এ চলে যাবে না। এটাই robustness।
২ · হাইপারপ্লেন — সংজ্ঞা
একটি হাইপারপ্লেনHyperplane$n$-মাত্রিক space-এ $n-1$-মাত্রিক flat সীমানা। ২-D-তে রেখা, ৩-D-তে সমতল, ১০০-D-তে ৯৯-D একটি "স্ল্যাব"। সমীকরণ:
$$\mathbf{w}^\top \mathbf{x} + b = 0$$
এখানে $\mathbf{w}$ একটি normal vector (হাইপারপ্লেনের লম্ব দিক), $b$ একটি bias (origin থেকে দূরত্ব)। ২-D-এ এটি $w_1 x_1 + w_2 x_2 + b = 0$ — অর্থাৎ একটি সরলরেখা।
Decision rule:
$$\hat{y} = \mathrm{sign}(\mathbf{w}^\top \mathbf{x} + b) \in \{+1, -1\}$$
৩ · Margin — গাণিতিকভাবে
একটি বিন্দু $\mathbf{x}_i$ থেকে হাইপারপ্লেনের লম্ব দূরত্ব:
$$d_i = \frac{|\mathbf{w}^\top \mathbf{x}_i + b|}{\|\mathbf{w}\|}$$
চিন্তা: সমীকরণ $\mathbf{w}^\top \mathbf{x} + b = 0$ অপরিবর্তিত থাকে যদি দু'পাশই scale করি। তাই আমরা একটি convention ঠিক করি — closest support vector-এ $|\mathbf{w}^\top \mathbf{x} + b| = 1$। তখন হাইপারপ্লেন থেকে closest point-এর দূরত্ব $\dfrac{1}{\|\mathbf{w}\|}$, এবং দুই side মিলিয়ে margin:
$$\text{margin} = \frac{2}{\|\mathbf{w}\|}$$
Margin বড় করতে চাই → $\|\mathbf{w}\|$ ছোট করতে হবে। এটাই SVM-এর objective-এর গোড়া।
৪ · Hard-margin SVM — primal optimization
ধরা যাক ডেটা পুরোপুরি linearly separable — দু'টি শ্রেণির মাঝে একটি রেখা টানা যায়, ভুল ছাড়া। এই আদর্শ ক্ষেত্রে SVM সমস্যা:
$$\min_{\mathbf{w}, b} \;\; \frac{1}{2} \|\mathbf{w}\|^2$$
$$\text{subject to } \;\; y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1 \quad \forall i$$
লক্ষ্য করুন:
- Objective: $\tfrac{1}{2}\|\mathbf{w}\|^2$ minimize — অর্থাৎ margin maximize। ($1/2$ আর square — derivative-কে clean করে)।
- Constraint: প্রতিটি training point-কে নিজ side-এ থাকতে হবে এবং margin-এর বাইরে বা সীমানায়।
- $y_i \in \{+1, -1\}$: label encoding। নীল = +1, লাল = -1। তাই $y_i \cdot (\text{score})$ সবসময় positive হওয়া মানে — সঠিক side।
এটি একটি convex quadratic program (QP) — global optimum guaranteed, কোনো local minima নেই। Logistic regression-ও convex, কিন্তু SVM-এর geometry অনেক পরিষ্কার।
৫ · Support Vectors — কারা boundary নির্ধারণ করে
Optimization শেষে অধিকাংশ training point-এ constraint strict inequality ($> 1$)। এই বিন্দুগুলো margin থেকে দূরে — আপনি এদের সরিয়ে ফেললেও solution বদলায় না।
কেবল কয়েকটি বিন্দুতে equality ($y_i(\mathbf{w}^\top \mathbf{x}_i + b) = 1$) — এরা margin-এর ঠিক কিনারায় বসে আছে। এদেরকে বলে support vectors। এদের নাড়াচাড়া করলেই হাইপারপ্লেন বদলায়।
১০,০০০ training point-এর মধ্যে support vector হতে পারে মাত্র ৩০-৫০টি। এই sparsity SVM-এর বড় শক্তি — মডেলটা memorize করে শুধু critical boundary point-গুলোই, পুরো dataset নয়। Logistic regression-এ সব point gradient-এ contribute করে, SVM-এ শুধু support vectors।
৬ · Lagrangian ও Dual form (সংক্ষেপে)
Constrained optimization-কে LagrangianLagrangianConstrained optimization-কে unconstrained-এ রূপান্তরের গাণিতিক tool। প্রতিটি constraint-কে একটি multiplier $\alpha_i \geq 0$ দিয়ে objective-এ যোগ। KKT conditions দিয়ে solve। দিয়ে dual form-এ রূপান্তর করলে:
$$\max_{\boldsymbol{\alpha}} \;\; \sum_i \alpha_i - \frac{1}{2} \sum_{i,j} \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^\top \mathbf{x}_j)$$
$$\text{s.t. } \;\; \alpha_i \geq 0, \;\; \sum_i \alpha_i y_i = 0$$
চমৎকার দু'টি বৈশিষ্ট্য:
- Solution-এ $\mathbf{w} = \sum_i \alpha_i y_i \mathbf{x}_i$ — যেখানে support vectors-এ $\alpha_i > 0$, বাকিদের $\alpha_i = 0$।
- Data শুধু dot-product $\mathbf{x}_i^\top \mathbf{x}_j$ হিসেবে আসছে — কোনো coordinate প্রয়োজন নেই। এটাই kernel trick-এর দরজা (L29-এ বিস্তারিত)।
৭ · scikit-learn-এ Linear SVM
import numpy as np
from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs
# দু'টি linearly-separable cluster
X, y = make_blobs(n_samples=80, centers=2, cluster_std=1.0,
random_state=42)
y = np.where(y == 0, -1, 1) # {0,1} → {-1,+1}
# Hard-margin-এর কাছাকাছি — C বড়
clf = LinearSVC(C=1000, loss="hinge", max_iter=10000)
clf.fit(X, y)
print(f"w = {clf.coef_[0]}")
print(f"b = {clf.intercept_[0]:.4f}")
print(f"margin width = {2 / np.linalg.norm(clf.coef_[0]):.4f}")
# কয়েকটি training point-এ functional margin
scores = X @ clf.coef_[0] + clf.intercept_[0]
print("\ntop-5 closest points (likely support vectors):")
idx = np.argsort(np.abs(scores))[:5]
for i in idx:
print(f" x={X[i]}, y={y[i]}, score={scores[i]:.3f}")
৮ · কোথায় Hard-margin ভেঙে পড়ে
- Non-separable data: বাস্তব data-তে দু'টি class পুরোপুরি আলাদা থাকে না — overlap থাকে। Hard-margin তখন infeasible।
- Outlier: একটি ভুল-labeled বিন্দু পুরো margin সংকীর্ণ করে দিতে পারে।
- Non-linear boundary: XOR-এর মত সমস্যায় কোনো সরল রেখাই কাজ করবে না।
প্রথম দু'টি সমস্যার সমাধান — soft-margin SVM (পরবর্তী পাঠ, L28)। তৃতীয়টির সমাধান — kernel trick (L29)।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ SVM ও Logistic Regression — দু'টিই linear classifier। তাহলে কেন আলাদা boundary আঁকে? Loss function-এর পার্থক্য কোথায়?
এই প্রশ্ন ML-এর একটি গভীর insight উন্মোচন করে — একই hypothesis class-এ ভিন্ন loss → ভিন্ন solution।
Logistic Regression:
- Loss: $\log(1 + e^{-y_i z_i})$ যেখানে $z_i = \mathbf{w}^\top \mathbf{x}_i + b$।
- প্রতিটি point — কাছে হোক বা দূরে — gradient-এ contribute করে। দূরের সঠিকভাবে classify হওয়া point-এও কিছুটা loss থাকে (কখনো ০ হয় না)।
- মডেল চায় প্রতিটি point-এর probability ১-এর কাছে নিতে। তাই দূরের point-গুলোও boundary-কে টানে।
SVM (hinge loss form):
- Loss: $\max(0, 1 - y_i z_i)$ — যাকে hinge loss বলে।
- $y_i z_i \geq 1$ হলে loss একদম শূন্য। অর্থাৎ margin-এর বাইরে সঠিক side-এ থাকা point-এর gradient ০।
- মডেল শুধু সীমান্তবর্তী এবং ভুল point-গুলো নিয়ে চিন্তিত — বাকিদের ignore করে।
ফলাফলের পার্থক্য:
- Outlier-এ sensitivity: Logistic regression-এ একটি দূরের outlier বহু gradient signal generate করে — boundary সরে যায়। SVM-এ যদি সেই outlier margin-এর বাইরে থাকে, প্রভাব শূন্য।
- Sparsity: SVM solution-এ অধিকাংশ training point-এর coefficient ০ (non-support vectors)। Logistic regression-এ সব point কিছু না কিছু weight রাখে।
- Calibration: Logistic regression direct probability output দেয়। SVM শুধু side বলে — probability পেতে হলে Platt scaling বা isotonic দরকার।
কখন কোনটা?
- Probability calibration জরুরি (medical, finance) → logistic regression।
- High-dim, কম sample, outlier আছে → SVM।
- Non-linear boundary দরকার, আবার scalable চাই → SVM with RBF kernel বা neural net।
মূল উপলব্ধি: "Linear classifier" — একটি family, একটা specific algorithm নয়। Loss function বদলালেই behavior সম্পূর্ণ ভিন্ন। SVM হলো "geometric" ভাবনা — দূরত্ব ও margin; logistic regression হলো "probabilistic" ভাবনা — likelihood ও MLE।
প্র ০২ "Maximum margin" ভাল — এই দাবির পেছনে theoretical justification কী? কেন বড় margin generalization ভাল করে?
এই প্রশ্নের উত্তর Vapnik-এর statistical learning theory-তে। SVM-এর জন্ম এই গাণিতিক ভিত্তি থেকে — "ভাল চলে" বলে নয়, "তত্ত্ব বলেছিল চলবে"।
(১) VC dimension ও margin:
- VC dimension একটি hypothesis class-এর "ক্ষমতা" পরিমাপ — কত পয়েন্ট shatter করতে পারে।
- Generic hyperplane-এর VC dim = $d+1$ ($d$ ফিচার সংখ্যা)। তাই high-dim-এ overfit risk।
- কিন্তু — margin-এর constraint যোগ করলে effective VC dim কমে। Theorem (Vapnik): margin $\gamma$, data radius $R$ — তবে effective dim $\leq R^2/\gamma^2$।
- বড় margin = ছোট effective dimension = generalization bound টাইট।
(২) Geometric robustness:
- Test point training point থেকে কিছু "সরে" থাকে (noise, sampling)।
- চওড়া margin মানে — সেই সরে যাওয়াকে "শোষণ" করার জায়গা আছে।
- কাছ ঘেঁষা boundary-তে ক্ষুদ্র perturbation = wrong class। চওড়া margin-এ — same perturbation = এখনো right class।
(৩) Occam's razor (modern view):
- $\|\mathbf{w}\|$ ছোট = "সরল" function।
- সরল function কম over-fit করে।
- SVM-এর objective $\tfrac{1}{2}\|\mathbf{w}\|^2$ মূলত L2 regularizationL2 regularizationL15-এ Ridge-এ পড়েছেন। weight-এর square sum penalty। সরল মডেলকে favor — overfitting কমায়। — Ridge regression-এর সাথে পরিচয়।
(৪) Empirical evidence:
- ২০০০-এর দশকে text classification, OCR, gene expression — সর্বত্র SVM SOTA ছিল।
- ছোট sample, high feature dim — SVM-এর favorite scenario। medical (১০০ patient, ১০,০০০ gene)।
(৫) Caveat — modern context:
- Deep networks millions parameter দিয়েও দারুণ generalize করে — যা VC theory ব্যাখ্যা করতে পারে না।
- "Implicit margin" — SGD itself low-norm solution-এ converge (Soudry et al., ২০১৭)।
- আজকের NN-এ "double descent" phenomenon — classical theory বিভ্রান্ত করে।
বাংলাদেশ context: ছোট ডেটা (১,০০০ নমুনা) ও অনেক feature (৫০০+ — যেমন genomics, fraud feature engineering) — SVM আজও practical first choice। GPU বা বিশাল dataset না থাকলে SVM প্রায়ই deep net-কে হারায়।
মূল উপলব্ধি: Margin মানে "buffer" — সংখ্যাতাত্ত্বিক ও geometric দু'অর্থেই। Vapnik-এর theory ছিল প্রথম formal proof: simpler-stable model আরও ভাল test-error দেয়। আজকের সব regularization, Lipschitz constraint, data augmentation — এই insight-এর উত্তরাধিকারী।
প্র ০৩ SVM-এর objective $\tfrac{1}{2}\|\mathbf{w}\|^2$ minimize করছে। কিন্তু $\|\mathbf{w}\| \to 0$ হলে তো margin অসীম হবে — কেন trivial solution হয় না?
চমৎকার প্রশ্ন — এই তীক্ষ্ণতা SVM constraint-এর ভূমিকা পরিষ্কার করে।
সমস্যা: যদি constraint না থাকত, অবশ্যই $\mathbf{w} = \mathbf{0}$ minimum হতো। কিন্তু আছে:
$$y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1 \quad \forall i$$
$\mathbf{w} = \mathbf{0}$ দিলে কী হয়? Constraint হয় $y_i \cdot b \geq 1$ — অর্থাৎ সব $y_i$-এর জন্য $b$-কে ১-এর সমান বা বেশি হতে হবে। কিন্তু $y_i \in \{+1, -1\}$ — মিশ্র। তাই $b \geq 1$ এবং $-b \geq 1$ একসাথে — অসম্ভব। তাই $\mathbf{w} = \mathbf{0}$ infeasible।
আসল trade-off:
- $\|\mathbf{w}\|$ ছোট চাই (margin বড় করতে)।
- কিন্তু constraint বলছে কোনো-না-কোনো positive distance training data থেকে রাখতে হবে — তাই $\|\mathbf{w}\|$ একদম ০ হতে পারে না।
- সমাধান একটি balance — সবচেয়ে ছোট $\mathbf{w}$ যা প্রতিটি training point margin-এর ঠিক সীমান্তে বা বাইরে রাখে।
Geometric interpretation: Closest support vector-এ $|\mathbf{w}^\top \mathbf{x} + b| = 1$ — এটা একটি scale convention। আপনি $(\mathbf{w}, b) \to (k\mathbf{w}, kb)$ scale করলে সমীকরণ একই থাকে কিন্তু constraint $k$ গুণ। SVM-এর এই convention "১" সেট করে — তাই $\|\mathbf{w}\|$ একটি absolute meaning পায়, এবং $1/\|\mathbf{w}\|$ আক্ষরিক geometric distance।
আরেকটি দৃষ্টিভঙ্গি:
- Constraint $y_i z_i \geq 1$ — অসংখ্য $\mathbf{w}$-এ সন্তুষ্ট, কিন্তু সেগুলোর মধ্যে অনেকের norm বড়।
- SVM সেই $\mathbf{w}$ বাছে যেটার norm সবচেয়ে ছোট — মানে scale convention দিয়ে normalized হলে closest-point distance সবচেয়ে বেশি।
- Geometric and algebraic objective একই point-এ মিলে যায়।
সমান্তরাল উদাহরণ:
- আপনি একটি বাড়ি কিনতে চান — সবচেয়ে কম দামে। কিন্তু constraint: "অন্তত ৩ বেডরুম, ১৫০০ sqft"। শুধু "কম দামে" বললে দাম ০-তে নামবে (impossible)। Constraint বাড়িটাকে real করে।
- SVM-ও তাই — objective আর constraint মিলে একটি unique geometric meaning।
মূল উপলব্ধি: Optimization-এ objective একা trivial হতে পারে — constraint তাকে meaningful করে। SVM-এ objective + constraint = "সবচেয়ে চওড়া রাস্তা যেখানে দু'পাশে data ফেলা যায়"। দুটোর সমন্বয় ছাড়া interpretation অর্ধেক থাকে।
প্র ০৪ আপনি bKash-এ fraud detection-এর জন্য SVM বনাম XGBoost বনাম logistic regression কোনটা বাছবেন? কী trade-off?
Production fraud detection — ML-এর একটি কঠিনতম practical setting। তিনটি model-এর strengths আলাদা।
Scenario বুঝুন (bKash-এর আনুমানিক):
- প্রতিদিন ৫-১০ মিলিয়ন transaction।
- Fraud rate ০.০১% — extremely imbalanced।
- ৫০-২০০ engineered features (amount, location, time, device, velocity)।
- Latency budget < ১০০ ms per transaction।
- Regulator audit-এর জন্য interpretation দরকার।
Logistic Regression:
- ✅ Probability calibrated — "৯২% chance fraud" বলা যায়।
- ✅ Coefficients interpretable — "amount > X চাপ দিলে fraud probability $e^{\beta}$ গুণ"।
- ✅ অত্যন্ত fast inference — millisecond-এর কম।
- ❌ Linear — non-linear interaction (e.g., amount × time × location) miss।
- ❌ Manual feature crossing দরকার — labor-intensive।
Linear SVM:
- ✅ Robust — outlier-এ logistic-এর চেয়ে ভাল।
- ✅ High-dim (১০০০+ feature) sparse data-এ shine।
- ❌ Probability পেতে Platt scaling লাগে — extra step।
- ❌ Imbalanced class-এ class_weight tune করতে হয়।
- ❌ Linear (kernel ছাড়া) — same limitation।
RBF SVM:
- ✅ Non-linear boundary — complex pattern ধরে।
- ❌ Training $O(n^2)$-$O(n^3)$ — মিলিয়ন sample-এ অব্যবহারিক।
- ❌ Inference-এ support vectors-এর সাথে kernel compute — slow।
- ❌ Black-box — interpretation কঠিন।
XGBoost:
- ✅ Non-linear, automatic feature interaction।
- ✅ Imbalanced data-এ
scale_pos_weightsimple। - ✅ Mixed feature type (categorical + numeric) সহজে।
- ✅ Million-row scale-এ comfortable।
- ✅ SHAP-এ interpretation সম্ভব।
- ✅ আজকের industry default — bKash, Daraz, পাঠাও, brac sb-এ সম্ভাব্য।
- ❌ Hyperparameter tuning costly।
আমার production recommendation:
- Tier 1 model: XGBoost — main scoring engine।
- Tier 2 (interpretability): Logistic regression — regulator dashboard, "কেন এই decision"।
- Tier 3 (anomaly arm): One-class SVM বা isolation forest — unknown unknown ধরতে।
- Ensemble — average বা stacking — final score।
SVM আজও কোথায় win করে?
- Text classification (small to medium corpus, TF-IDF features) — Linear SVM still strong baseline।
- Bioinformatics (gene expression — n=১০০, p=১০,০০০)।
- Image classification with hand-crafted features (HOG + SVM) — pre-2012 era।
- Embedded/edge devices — ছোট model, fast inference।
- Single-class anomaly — One-class SVM।
মূল উপলব্ধি: "সবচেয়ে ভাল model" নেই — context-এ ভাল model আছে। SVM-এর shine moment ছিল ২০০০-২০১২। আজকের scaled tabular data-এ XGBoost dominant। কিন্তু SVM-এর গাণিতিক elegance ও geometric intuition — every ML engineer-এর mental toolkit-এ থাকা উচিত।
অনুশীলন
-
হিসাব করুন: ২-D-তে hyperplane $\mathbf{w} = (1, 1)$, $b = -1$। বিন্দু $(2, 2)$ থেকে এর দূরত্ব কত? এটি কোন side-এ?
- $\mathbf{w}^\top \mathbf{x} + b = 1\cdot 2 + 1\cdot 2 - 1 = 3$।
- $\|\mathbf{w}\| = \sqrt{1^2 + 1^2} = \sqrt{2}$।
- দূরত্ব $= |3| / \sqrt{2} = 3/\sqrt{2} \approx 2.121$।
- Score positive — তাই $+1$ side-এ।
-
চিন্তা: ৩টি বিন্দু — $(0, 0)$ class $-1$, $(2, 0)$ ও $(0, 2)$ class $+1$। হাতে আঁকুন — maximum-margin hyperplane কোথায়? Margin কত?
Symmetry দিয়ে — boundary $x + y = 1$ (সব closest point-এর সমদূরত্ব)।
- $\mathbf{w} = (1, 1)$, $b = -1$ scaling-এ — closest point-এ $|score| = 1$ মিলে যায় কিনা চেক:
- $(0,0)$: $0+0-1 = -1$, $y_i \cdot z_i = -1\cdot -1 = 1$ ✓
- $(2,0)$: $2+0-1 = 1$, $y_i \cdot z_i = 1\cdot 1 = 1$ ✓
- তাই margin $= 2/\|\mathbf{w}\| = 2/\sqrt{2} = \sqrt{2} \approx 1.414$।
- তিনটি বিন্দুই support vector।
-
NumPy-তে চেষ্টা: পাঠের code-cell চালিয়ে দেখুন — কতটি point-এর $|score| \approx 1$?
import numpy as np from sklearn.svm import LinearSVC from sklearn.datasets import make_blobs X, y = make_blobs(n_samples=80, centers=2, cluster_std=1.0, random_state=42) y = np.where(y == 0, -1, 1) clf = LinearSVC(C=1000, loss="hinge", max_iter=10000).fit(X, y) scores = X @ clf.coef_[0] + clf.intercept_[0] sv_count = np.sum(np.abs(np.abs(scores) - 1) < 0.05) print(f"approx support vectors: {sv_count}")সাধারণত ৩-৫টি — পুরো dataset-এর ১০%-এর কম। এটাই SVM-এর sparsity।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ২৮ · Soft-margin SVM পরবর্তী পাঠ বাস্তব data-তে overlap থাকে — slack variable দিয়ে hard constraint শিথিল।
- পাঠ ২৬ · Feature Importance আগের পাঠ SVM-এর coefficient-ও importance — কিন্তু interpretation ভিন্ন।
- পাঠ ২৯ · Kernel trick এই পাঠের সাথে সম্পর্কিত Dual form-এ data শুধু dot-product হিসেবে আসে — তাই kernel।
- সব AI Courses ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps।