Study Guide: Support Vector Machines (SVMs) – Module 9

1. Introduction to Support Vector Machines

Support Vector Machines (SVMs) are powerful supervised learning algorithms primarily used for classification tasks. The goal of SVM is to find an optimal separating hyperplane that best divides different classes of data points.

Key Concepts:

  • Linear Separability: When a dataset can be perfectly divided using a straight line (in 2D) or a hyperplane (in higher dimensions).
  • Hyperplane: A decision boundary separating different classes.
  • Margin: The distance between the closest data points (support vectors) and the hyperplane.
  • Support Vectors: Data points that lie closest to the hyperplane and influence its orientation.
  • Maximal Margin Classifier: The hyperplane that maximizes the margin.
  • Soft Margin: Introduces slack variables to allow misclassification in cases where perfect separation is impossible.

2. Vector Algebra and Hyperplanes

Understanding vector algebra is essential for SVMs.

Hyperplane Equation:

A hyperplane in \(n\)-dimensional space is defined as: \[ \beta_0 + \beta^T x = 0 \] Where: - \(\beta\) is the normal vector (perpendicular to the hyperplane). - \(x\) represents the feature vectors. - \(\beta_0\) is the bias term.

For two classes labeled \(y_i \in \{-1, 1\}\), the SVM decision boundary follows: \[ y_i (\beta^T x_i + \beta_0) \geq M \] where \(M\) is the margin.

Finding the Optimal Hyperplane

The objective is to maximize the margin, which translates to minimizing \(||\beta||\) subject to: \[ y_i (\beta^T x_i + \beta_0) \geq 1 \] This is a convex optimization problem solved using Lagrange multipliers.

3. Handling Non-Separable Data

SVM introduces slack variables \(\xi_i\) to allow some misclassification: \[ y_i (\beta^T x_i + \beta_0) \geq 1 - \xi_i \] where \(\xi_i \geq 0\) represents the margin violation amount.

New optimization objective: \[ \min_{\beta, \beta_0, \xi} \frac{1}{2} ||\beta||^2 + C \sum \xi_i \] where \(C\) is a regularization parameter controlling the trade-off between margin maximization and classification errors.

4. Kernel Trick for Non-Linear Data

If a dataset is not linearly separable, we map it to a higher-dimensional space using kernels: \[ K(x_i, x_j) = \phi(x_i)^T \phi(x_j) \]

Common Kernels:

  • Linear Kernel: \(K(x_i, x_j) = x_i^T x_j\)
  • Polynomial Kernel: \(K(x_i, x_j) = (x_i^T x_j + c)^d\)
  • Radial Basis Function (RBF) Kernel: \(K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2)\)

The kernel trick enables SVM to operate in higher-dimensional spaces without explicit transformations.

5. Mathematical Formulation of SVM

Hard Margin SVM (Linearly Separable)

\[ \min_{\beta, \beta_0} \frac{1}{2} ||\beta||^2 \] subject to: \[ y_i (\beta^T x_i + \beta_0) \geq 1 \]

Soft Margin SVM (Allowing Misclassification)

\[ \min_{\beta, \beta_0, \xi} \frac{1}{2} ||\beta||^2 + C \sum \xi_i \] subject to: \[ y_i (\beta^T x_i + \beta_0) \geq 1 - \xi_i, \quad \xi_i \geq 0 \]

6. Implementing SVM in Python

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Generate synthetic dataset
X, y = make_classification(n_samples=100, n_features=2, n_classes=2, n_redundant=0, random_state=42)
y = np.where(y == 0, -1, 1)  # Convert labels to {-1, 1}

# Split into train-test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train SVM classifier
svm = SVC(kernel='linear', C=1.0)
svm.fit(X_train, y_train)

# Predictions
y_pred = svm.predict(X_test)
print(f'Accuracy: {accuracy_score(y_test, y_pred):.2f}')

# Plot decision boundary
def plot_svm_decision_boundary(X, y, model):
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm', edgecolors='k')
    
    ax = plt.gca()
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()
    
    xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50),
                         np.linspace(ylim[0], ylim[1], 50))
    
    Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    
    ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], linestyles=['--', '-', '--'])
    
    plt.title("SVM Decision Boundary")
    plt.show()

plot_svm_decision_boundary(X_train, y_train, svm)

7. Key Takeaways

  • SVM finds the optimal hyperplane that maximizes margin.
  • Slack variables \(\xi\) allow for soft-margin classification.
  • Kernels enable non-linear classification by transforming data into higher dimensions.
  • SVM is effective for both linear and non-linear classification problems.
  • The regularization parameter \(C\) controls the trade-off between margin maximization and misclassification tolerance.

