Hoppa till innehållet
AI-grafen
E· Universitetklassisk-ml· ca 60 min· utvecklande· verifierad 2026-09-20

Stödvektormaskiner (SVM)

Kunna förklara marginalmaximering och kärntricket.

Förkunskaper

Intuition

Många linjer kan separera två klasser. SVM väljer den som ligger längst från båda — den med störst marginal.

Bara de punkter som ligger precis på marginalens kant påverkar lösningen. De kallas stödvektorer, och resten av datan kan tas bort utan att modellen ändras. Det är ovanligt bland ML-metoder och gör SVM robust mot punkter långt från gränsen.

Mjuk marginal: verklig data är sällan perfekt separerbar. Parametern C styr avvägningen — litet C tillåter fler felklassificeringar för bredare marginal, stort C prioriterar att klassificera allt rätt (och riskerar överanpassning).

Formellt

Primalproblemet (mjuk marginal): min⁡w,b,ξ 12∥w∥2+C∑iξis.t.yi(w⊤xi+b)≥1−ξi, ξi≥0\min_{w,b,\xi}\ \tfrac12\|w\|^2 + C\sum_i \xi_i \quad\text{s.t.}\quad y_i(w^\top x_i + b)\ge 1-\xi_i,\ \xi_i\ge 0

Marginalens bredd är 2/∥w∥2/\|w\|, så att minimera ∥w∥2\|w\|^2 är att maximera marginalen. Problemet är konvext — en global optimum, inga lokala fällor, deterministiskt resultat.

Dualformen innehåller datan bara genom skalärprodukter xi⊤xjx_i^\top x_j. Det öppnar för kärntricket: byt ut skalärprodukten mot en kärnfunktion K(xi,xj)K(x_i,x_j) som motsvarar en skalärprodukt i ett högre-dimensionellt rum — utan att någonsin beräkna koordinaterna där.

KärnaK(x,z)K(x,z)Effekt
Linjärx⊤zx^\top zrak gräns
Polynom(γx⊤z+r)d(\gamma x^\top z + r)^dpolynomgräns
RBFexp⁡(−γ∥x−z∥2)\exp(-\gamma\|x-z\|^2)oändligtdimensionellt rum, mycket flexibel

När SVM är rätt val i dag: små till medelstora dataset (< ~50 000 exempel), höga dimensioner relativt antalet exempel (text med TF-IDF), och när determinism och teoretiska garantier värderas. När det inte är det: stora dataset (träningen skalar ungefär O(n2)O(n^2)–O(n3)O(n^3)), och när sannolikheter behövs (SVM ger avstånd, inte kalibrerade sannolikheter — Platt-skalning krävs).

Kod

import numpy as np
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV

# Skalning är OBLIGATORISK för SVM — avstånd är kärnan i metoden
pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
sok = GridSearchCV(pipe, {"svc__C": [0.1, 1, 10, 100],
                          "svc__gamma": ["scale", 0.01, 0.1, 1]},
                   cv=5, scoring="f1_macro", n_jobs=-1).fit(X_tr, y_tr)
print(sok.best_params_, round(sok.best_score_, 3))

modell = sok.best_estimator_
svc = modell[-1]
print("stödvektorer:", svc.n_support_, "av", len(X_tr))
# stödvektorer: [43 39] av 800   ← bara 10 % av datan definierar gränsen

C och gamma hör ihop: stort C och stort gamma ger nästan alltid överanpassning (gränsen slingrar sig runt varje punkt). Sök dem tillsammans i ett rutnät, aldrig var för sig.

Behärskning innebär

  • Förklarar marginalmaximering och stödvektorer
  • Beskriver kärntricket
  • Vet när SVM är ett bra val

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser