পাঠ ২৭ · ৪৫-এর মধ্যে · মডিউল ৪
Home / AI Courses / Machine Learning / SVM theory

SVM তত্ত্ব — maximum margin

Support Vector Machine — the maximum-margin classifier
৯ মিনিট পড়া মাঝারি · Intermediate NumPy + sklearn

এই পাঠে যা শিখবেন

  • হাইপারপ্লেন কী — ২-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-এর উত্তর — সবচেয়ে চওড়া রাস্তা যে রেখা ফেলতে পারে, সেটাই।

SVM-এর intuition

একটি দু'লেনের রাস্তা ভাবুন — মাঝখানে সাদা দাগ (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\}$$

ঢাকার গুলশান-বনানীর মাঝে পুরোনো লেক ভাবুন — দু'পাড়ে দু'টি area। লেক হলো decision boundary। লেকের একপাশে দাঁড়িয়ে ($\mathbf{w}^\top \mathbf{x} + b > 0$) মানে গুলশান, অন্যপাশে ($< 0$) বনানী। লেকের কতটা চওড়া — সেটাই margin। যত চওড়া, তত আত্মবিশ্বাসে বলা যায় কে কোন এলাকায়।

৩ · 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। এদের নাড়াচাড়া করলেই হাইপারপ্লেন বদলায়।

Sparsity insight

১০,০০০ training point-এর মধ্যে support vector হতে পারে মাত্র ৩০-৫০টি। এই sparsity SVM-এর বড় শক্তি — মডেলটা memorize করে শুধু critical boundary point-গুলোই, পুরো dataset নয়। Logistic regression-এ সব point gradient-এ contribute করে, SVM-এ শুধু support vectors।

SVM — সবচেয়ে চওড়া রাস্তা maximum-margin separator + + + + + + + + × × × × × × × w·x + b = 0 = +1 = -1 margin = 2/‖w‖ support vector
SVM সেই হাইপারপ্লেন বাছে যার দু'পাশের shoulder সবচেয়ে চওড়া। সবুজ গোলায় চিহ্নিত — support vectors, কেবল এরাই decision boundary নির্ধারণ করে।

৬ · 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-এ বিস্তারিত)।
Dual form-এর full derivation এই পাঠের scope-এর বাইরে। মূল কথা — SVM শেষমেশ এমন একটা সমস্যায় রূপ নেয় যেখানে data শুধু dot-product হিসেবে আসে। এটাই kernel-এর জন্য SVM-কে এত শক্তিশালী করেছে।

৭ · scikit-learn-এ Linear SVM

Python · sklearn
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}")

    
Output-এ দেখুন — কয়েকটি point-এর $|score| \approx 1$, এরাই support vector (margin-এর কিনারায়)। বাকিদের $|score| \gg 1$, decision-এ এদের ভূমিকা নেই।

৮ · কোথায় 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-এর গণিত প্রথমে কঠিন লাগতে পারে — Lagrangian, KKT, dual। চিন্তা নেই: এই পাঠে শুধু "maximum margin" intuition ও primal form বুঝলেই চলবে। L28-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_weight simple।
  • ✅ 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-এ থাকা উচিত।

অনুশীলন

  1. হিসাব করুন: ২-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-এ।
  2. চিন্তা: ৩টি বিন্দু — $(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।
  3. 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-এ আপনার পরবর্তী পদক্ষেপ

কোড রানার কাজ না করলে? Google Colab ব্যবহার করুন — Google-এর ফ্রি অনলাইন Python পরিবেশ।
পূর্ববর্তী পাঠ
পাঠ ২৬ · Feature Importance