Machine Learning Academy · leksjon

Klassifikator med maksimal margin: Støttevektorer og hyperplan

De vil visualisere maksimering av marginen på et todimensjonalt eksempeldata sett, identifisere støttevektorer og forstå hvorfor maksimal margin forbedrer generalisering.

Leksjon 1 av 413 trinn

Klassifikator med maksimal margin: Støttevektorer og hyperplan er en gratis leksjon i Machine Learning Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Machine Learning Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Machine Learning Academy inneholder totalt 4 leksjoner.

Grunntanken bak SVM-er

Support Vector Machines (SVM-er) er klassifikatorer som finner den beste skillelinjen mellom to klasser. Når flere grenser kan skille klassene, hvilken bør De velge? SVM-ens svar er elegant: Velg grensen som er så langt som mulig fra hvert treningseksempel. Denne grensen med maksimal avstand kalles hyperplanet med maksimal margin, og det teoretiske grunnlaget for SVM-er garanterer at den generaliserer bedre til usette data enn vilkårlige skillelinjer.

Hva er et hyperplan?

I 2D er et hyperplan en linje (én dimensjon mindre enn dataområdet). I 3D er det et plan. I et generelt p-dimensjonalt rom er det en flat overflate med (p-1) dimensjoner, definert av ligningen w·x + b = 0, der w er normalvektoren (vinkelrett på overflaten), x er inndatavektoren for funksjonene, og b er skjevhetsleddet. Punkter på den ene siden oppfyller w·x + b > 0 (predikert positiv klasse), mens punkter på den andre siden oppfyller w·x + b < 0 (predikert negativ klasse).

Margin: Avstanden mellom klassene

Margin er avstanden mellom beslutningsgrensen og de nærmeste treningseksemplene fra hver klasse. SVM-en definerer to margin-hyperplan som er parallelle med beslutningsgrensen: w·x + b = +1 for grensen til den positive klassen og w·x + b = -1 for grensen til den negative klassen. Den totale marginbredden er 2 / ||w||. For å maksimere marginen minimerer SVM-en ||w|| (tilsvarende ||w||²/2 av matematiske bekvemmelighetshensyn), under forutsetning av at alle punktene klassifiseres riktig.

Støttevektorer: De kritiske eksemplene

Støttevektorer er treningseksemplene som ligger nøyaktig på margin-hyperplanene (der w·x + b = ±1). De er de eneste eksemplene som bestemmer beslutningsgrensens plassering og orientering. Alle andre treningseksempler – de som ligger lenger fra grensen – har ingen betydning for hvordan den defineres. Dette er en viktig innsikt: SVM-ens beslutningsgrense defineres fullstendig av en liten delmengde av treningsdataene, noe som gjør den robust overfor størstedelen av treningssettet.

from sklearn.svm import SVC
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(n_samples=50, n_features=2, n_informative=2,
                            n_redundant=0, random_state=42)
svm = SVC(kernel='linear', C=1.0)
svm.fit(X, y)

print('Number of support vectors:', svm.n_support_)
print('Support vector indices:', svm.support_[:5])
print('Total training examples:', len(X))

Trening av en lineær SVM med scikit-learn

Bruk sklearn.svm.SVC med kernel='linear' for en lineær klassifikator med maksimal margin. Etter tilpasning er beslutningsfunksjonens skår for et punkt den fortegnede avstanden til beslutningsgrensen – positiv for klasse 1 og negativ for klasse 0. Metoden decision_function() returnerer disse råskårene, mens predict() bruker fortegnsterskelen til å produsere klasseetiketter.

from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# StandardScaler is essential — SVM is sensitive to feature scales
model = make_pipeline(StandardScaler(), SVC(kernel='linear', C=1.0))
model.fit(X_train, y_train)
print('Test accuracy:', model.score(X_test, y_test))

Hvorfor funksjoner bør skaleres før SVM

SVM-er beregner avstander mellom punkter og hyperplanet ved hjelp av skalarproduktet w·x. Hvis én funksjon varierer fra 0 til 1 og en annen fra 0 til 1 000 000, vil funksjonen med stor skala dominere avstandsberegningen. Dette fører til at SVM-en nesten ignorerer funksjonen med liten skala. Bruk alltid StandardScaler (eller MinMaxScaler) før du trener en SVM. Dette er en av de vanligste feilene nybegynnere gjør – selv et perfekt hyperplan kan mislykkes hvis funksjonene ikke skaleres.

Geometrisk intuisjon for maksimal margin

Se for deg at du plasserer en vei mellom to trerekker (klasser). Midten av veien er beslutningsgrensen, og bredden er marginen. Du ønsker å bygge den som fortsatt får plass mellom trærne uten å treffe noen av dem. Trærne som står nærmest veien, er støttevektorene. En bredere vei er bedre fordi den har større toleranse – et nytt tre kan plasseres hvor som helst innenfor veiens bredde og fortsatt være på riktig side av grensen.

