Klassificerare med maximal marginal: stödvektorer och hyperplan
Ni kommer att visualisera marginalmaximering på en tvådimensionell exempeldatauppsättning, identifiera stödvektorer och förstå varför maximal marginal förbättrar generaliseringen.
Klassificerare med maximal marginal: stödvektorer och hyperplan är en gratis lektion i Machine Learning Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Machine Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Grundidén bakom SVM
Support Vector Machines (SVM) är klassificerare som hittar den bästa skiljelinjen mellan två klasser. När flera gränser kan separera klasserna, vilken bör väljas? SVM:s svar är elegant: välj den gräns som ligger så långt som möjligt från varje träningsexempel. Denna maximalt avlägsna gräns kallas hyperplanet med maximal marginal, och SVM:s teoretiska grunder garanterar att den generaliserar bättre till osedda data än godtyckliga separerande gränser.
Vad är ett hyperplan?
I 2D är ett hyperplan en linje (en dimension mindre än datarummet). I 3D är det ett plan. I ett p-dimensionellt rum är det en platt yta med (p-1) dimensioner som definieras av ekvationen w·x + b = 0, där w är normalvektorn (vinkelrät mot ytan), x är indatafunktionsvektorn och b är bias-termen. Punkter på den ena sidan uppfyller w·x + b > 0 (predikterad positiv klass), och punkter på den andra sidan uppfyller w·x + b < 0 (predikterad negativ klass).
Marginal: avståndet mellan klasserna
Marginalen är avståndet mellan beslutsgränsen och de närmaste tränings exemplen från varje klass. SVM definierar två marginalhyperplan som är parallella med beslutsgränsen: w·x + b = +1 för gränsen till den positiva klassen och w·x + b = -1 för gränsen till den negativa klassen. Den totala marginalbredden är 2 / ||w||. För att maximera marginalen minimerar SVM ||w|| (eller ekvivalent ||w||²/2 av matematiska bekvämlighetsskäl), med villkoret att alla punkter klassificeras korrekt.
Stödvektorer: de avgörande exemplen
Stödvektorer är de träningsexempel som ligger exakt på marginalhyperplanen (där w·x + b = ±1). De är de enda exemplen som bestämmer beslutsgränsens position och orientering. Alla andra träningsexempel – de som ligger längre från gränsen – spelar ingen roll för hur den definieras. Detta är en djupgående insikt: SVM:s beslutsgräns definieras helt av en liten delmängd av träningsdata, vilket gör den robust mot merparten av träningsuppsättningen.
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))Träna en linjär SVM med scikit-learn
Använd sklearn.svm.SVC med kernel='linear' för en linjär klassificerare med maximal marginal. Efter träningen är beslutsfunktionsvärdet för en punkt dess tecknade avstånd till beslutsgränsen – positivt för klass 1 och negativt för klass 0. Metoden decision_function() returnerar dessa obehandlade värden, medan predict() tillämpar teckengränsen för att skapa klassetiketter.
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))Varför egenskaper ska skalas före SVM
SVM:er beräknar avstånd mellan punkter och hyperplanet med hjälp av skalärprodukten w·x. Om en egenskap sträcker sig från 0 till 1 och en annan från 0 till 1 000 000 kommer egenskapen med den större skalan att dominera avståndsberäkningen, vilket gör att SVM:n nästan ignorerar egenskapen med den mindre skalan. Använd alltid StandardScaler (eller MinMaxScaler) innan en SVM tränas. Detta är ett av de vanligaste misstagen nybörjare gör – även ett perfekt hyperplan kan misslyckas om egenskaperna inte skalas.
Geometrisk intuition för maximal marginal
Föreställ er att ni placerar en väg mellan två rader av träd (klasser). Vägens mitt är beslutsgränsen och dess bredd är marginalen. Ni vill bygga den bredaste vägen som fortfarande får plats mellan träden utan att träffa något av dem. Träden närmast vägen är stödvektorerna. En bredare väg är bättre eftersom den har större tolerans – ett nytt träd kan placeras var som helst inom vägens bredd och ändå hamna på rätt sida av gränsen.
Den duala formuleringen och en förhandsvisning av kerneltricket
SVM:er kan tränas på två ekvivalenta sätt: den primala formen (optimera direkt med avseende på w och b) och den duala formen (optimera med avseende på en uppsättning Lagrange-multiplikatorer, en per träningsexempel). Den duala formen är viktig eftersom optimeringen endast innefattar skalärprodukter mellan träningsexempel. Genom att ersätta dessa skalärprodukter med en kärnfunktion avbildas data implicit till ett rum med högre dimension, utan att koordinaterna beräknas explicit – detta är det berömda kerneltricket som möjliggör icke-linjära SVM:er.
Beslutsfunktion och avstånd till gränsen
SVM-metoden decision_function() returnerar det tecknade avståndet från varje punkt till beslutshyperplanet. Punkter med stora positiva värden tillhör med stor säkerhet den positiva klassen; stora negativa värden anger den negativa klassen. Punkter nära noll ligger nära gränsen och motsvarar de mest osäkra förutsägelserna. Att övervaka fördelningen av beslutsfunktionsvärden på en ny datauppsättning är ett användbart diagnostiskt verktyg – om de flesta värdena samlas nära noll kan modellen vara dåligt lämpad för datan.
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))Hård marginal kontra verkliga data
Formuleringen med maximal marginal som beskrivits hittills är en SVM med hård marginal, vilket kräver perfekt linjär separerbarhet – ingen träningspunkt får överträda marginalen. Verkliga data är nästan aldrig perfekt linjärt separerbara på grund av brus och överlappande klassfördelningar. Om en SVM med hård marginal används på sådana data misslyckas den (optimeringen saknar en möjlig lösning). Den praktiska lösningen är en SVM med mjuk marginal, som introduceras i nästa lektion och tillåter vissa marginalöverträdelser som styrs av straffparametern C.
SVM:er för flera klasser: en-mot-en
Den grundläggande SVM-formuleringen hanterar binär klassificering. För problem med flera klasser använder scikit-learns SVC som standard strategin en-mot-en: den tränar k(k-1)/2 binära klassificerare, en för varje par av klasser, och förutsäger den klass som får flest parvisa röster. För 10 klasser innebär detta 45 binära klassificerare. Ett alternativ är en-mot-alla (via LinearSVC), som tränar k binära klassificerare där var och en skiljer en klass från alla andra. En-mot-en är i allmänhet mer träffsäker men långsammare för många 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))Snabb kontroll
Testa hur väl ni har förstått klassificeraren med maximal marginal från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har ni lärt er att: SVM:er hittar hyperplanet med maximal marginal som separerar två klasser, stödvektorer är de avgörande exemplen på marginalen som definierar gränsen, och skalning av egenskaper är nödvändig innan en SVM tränas. Nästa steg är att utforska SVM med mjuk marginal och parametern C, som tillåter kontrollerade marginalöverträdelser.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Klassificerare med maximal marginal: stödvektorer och hyperplan” gratis?
Ja – hela texten till ”Klassificerare med maximal marginal: stödvektorer och hyperplan” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Machine Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Machine Learning Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Klassificerare med maximal marginal: stödvektorer och hyperplan”?
Ni kommer att visualisera marginalmaximering på en tvådimensionell exempeldatauppsättning, identifiera stödvektorer och förstå varför maximal marginal förbättrar generaliseringen. Ni övar på Machine Learning Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Machine Learning Academy?
Du behöver inga förkunskaper. Utbildningen i Machine Learning Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Klassificerare med maximal marginal: stödvektorer och hyperplan”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Machine Learning Academy-lektionen?
Ja. Varje Machine Learning Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Klassificerare med maximal marginal: stödvektorer och hyperplan
- SVM med mjuk marginal och parametern C
- Kärntricket: RBF-, polynom- och sigmoidkärnor
- Justera C och gamma med en rutnätsökning