8. Practical Considerations

  • Choose an appropriate kernel based on dataset complexity.
  • Hyperparameter tuning (\(C\), \(\gamma\) for RBF kernel) is crucial and can be optimized using grid search and cross-validation.
  • SVMs scale poorly with very large datasets (due to quadratic complexity); consider alternative classifiers like Random Forests or Deep Learning for big data.

Additional Resources

LS0tDQp0aXRsZTogIlFUVyAtIDczMzMgTW9kdWxlIDkgLSBWZWN0b3IgTWFjaGlvbmVzIC0gY29uZGVuc2VkIg0KYXV0aG9yOiAiSmVzc2ljYSBNY1BoYXVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQoNCiMgU3R1ZHkgR3VpZGU6IFN1cHBvcnQgVmVjdG9yIE1hY2hpbmVzIChTVk1zKSDigJMgTW9kdWxlIDkNCg0KIyMgKioxLiBJbnRyb2R1Y3Rpb24gdG8gU3VwcG9ydCBWZWN0b3IgTWFjaGluZXMqKg0KU3VwcG9ydCBWZWN0b3IgTWFjaGluZXMgKFNWTXMpIGFyZSBwb3dlcmZ1bCBzdXBlcnZpc2VkIGxlYXJuaW5nIGFsZ29yaXRobXMgcHJpbWFyaWx5IHVzZWQgZm9yIGNsYXNzaWZpY2F0aW9uIHRhc2tzLiBUaGUgZ29hbCBvZiBTVk0gaXMgdG8gZmluZCBhbiBvcHRpbWFsIHNlcGFyYXRpbmcgaHlwZXJwbGFuZSB0aGF0IGJlc3QgZGl2aWRlcyBkaWZmZXJlbnQgY2xhc3NlcyBvZiBkYXRhIHBvaW50cy4NCg0KIyMjICoqS2V5IENvbmNlcHRzOioqDQotICoqTGluZWFyIFNlcGFyYWJpbGl0eToqKiBXaGVuIGEgZGF0YXNldCBjYW4gYmUgcGVyZmVjdGx5IGRpdmlkZWQgdXNpbmcgYSBzdHJhaWdodCBsaW5lIChpbiAyRCkgb3IgYSBoeXBlcnBsYW5lIChpbiBoaWdoZXIgZGltZW5zaW9ucykuDQotICoqSHlwZXJwbGFuZToqKiBBIGRlY2lzaW9uIGJvdW5kYXJ5IHNlcGFyYXRpbmcgZGlmZmVyZW50IGNsYXNzZXMuDQotICoqTWFyZ2luOioqIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjbG9zZXN0IGRhdGEgcG9pbnRzIChzdXBwb3J0IHZlY3RvcnMpIGFuZCB0aGUgaHlwZXJwbGFuZS4NCi0gKipTdXBwb3J0IFZlY3RvcnM6KiogRGF0YSBwb2ludHMgdGhhdCBsaWUgY2xvc2VzdCB0byB0aGUgaHlwZXJwbGFuZSBhbmQgaW5mbHVlbmNlIGl0cyBvcmllbnRhdGlvbi4NCi0gKipNYXhpbWFsIE1hcmdpbiBDbGFzc2lmaWVyOioqIFRoZSBoeXBlcnBsYW5lIHRoYXQgbWF4aW1pemVzIHRoZSBtYXJnaW4uDQotICoqU29mdCBNYXJnaW46KiogSW50cm9kdWNlcyBzbGFjayB2YXJpYWJsZXMgdG8gYWxsb3cgbWlzY2xhc3NpZmljYXRpb24gaW4gY2FzZXMgd2hlcmUgcGVyZmVjdCBzZXBhcmF0aW9uIGlzIGltcG9zc2libGUuDQoNCiMjICoqMi4gVmVjdG9yIEFsZ2VicmEgYW5kIEh5cGVycGxhbmVzKioNClVuZGVyc3RhbmRpbmcgdmVjdG9yIGFsZ2VicmEgaXMgZXNzZW50aWFsIGZvciBTVk1zLg0KDQojIyMgKipIeXBlcnBsYW5lIEVxdWF0aW9uOioqDQpBIGh5cGVycGxhbmUgaW4gJG4kLWRpbWVuc2lvbmFsIHNwYWNlIGlzIGRlZmluZWQgYXM6DQpcWyBcYmV0YV8wICsgXGJldGFeVCB4ID0gMCBcXQ0KV2hlcmU6DQotICRcYmV0YSQgaXMgdGhlIG5vcm1hbCB2ZWN0b3IgKHBlcnBlbmRpY3VsYXIgdG8gdGhlIGh5cGVycGxhbmUpLg0KLSAkeCQgcmVwcmVzZW50cyB0aGUgZmVhdHVyZSB2ZWN0b3JzLg0KLSAkXGJldGFfMCQgaXMgdGhlIGJpYXMgdGVybS4NCg0KRm9yIHR3byBjbGFzc2VzIGxhYmVsZWQgJHlfaSBcaW4gXHstMSwgMVx9JCwgdGhlIFNWTSBkZWNpc2lvbiBib3VuZGFyeSBmb2xsb3dzOg0KXFsgeV9pIChcYmV0YV5UIHhfaSArIFxiZXRhXzApIFxnZXEgTSBcXQ0Kd2hlcmUgJE0kIGlzIHRoZSBtYXJnaW4uDQoNCiMjIyAqKkZpbmRpbmcgdGhlIE9wdGltYWwgSHlwZXJwbGFuZSoqDQpUaGUgb2JqZWN0aXZlIGlzIHRvIG1heGltaXplIHRoZSBtYXJnaW4sIHdoaWNoIHRyYW5zbGF0ZXMgdG8gbWluaW1pemluZyAkfHxcYmV0YXx8JCBzdWJqZWN0IHRvOg0KXFsgeV9pIChcYmV0YV5UIHhfaSArIFxiZXRhXzApIFxnZXEgMSBcXQ0KVGhpcyBpcyBhIGNvbnZleCBvcHRpbWl6YXRpb24gcHJvYmxlbSBzb2x2ZWQgdXNpbmcgTGFncmFuZ2UgbXVsdGlwbGllcnMuDQoNCiMjICoqMy4gSGFuZGxpbmcgTm9uLVNlcGFyYWJsZSBEYXRhKioNClNWTSBpbnRyb2R1Y2VzIHNsYWNrIHZhcmlhYmxlcyAkXHhpX2kkIHRvIGFsbG93IHNvbWUgbWlzY2xhc3NpZmljYXRpb246DQpcWyB5X2kgKFxiZXRhXlQgeF9pICsgXGJldGFfMCkgXGdlcSAxIC0gXHhpX2kgXF0NCndoZXJlICRceGlfaSBcZ2VxIDAkIHJlcHJlc2VudHMgdGhlIG1hcmdpbiB2aW9sYXRpb24gYW1vdW50Lg0KDQpOZXcgb3B0aW1pemF0aW9uIG9iamVjdGl2ZToNClxbIFxtaW5fe1xiZXRhLCBcYmV0YV8wLCBceGl9IFxmcmFjezF9ezJ9IHx8XGJldGF8fF4yICsgQyBcc3VtIFx4aV9pIFxdDQp3aGVyZSAkQyQgaXMgYSByZWd1bGFyaXphdGlvbiBwYXJhbWV0ZXIgY29udHJvbGxpbmcgdGhlIHRyYWRlLW9mZiBiZXR3ZWVuIG1hcmdpbiBtYXhpbWl6YXRpb24gYW5kIGNsYXNzaWZpY2F0aW9uIGVycm9ycy4NCg0KIyMgKio0LiBLZXJuZWwgVHJpY2sgZm9yIE5vbi1MaW5lYXIgRGF0YSoqDQpJZiBhIGRhdGFzZXQgaXMgbm90IGxpbmVhcmx5IHNlcGFyYWJsZSwgd2UgbWFwIGl0IHRvIGEgaGlnaGVyLWRpbWVuc2lvbmFsIHNwYWNlIHVzaW5nIGtlcm5lbHM6DQpcWyBLKHhfaSwgeF9qKSA9IFxwaGkoeF9pKV5UIFxwaGkoeF9qKSBcXQ0KDQojIyMgKipDb21tb24gS2VybmVsczoqKg0KLSAqKkxpbmVhciBLZXJuZWw6KiogJEsoeF9pLCB4X2opID0geF9pXlQgeF9qJA0KLSAqKlBvbHlub21pYWwgS2VybmVsOioqICRLKHhfaSwgeF9qKSA9ICh4X2leVCB4X2ogKyBjKV5kJA0KLSAqKlJhZGlhbCBCYXNpcyBGdW5jdGlvbiAoUkJGKSBLZXJuZWw6KiogJEsoeF9pLCB4X2opID0gXGV4cCgtXGdhbW1hIHx8eF9pIC0geF9qfHxeMikkDQoNClRoZSBrZXJuZWwgdHJpY2sgZW5hYmxlcyBTVk0gdG8gb3BlcmF0ZSBpbiBoaWdoZXItZGltZW5zaW9uYWwgc3BhY2VzIHdpdGhvdXQgZXhwbGljaXQgdHJhbnNmb3JtYXRpb25zLg0KDQojIyAqKjUuIE1hdGhlbWF0aWNhbCBGb3JtdWxhdGlvbiBvZiBTVk0qKg0KIyMjICoqSGFyZCBNYXJnaW4gU1ZNIChMaW5lYXJseSBTZXBhcmFibGUpKioNClxbIFxtaW5fe1xiZXRhLCBcYmV0YV8wfSBcZnJhY3sxfXsyfSB8fFxiZXRhfHxeMiBcXQ0Kc3ViamVjdCB0bzoNClxbIHlfaSAoXGJldGFeVCB4X2kgKyBcYmV0YV8wKSBcZ2VxIDEgXF0NCg0KIyMjICoqU29mdCBNYXJnaW4gU1ZNIChBbGxvd2luZyBNaXNjbGFzc2lmaWNhdGlvbikqKg0KXFsgXG1pbl97XGJldGEsIFxiZXRhXzAsIFx4aX0gXGZyYWN7MX17Mn0gfHxcYmV0YXx8XjIgKyBDIFxzdW0gXHhpX2kgXF0NCnN1YmplY3QgdG86DQpcWyB5X2kgKFxiZXRhXlQgeF9pICsgXGJldGFfMCkgXGdlcSAxIC0gXHhpX2ksIFxxdWFkIFx4aV9pIFxnZXEgMCBcXQ0KDQojIyAqKjYuIEltcGxlbWVudGluZyBTVk0gaW4gUHl0aG9uKioNCmBgYHB5dGhvbg0KaW1wb3J0IG51bXB5IGFzIG5wDQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0DQpmcm9tIHNrbGVhcm4uc3ZtIGltcG9ydCBTVkMNCmZyb20gc2tsZWFybi5kYXRhc2V0cyBpbXBvcnQgbWFrZV9jbGFzc2lmaWNhdGlvbg0KZnJvbSBza2xlYXJuLm1vZGVsX3NlbGVjdGlvbiBpbXBvcnQgdHJhaW5fdGVzdF9zcGxpdA0KZnJvbSBza2xlYXJuLm1ldHJpY3MgaW1wb3J0IGFjY3VyYWN5X3Njb3JlDQoNCiMgR2VuZXJhdGUgc3ludGhldGljIGRhdGFzZXQNClgsIHkgPSBtYWtlX2NsYXNzaWZpY2F0aW9uKG5fc2FtcGxlcz0xMDAsIG5fZmVhdHVyZXM9Miwgbl9jbGFzc2VzPTIsIG5fcmVkdW5kYW50PTAsIHJhbmRvbV9zdGF0ZT00MikNCnkgPSBucC53aGVyZSh5ID09IDAsIC0xLCAxKSAgIyBDb252ZXJ0IGxhYmVscyB0byB7LTEsIDF9DQoNCiMgU3BsaXQgaW50byB0cmFpbi10ZXN0IHNldHMNClhfdHJhaW4sIFhfdGVzdCwgeV90cmFpbiwgeV90ZXN0ID0gdHJhaW5fdGVzdF9zcGxpdChYLCB5LCB0ZXN0X3NpemU9MC4zLCByYW5kb21fc3RhdGU9NDIpDQoNCiMgVHJhaW4gU1ZNIGNsYXNzaWZpZXINCnN2bSA9IFNWQyhrZXJuZWw9J2xpbmVhcicsIEM9MS4wKQ0Kc3ZtLmZpdChYX3RyYWluLCB5X3RyYWluKQ0KDQojIFByZWRpY3Rpb25zDQp5X3ByZWQgPSBzdm0ucHJlZGljdChYX3Rlc3QpDQpwcmludChmJ0FjY3VyYWN5OiB7YWNjdXJhY3lfc2NvcmUoeV90ZXN0LCB5X3ByZWQpOi4yZn0nKQ0KDQojIFBsb3QgZGVjaXNpb24gYm91bmRhcnkNCmRlZiBwbG90X3N2bV9kZWNpc2lvbl9ib3VuZGFyeShYLCB5LCBtb2RlbCk6DQogICAgcGx0LnNjYXR0ZXIoWFs6LCAwXSwgWFs6LCAxXSwgYz15LCBjbWFwPSdjb29sd2FybScsIGVkZ2Vjb2xvcnM9J2snKQ0KICAgIA0KICAgIGF4ID0gcGx0LmdjYSgpDQogICAgeGxpbSA9IGF4LmdldF94bGltKCkNCiAgICB5bGltID0gYXguZ2V0X3lsaW0oKQ0KICAgIA0KICAgIHh4LCB5eSA9IG5wLm1lc2hncmlkKG5wLmxpbnNwYWNlKHhsaW1bMF0sIHhsaW1bMV0sIDUwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBucC5saW5zcGFjZSh5bGltWzBdLCB5bGltWzFdLCA1MCkpDQogICAgDQogICAgWiA9IG1vZGVsLmRlY2lzaW9uX2Z1bmN0aW9uKG5wLmNfW3h4LnJhdmVsKCksIHl5LnJhdmVsKCldKQ0KICAgIFogPSBaLnJlc2hhcGUoeHguc2hhcGUpDQogICAgDQogICAgYXguY29udG91cih4eCwgeXksIFosIGNvbG9ycz0naycsIGxldmVscz1bLTEsIDAsIDFdLCBsaW5lc3R5bGVzPVsnLS0nLCAnLScsICctLSddKQ0KICAgIA0KICAgIHBsdC50aXRsZSgiU1ZNIERlY2lzaW9uIEJvdW5kYXJ5IikNCiAgICBwbHQuc2hvdygpDQoNCnBsb3Rfc3ZtX2RlY2lzaW9uX2JvdW5kYXJ5KFhfdHJhaW4sIHlfdHJhaW4sIHN2bSkNCmBgYA0KDQojIyAqKjcuIEtleSBUYWtlYXdheXMqKg0KLSBTVk0gZmluZHMgdGhlIG9wdGltYWwgaHlwZXJwbGFuZSB0aGF0IG1heGltaXplcyBtYXJnaW4uDQotIFNsYWNrIHZhcmlhYmxlcyAkXHhpJCBhbGxvdyBmb3Igc29mdC1tYXJnaW4gY2xhc3NpZmljYXRpb24uDQotIEtlcm5lbHMgZW5hYmxlIG5vbi1saW5lYXIgY2xhc3NpZmljYXRpb24gYnkgdHJhbnNmb3JtaW5nIGRhdGEgaW50byBoaWdoZXIgZGltZW5zaW9ucy4NCi0gU1ZNIGlzIGVmZmVjdGl2ZSBmb3IgYm90aCBsaW5lYXIgYW5kIG5vbi1saW5lYXIgY2xhc3NpZmljYXRpb24gcHJvYmxlbXMuDQotIFRoZSByZWd1bGFyaXphdGlvbiBwYXJhbWV0ZXIgJEMkIGNvbnRyb2xzIHRoZSB0cmFkZS1vZmYgYmV0d2VlbiBtYXJnaW4gbWF4aW1pemF0aW9uIGFuZCBtaXNjbGFzc2lmaWNhdGlvbiB0b2xlcmFuY2UuDQoNCiMjICoqOC4gUHJhY3RpY2FsIENvbnNpZGVyYXRpb25zKioNCi0gQ2hvb3NlIGFuIGFwcHJvcHJpYXRlIGtlcm5lbCBiYXNlZCBvbiBkYXRhc2V0IGNvbXBsZXhpdHkuDQotIEh5cGVycGFyYW1ldGVyIHR1bmluZyAoJEMkLCAkXGdhbW1hJCBmb3IgUkJGIGtlcm5lbCkgaXMgY3J1Y2lhbCBhbmQgY2FuIGJlIG9wdGltaXplZCB1c2luZyBncmlkIHNlYXJjaCBhbmQgY3Jvc3MtdmFsaWRhdGlvbi4NCi0gU1ZNcyBzY2FsZSBwb29ybHkgd2l0aCB2ZXJ5IGxhcmdlIGRhdGFzZXRzIChkdWUgdG8gcXVhZHJhdGljIGNvbXBsZXhpdHkpOyBjb25zaWRlciBhbHRlcm5hdGl2ZSBjbGFzc2lmaWVycyBsaWtlIFJhbmRvbSBGb3Jlc3RzIG9yIERlZXAgTGVhcm5pbmcgZm9yIGJpZyBkYXRhLg0KDQotLS0NCiMjIyAqKkFkZGl0aW9uYWwgUmVzb3VyY2VzKioNCi0gKioiVGhlIEVsZW1lbnRzIG9mIFN0YXRpc3RpY2FsIExlYXJuaW5nIioqIOKAkyBIYXN0aWUsIFRpYnNoaXJhbmksIGFuZCBGcmllZG1hbi4NCi0gKipTY2lraXQtTGVhcm4gRG9jdW1lbnRhdGlvbjoqKiBodHRwczovL3NjaWtpdC1sZWFybi5vcmcvc3RhYmxlL21vZHVsZXMvc3ZtLmh0bWwNCg0K