Forhåndsvisning av dualformuleringen og kernel-trikset

SVM-er kan trenes på to ekvivalente måter: primalformen (optimaliserer direkte med hensyn på w og b) og dualformen (optimaliserer med hensyn på et sett med Lagrange-multiplikatorer, én per treningseksempel). Dualformen er viktig fordi optimeringen bare involverer skalarprodukter mellom treningseksempler. Hvis disse skalarproduktene erstattes med en kjernefunksjon, avbildes dataene implisitt til et rom med høyere dimensjon uten at koordinatene beregnes eksplisitt – dette er det berømte kernel-trikset som gjør ikke-lineære SVM-er mulig.

Beslutningsfunksjon og avstand til grensen

SVM-metoden decision_function() returnerer den fortegnede avstanden fra hvert punkt til beslutningshyperplanet. Punkter med høye positive skårer tilhører med stor sikkerhet den positive klassen, mens høye negative skårer angir den negative klassen. Punkter nær null ligger nær grensen og representerer de mest usikre prediksjonene. Det er nyttig å overvåke fordelingen av beslutningsfunksjonens skårer på et nytt datasett som diagnostikk – hvis de fleste skårene samler seg nær null, kan modellen være dårlig egnet for dataene.

from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import numpy as np

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = make_pipeline(StandardScaler(), SVC(kernel='linear', C=1.0))
model.fit(X_train, y_train)
scores = model.decision_function(X_test)
print('Decision function range:', np.round([scores.min(), scores.max()], 3))
print('Near-boundary (|score|<1):', np.sum(np.abs(scores) < 1))

Hard margin kontra virkelige data

Formuleringen med maksimal margin som er beskrevet så langt, er en SVM med hard margin. Den krever perfekt lineær separerbarhet – ingen treningpunkter kan bryte marginen. Data fra den virkelige verden er nesten aldri perfekt lineært separerbare på grunn av støy og overlappende klassefordelinger. Hvis en SVM med hard margin brukes på slike data, vil den mislykkes (optimeringen har ingen gjennomførbar løsning). Den praktiske løsningen er en SVM med myk margin, som introduseres i neste leksjon, og som tillater enkelte marginbrudd kontrollert av en straffeparameter C.

SVM-er med flere klasser: én mot én

Den grunnleggende SVM-formuleringen håndterer binær klassifisering. For problemer med flere klasser bruker scikit-learns SVC som standard en strategi med én mot én: Den trener k(k-1)/2 binære klassifikatorer, én for hvert klassepar, og predikerer klassen som vinner flest parvise avstemninger. For 10 klasser innebærer dette 45 binære klassifikatorer. Et alternativ er én mot resten (via LinearSVC), som trener k binære klassifikatorer, der hver skiller én klasse fra alle de andre. Én mot én er vanligvis mer nøyaktig, men langsommere når det er mange klasser.

from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

X, y = load_iris(return_X_y=True)  # 3 classes
model = make_pipeline(StandardScaler(), SVC(kernel='linear', decision_function_shape='ovo'))
scores = cross_val_score(model, X, y, cv=5)
print('Multi-class SVM (OVO) CV:', scores.mean().round(4))

Rask kontroll

Test forståelsen Deres av klassifikatoren med maksimal margin fra denne leksjonen.

Oppsummering av leksjonen

I denne leksjonen lærte De at: SVM-er finner hyperplanet med maksimal margin som skiller to klasser, støttevektorer er de kritiske eksemplene på marginen som definerer grensen, og skalering av funksjoner er avgjørende før en SVM trenes. Deretter skal vi se nærmere på SVM med myk margin og C-parameteren, som tillater kontrollerte marginbrudd.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
30
Leksjoner
120

Ofte stilte spørsmål

Er leksjonen «Klassifikator med maksimal margin: Støttevektorer og hyperplan» gratis?

Ja – hele teksten i «Klassifikator med maksimal margin: Støttevektorer og hyperplan» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Machine Learning Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Machine Learning Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Klassifikator med maksimal margin: Støttevektorer og hyperplan»?

De vil visualisere maksimering av marginen på et todimensjonalt eksempeldata sett, identifisere støttevektorer og forstå hvorfor maksimal margin forbedrer generalisering. Du øver på Machine Learning Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Machine Learning Academy?

Ingen tidligere erfaring er nødvendig. Machine Learning Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Klassifikator med maksimal margin: Støttevektorer og hyperplan»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Machine Learning Academy-leksjonen?

Ja. Alle Machine Learning Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Klassifikator med maksimal margin: Støttevektorer og hyperplan
  2. SVM med myk margin og C-parameteren
  3. Kjernel trikset: RBF-, polynom- og sigmoidkjerner
  4. Justere C og gamma med et rutenettsøk
← Tilbake til Machine Learning Academy