Maksimimarginaaliluokitin: tukivektorit ja hypertaso
Visualisoi marginaalin maksimointi kaksiulotteisella leikkidatalla, tunnista tukivektorit ja ymmärrä, miksi maksimimarginaali parantaa yleistämiskykyä.
Maksimimarginaaliluokitin: tukivektorit ja hypertaso on ilmainen Machine Learning Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Machine Learning Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.
SVM:ien perusidea
Tukivektorikoneet (SVM:t) ovat luokittimia, jotka etsivät parhaan luokkia erottavan rajan. Kun luokat voidaan erottaa useilla rajoilla, mikä niistä pitäisi valita? SVM:n elegantti vastaus on valita raja, joka on mahdollisimman kaukana jokaisesta opetusnäytteestä. Tätä mahdollisimman kaukana olevaa rajaa kutsutaan maksimaalisen marginaalin hypertasoksi, ja SVM:n teoreettiset perusteet takaavat, että se yleistyy näkymättömään dataan paremmin kuin mielivaltaiset erottavat rajat.
Mikä on hypertaso?
2D:ssä hypertaso on suora (yksi ulottuvuus vähemmän kuin data-avaruudessa). 3D:ssä se on taso. Yleisessä p-ulotteisessa avaruudessa se on (p-1)-ulotteinen tasainen pinta, joka määritellään yhtälöllä w·x + b = 0, jossa w on normaalivektori (pintaan nähden kohtisuora), x on syötepiirrevektori ja b on bias-termi. Toisella puolella olevat pisteet toteuttavat ehdon w·x + b > 0 (ennustettu positiivinen luokka), ja toisella puolella olevat ehdon w·x + b < 0 (ennustettu negatiivinen luokka).
Marginaali: luokkien välinen aukko
Marginaali on päätösrajan ja kunkin luokan lähimpien opetusesimerkkien välinen etäisyys. SVM määrittää kaksi päätösrajan suuntaista marginaalihypertasoa: w·x + b = +1 positiivisen luokan rajalle ja w·x + b = -1 negatiivisen luokan rajalle. Marginaalin kokonaisleveys on 2 / ||w||. Marginaalin maksimoimiseksi SVM minimoi suureen ||w|| (vastaavasti matemaattisen käsittelyn helpottamiseksi suureen ||w||²/2) ehdolla, että kaikki pisteet luokitellaan oikein.
Tukivektorit: ratkaisevat esimerkit
Tukivektorit ovat opetusesimerkkejä, jotka sijaitsevat täsmälleen marginaalihypertasoilla (joilla w·x + b = ±1). Ne ovat ainoita esimerkkejä, jotka määrittävät päätösrajan sijainnin ja suunnan. Kaikilla muilla opetusesimerkeillä eli rajan kauempana sijaitsevilla esimerkeillä ei ole vaikutusta sen määrittämiseen. Tämä on merkittävä havainto: SVM:n päätösraja määräytyy kokonaan pienen opetusdatan osajoukon perusteella, mikä tekee siitä vakaan opetusdatan enemmistön suhteen.
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))Lineaarisen SVM:n opettaminen scikit-learnilla
Käyttäkää lineaarista suurimarginaalista luokitinta varten luokkaa sklearn.svm.SVC parametrilla kernel='linear'. Sovittamisen jälkeen pisteen päätösfunktion arvo on sen etumerkillinen etäisyys päätösrajasta: positiivinen luokalle 1 ja negatiivinen luokalle 0. Metodi decision_function() palauttaa nämä raaka-arvot, kun taas predict() käyttää etumerkkiin perustuvaa kynnystä luokkien määrittämiseen.
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))Miksi piirteet kannattaa skaalata ennen SVM:ää
SVM:t laskevat pisteiden ja hypertason välisiä etäisyyksiä pistetulon w·x avulla. Jos yhden piirteen arvot vaihtelevat välillä 0–1 ja toisen välillä 0–1 000 000, suuren asteikon piirre hallitsee etäisyyslaskentaa, jolloin SVM käytännössä sivuuttaa pienen asteikon piirteen. Käyttäkää aina StandardScaler- tai MinMaxScaler-skaalausta ennen SVM:n opettamista. Tämä on yksi aloittelijoiden yleisimmistä virheistä: jopa täydellinen hypertaso voi epäonnistua, jos piirteitä ei ole skaalattu.
Suurimarginaalisen luokittelun geometrinen intuitio
Kuvitelkaa rakentavanne tien kahden puurivin (luokkien) väliin. Tien keskikohta on päätösraja ja tien leveys on marginaali. Tavoitteena on rakentaa mahdollisimman leveä tie, joka mahtuu puiden väliin osumatta yhteenkään niistä. Lähimpänä tietä olevat puut ovat tukivektoreita. Leveämpi tie on parempi, koska se kestää enemmän vaihtelua: uusi puu voidaan sijoittaa mihin tahansa tien leveydelle, ja se on silti päätösrajan oikealla puolella.
Duaalimuotoilu ja kernelimenetelmän esittely
SVM:t voidaan opettaa kahdella ekvivalentilla tavalla: primaarimuodossa (optimoidaan suoraan suureiden w ja b suhteen) ja duaalimuodossa (optimoidaan Lagrangen kertoimien joukkoa, yksi kutakin opetusesimerkkiä kohden). Duaalimuoto on merkittävä, koska optimointi sisältää vain opetusesimerkkien välisiä pistetuloja. Kun nämä pistetulot korvataan kernelifunktiolla, data voidaan kuvata implisiittisesti korkeamman ulottuvuuden avaruuteen laskematta koordinaatteja eksplisiittisesti. Tämä on kuuluisa kernelitemppu, joka mahdollistaa epälineaariset SVM:t.
Päätösfunktio ja etäisyys rajasta
SVM:n decision_function() palauttaa kunkin pisteen etumerkillisen etäisyyden päätöshypertasosta. Pisteet, joiden arvo on suuri ja positiivinen, kuuluvat suurella varmuudella positiiviseen luokkaan; suuret negatiiviset arvot osoittavat negatiiviseen luokkaan kuulumista. Nollan lähellä olevat pisteet ovat lähellä rajaa ja vastaavat epävarmimpia ennusteita. Päätösfunktion arvojen jakauman tarkasteleminen uudessa aineistossa on hyödyllinen diagnostiikkakeino: jos suurin osa arvoista keskittyy nollan lähelle, malli ei ehkä sovellu dataan hyvin.
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))Kova marginaali ja todellinen data
Tähän asti kuvattu suurimarginaalinen muotoilu on kovan marginaalin SVM, joka edellyttää täydellistä lineaarista erotettavuutta: yksikään opetuspiste ei saa rikkoa marginaalia. Tosielämän data on melkein aina epätäydellisesti lineaarisesti erotettavaa kohinan ja päällekkäisten luokkajakaumien vuoksi. Kovan marginaalin SVM:n soveltaminen tällaiseen dataan epäonnistuu (optimointitehtävällä ei ole kelvollista ratkaisua). Käytännöllinen ratkaisu on seuraavassa oppitunnissa esiteltävä pehmeän marginaalin SVM, joka sallii osan marginaalirikkomuksista C-rangaistusparametrin ohjaamana.
Moniluokkaiset SVM:t: one-vs-one
SVM:n perusmuotoilu käsittelee binääristä luokittelua. Moniluokkaisissa ongelmissa scikit-learnin SVC käyttää oletusarvoisesti one-vs-one-strategiaa: se opettaa k(k-1)/2 binääristä luokitinta, yhden jokaista luokkien paria kohden, ja ennustaa luokan, joka saa eniten parikohtaisia ääniä. Kymmenellä luokalla tämä tarkoittaa 45:tä binääristä luokitinta. Vaihtoehtona on one-vs-rest (luokan LinearSVC kautta), jossa opetetaan k binääristä luokitinta ja jokainen erottaa yhden luokan kaikista muista. One-vs-one on yleensä tarkempi, mutta monen luokan tapauksessa hitaampi.
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))Pikatarkistus
Testatkaa, miten hyvin ymmärrätte tämän oppitunnin suurimarginaalisen luokittimen.
Oppitunnin yhteenveto
Tässä oppitunnissa opitte, että SVM:t etsivät kaksi luokkaa erottavan suurimarginaalisen hypertason, tukivektorit ovat marginaalilla sijaitsevia ratkaisevia esimerkkejä, jotka määrittävät rajan ja piirteiden skaalaus on välttämätöntä ennen SVM:n opettamista. Seuraavaksi tutustumme pehmeän marginaalin SVM:ään ja C-parametriin, joka sallii hallitut marginaalirikkomukset.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Maksimimarginaaliluokitin: tukivektorit ja hypertaso” ilmainen?
Kyllä – oppitunnin ”Maksimimarginaaliluokitin: tukivektorit ja hypertaso” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Machine Learning Academy-kurssin, päivitä CoddyKit PROhon. Machine Learning Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Maksimimarginaaliluokitin: tukivektorit ja hypertaso”?
Visualisoi marginaalin maksimointi kaksiulotteisella leikkidatalla, tunnista tukivektorit ja ymmärrä, miksi maksimimarginaali parantaa yleistämiskykyä. Harjoittelet Machine Learning Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Machine Learning Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Machine Learning Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Maksimimarginaaliluokitin: tukivektorit ja hypertaso”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Machine Learning Academy-oppitunnilla?
Kyllä. Jokainen Machine Learning Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Maksimimarginaaliluokitin: tukivektorit ja hypertaso
- Pehmeän marginaalin SVM ja C-parametri
- Kernelitemppu: RBF-, polynomi- ja sigmoidikernelit
- C:n ja gamman säätäminen Grid Searchilla