Support vectors are the specific training points closest to the decision boundary — the only points that actually matter for defining where the boundary and margin sit. Every other point could vanish from the training set entirely, and the boundary wouldn't move at all.
Which Points Become Support Vectors
Using the worked example from SVM Margin (\(w=[2,0]\), \(b=-4\)): points where \(y_i(w^Tx_i+b)=1\) exactly — sitting precisely on one of the two margin lines — are support vectors. Points where \(y_i(w^Tx_i+b) > 1\) are safely on the correct side, contributing nothing to the boundary's position.
| Point | Class | Functional Margin | Support Vector? |
|---|---|---|---|
| (2.5, 0) | +1 | 1.0 | Yes — exactly on the margin |
| (3, 1) | +1 | 2.0 | No — safely inside |
| (1.5, 0) | −1 | 1.0 | Yes — exactly on the margin |
| (1, 1) | −1 | 2.0 | No — safely inside |
Why This Property Is Genuinely Useful
Because the model's decision boundary depends only on the support vectors — not the full training set — SVM is memory-efficient at prediction time (you only need to store the support vectors, which are often a small fraction of the training data) and, in principle, robust to non-support-vector outliers far from the boundary.
Inspecting Support Vectors in Python
from sklearn.svm import SVC
import numpy as np
X_train = np.array([[2.5,0],[3,1],[1.5,0],[1,1]])
y_train = np.array([1, 1, -1, -1])
model = SVC(kernel="linear", C=1000) # large C to approximate a hard margin
model.fit(X_train, y_train)
print(model.support_) # indices of the training points that became support vectors
print(model.support_vectors_) # the actual coordinates
print(model.n_support_) # how many support vectors per class
Expected output: with this clean, well-separated data, roughly 2 support vectors (one near each class boundary) — matching the hand-computed example above.
Support Vectors and the C Hyperparameter
With a soft margin (see SVM Classification), points that violate the margin (or are even misclassified) also become support vectors, since they directly influence the optimization. A small \(C\) tends to produce more support vectors (more points allowed to violate the margin, all of them influencing the fit); a large \(C\) tends to produce fewer support vectors (only the true borderline cases).
Practical Use Cases
- Understanding why SVM predictions are fast even with a large training set — prediction only involves comparing against the (typically much smaller) set of support vectors
- Diagnosing model complexity — a very high proportion of training points becoming support vectors can signal an overly complex or poorly regularized model
Common Mistakes
- Assuming all training points are used equally in the final model — only support vectors matter; the rest could be deleted post-training without affecting predictions.
- Treating a high number of support vectors relative to training set size as automatically bad — it depends on context, but it's often a signal worth investigating (e.g. an overly small C, or genuinely overlapping classes).
Interview Relevance
Q: "Why is 'Support Vector Machine' named after support vectors specifically?" Because the entire model — the decision boundary and margin — is completely determined by these specific points; the rest of the training data is, mathematically, irrelevant to the final model once training is complete, which is a fairly unique property among classical ML algorithms.
Practice Question
If nearly every training point in your dataset becomes a support vector after fitting an SVM, what does this suggest about the chosen value of C or the separability of the data?