Predstavitev
Ta vodnik je tretji in zadnji del treh vodnikov o podpornih vektorskih strojih (SVM). V tem priročniku se bomo še naprej ukvarjali s primerom uporabe ponarejenih bankovcev, na kratko povzeli splošno idejo za SVM-ji, razumeli, kaj je trik jedra, in implementirali različne vrste nelinearnih jeder s Scikit-Learn.
V celotni seriji vodnikov SVM boste poleg učenja o drugih vrstah SVM izvedeli tudi o preprostih SVM, vnaprej določenih parametrih SVM, hiperparametrih C in Gamma ter o tem, kako jih je mogoče prilagoditi z iskanjem po mreži in navzkrižnim preverjanjem.
Če želite prebrati prejšnje vodnike, si lahko ogledate prva dva vodnika ali pa vidite, katere teme vas najbolj zanimajo. Spodaj je tabela tem, obravnavanih v vsakem vodniku:
- Primer uporabe: pozabite na bankovce
- Ozadje SVM-jev
- Preprost (linearni) model SVM
- O naboru podatkov
- Uvažanje nabora podatkov
- Raziskovanje nabora podatkov
- Implementacija SVM s Scikit-Learn
- Razdelitev podatkov v sklope vlakov/testov
- Izobraževanje modela
- Izdelava napovedi
- Ocenjevanje modela
- Interpretacija rezultatov
- Hiperparameter C
- Hiperparameter gama
3. Implementacija drugih različic SVM s Pythonovim Scikit-Learnom
- Splošna ideja SVM-jev (povzetek)
- Jedro (trik) SVM
- Implementacija nelinearnega jedrnega SVM s Scikit-Learn
- Uvoz knjižnic
- Uvažanje nabora podatkov
- Razdelitev podatkov na funkcije (X) in cilj (y)
- Razdelitev podatkov v sklope vlakov/testov
- Usposabljanje algoritma
- Polinomsko jedro
- Izdelava napovedi
- Ocenjevanje algoritma
- Gaussovo jedro
- Napovedovanje in vrednotenje
- Sigmoidno jedro
- Napovedovanje in vrednotenje
- Primerjava zmogljivosti nelinearnega jedra
Spomnimo se, kaj sploh je SVM, preden vidimo nekaj zanimivih različic jedra SVM.
Splošna ideja SVM-jev
V primeru linearno ločljivih podatkov v dveh dimenzijah (kot je prikazano na sliki 1) bi bil tipičen pristop algoritma strojnega učenja poskus najti mejo, ki deli podatke na tak način, da je napaka napačne klasifikacije čim manjša. Če pozorno pogledate sliko 1, opazite, da lahko obstaja več meja (neskončno), ki pravilno razdelijo podatkovne točke. Dve črtkani črti in polna črta sta veljavni klasifikaciji podatkov.
Slika 1: Meje več odločitev
Ko SVM izbere meja odločitve, izbere mejo, ki poveča razdaljo med njim in najbližjimi podatkovnimi točkami razredov. Vemo že, da so najbližje podatkovne točke podporni vektorji in da je razdaljo mogoče parametrizirati z obema C
in gamma
hiperparametri.
Pri izračunu te odločitvene meje algoritem izbere, koliko točk naj upošteva in kako daleč lahko seže marža – to konfigurira problem maksimiranja marže. Pri reševanju tega problema maksimiranja marže SVM uporablja podporne vektorje (kot je prikazano na sliki 2) in poskuša ugotoviti, katere so optimalne vrednosti, ki ohranjajo večjo razdaljo roba, hkrati pa pravilno razvrsti več točk glede na funkcijo, ki se uporablja za ločite podatke.
Slika 2: Odločitvena meja s podpornimi vektorji
Zato se SVM razlikuje od drugih klasifikacijskih algoritmov, ko ne najde samo odločitvene meje, ampak na koncu najde optimalno odločitveno mejo.
V ozadju iskanja podpornih vektorjev, izračunavanja razlike med odločitveno mejo in podpornimi vektorji ter maksimiranja te rezerve je zapletena matematika, ki izhaja iz statistike in računalniških metod. Tokrat se ne bomo spuščali v podrobnosti o tem, kako se matematika odvija.
Vedno je pomembno, da se potopite globlje in se prepričate, da algoritmi strojnega učenja niso nekakšen skrivnostni urok, čeprav vam nepoznavanje vsake matematične podrobnosti v tem trenutku ni in vam ne bo preprečilo, da bi lahko izvedli algoritem in dobili rezultate.
Nasvet: zdaj, ko smo naredili povzetek algoritemskega procesa, je jasno, da bo razdalja med podatkovnimi točkami vplivala na mejo odločitve, ki jo izbere SVM, zaradi tega, skaliranje podatkov je običajno potreben pri uporabi klasifikatorja SVM. Poskusite uporabiti Metoda Standard Scaler podjetja Scikit-learn za pripravo podatkov, nato pa znova zaženite kode, da vidite, ali je razlika v rezultatih.
Jedro (trik) SVM
V prejšnjem razdelku smo se spomnili in organizirali splošno idejo SVM – videli smo, kako jo je mogoče uporabiti za iskanje optimalne odločitvene meje za linearno ločljive podatke. Vendar pa v primeru nelinearno ločljivih podatkov, kot je prikazan na sliki 3, že vemo, da ravne črte ni mogoče uporabiti kot mejo odločitve.
Slika 3: Nelinearno ločljivi podatki
Namesto tega lahko uporabimo spremenjeno različico SVM, o kateri smo razpravljali na začetku, imenovano Kernel SVM.
V bistvu bo jedro SVM projiciralo nelinearno ločljive podatke nižjih dimenzij v njihovo ustrezno obliko v višjih dimenzijah. To je trik, saj se pri projiciranju nelinearno ločljivih podatkov v višjih dimenzijah oblika podatkov spremeni tako, da postanejo ločljivi. Če na primer razmišljamo o treh dimenzijah, bi lahko bile podatkovne točke iz vsakega razreda na koncu dodeljene drugi dimenziji, zaradi česar bi bila ločljiva. Eden od načinov za povečanje dimenzij podatkov je lahko njihovo potenciranje. Spet je v to vpletena zapletena matematika, vendar vam ni treba skrbeti, če želite uporabljati SVM. Namesto tega lahko uporabimo Pythonovo knjižnico Scikit-Learn za implementacijo in uporabo nelinearnih jeder na enak način, kot smo uporabili linearna.
Implementacija nelinearnega jedrnega SVM s Scikit-Learn
V tem razdelku bomo uporabili isti nabor podatkov za predvidevanje, ali je bankovec pravi ali ponarejen glede na štiri značilnosti, ki jih že poznamo.
Videli boste, da so ostali koraki tipični koraki strojnega učenja in potrebujejo zelo malo razlage, dokler ne dosežemo dela, kjer urimo naše nelinearne SVM-je jedra.
Uvoz knjižnic
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
Uvažanje nabora podatkov
data_link = "https://archive.ics.uci.edu/ml/machine-learning-databases/00267/data_banknote_authentication.txt"
col_names = ["variance", "skewness", "curtosis", "entropy", "class"] bankdata = pd.read_csv(data_link, names=col_names, sep=",", header=None)
bankdata.head()mes)
Razdelitev podatkov na funkcije (X) in cilj (y)
X = bankdata.drop('class', axis=1)
y = bankdata['class']
Razdelitev podatkov v sklope vlakov/testov
SEED = 42 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = SEED)
Usposabljanje algoritma
Za usposabljanje jedra SVM bomo uporabili isto SVC
razreda Scikit-Learn's svm
knjižnica. Razlika je v vrednosti za parameter jedra SVC
razred.
V primeru preprostega SVM smo kot vrednost za parameter jedra uporabili »linearno«. Vendar, kot smo že omenili, lahko za jedro SVM uporabimo Gaussova, polinomska, sigmoidna ali izračunljiva jedra. Implementirali bomo polinomska, Gaussova in sigmoidna jedra ter pogledali njihove končne metrike, da vidimo, katera ustreza našim razredom z višjo metriko.
1. Polinomsko jedro
V algebri je polinom izraz oblike:
$$
2a*b^3 + 4a – 9
$$
Ta ima spremenljivke, kot npr a
in b
, konstante, v našem primeru, 9
in koeficienti (konstante, ki jih spremljajo spremenljivke), kot npr 2
in 4
. 3
se šteje za stopnjo polinoma.
Obstajajo vrste podatkov, ki jih je mogoče najbolje opisati z uporabo polinomske funkcije. Tukaj bo jedro preslikalo naše podatke v polinom, za katerega bomo izbrali stopnjo. Višja kot je stopnja, bolj se bo funkcija poskušala približati podatkom, zato je meja odločitve bolj prilagodljiva (in bolj nagnjena k prekomernemu prilagajanju) – nižja kot je stopnja, najmanj prilagodljiva.
Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!
Torej, za izvajanje polinomsko jedro, poleg izbire poly
jedro, bomo posredovali tudi vrednost za degree
parameter parametra SVC
razred. Spodaj je koda:
from sklearn.svm import SVC
svc_poly = SVC(kernel='poly', degree=8)
svc_poly.fit(X_train, y_train)
Izdelava napovedi
Zdaj, ko smo usposobili algoritem, je naslednji korak napovedovanje testnih podatkov.
Kot smo storili prej, lahko za to izvedemo naslednji skript:
y_pred_poly = svclassifier.predict(X_test)
Ocenjevanje algoritma
Kot običajno je zadnji korak vrednotenje polinomskega jedra. Ker smo nekajkrat ponovili kodo za poročilo o klasifikaciji in matriko zmede, jo pretvorimo v funkcijo, ki display_results
po prejemu ustreznih y_test
, y_pred
in naslov Seabornove matrike zmede z cm_title
:
def display_results(y_test, y_pred, cm_title): cm = confusion_matrix(y_test,y_pred) sns.heatmap(cm, annot=True, fmt='d').set_title(cm_title) print(classification_report(y_test,y_pred))
Zdaj lahko pokličemo funkcijo in pogledamo rezultate, dobljene s polinomskim jedrom:
cm_title_poly = "Confusion matrix with polynomial kernel"
display_results(y_test, y_pred_poly, cm_title_poly)
Izhod je videti takole:
precision recall f1-score support 0 0.69 1.00 0.81 148 1 1.00 0.46 0.63 127 accuracy 0.75 275 macro avg 0.84 0.73 0.72 275
weighted avg 0.83 0.75 0.73 275
Zdaj lahko ponovimo iste korake za Gaussova in sigmoidna jedra.
2. Gaussovo jedro
Za uporabo gaussovega jedra moramo samo podati 'rbf' kot vrednost za kernel
parameter razreda SVC:
svc_gaussian = SVC(kernel='rbf', degree=8)
svc_gaussian.fit(X_train, y_train)
Pri nadaljnjem raziskovanju tega jedra lahko uporabite tudi iskanje po mreži, da ga kombinirate z različnimi C
in gamma
vrednosti.
Napovedovanje in vrednotenje
y_pred_gaussian = svc_gaussian.predict(X_test)
cm_title_gaussian = "Confusion matrix with Gaussian kernel"
display_results(y_test, y_pred_gaussian, cm_title_gaussian)
Izhod Gaussovega jedra SVM izgleda takole:
precision recall f1-score support 0 1.00 1.00 1.00 148 1 1.00 1.00 1.00 127 accuracy 1.00 275 macro avg 1.00 1.00 1.00 275
weighted avg 1.00 1.00 1.00 275
3. Sigmoidno jedro
Nazadnje uporabimo sigmoidno jedro za implementacijo Kernel SVM. Oglejte si naslednji scenarij:
svc_sigmoid = SVC(kernel='sigmoid')
svc_sigmoid.fit(X_train, y_train)
Če želite uporabiti jedro sigmoid, morate podati 'sigmoid' kot vrednost za kernel
parameter parametra SVC
razred.
Napovedovanje in vrednotenje
y_pred_sigmoid = svc_sigmoid.predict(X_test)
cm_title_sigmoid = "Confusion matrix with Sigmoid kernel"
display_results(y_test, y_pred_sigmoid, cm_title_sigmoid)
Izhod jedra SVM z jedrom Sigmoid izgleda takole:
precision recall f1-score support 0 0.67 0.71 0.69 148 1 0.64 0.59 0.61 127 accuracy 0.65 275 macro avg 0.65 0.65 0.65 275
weighted avg 0.65 0.65 0.65 275
Primerjava zmogljivosti nelinearnega jedra
Če na kratko primerjamo zmogljivost različnih tipov nelinearnih jeder, se morda zdi, da ima sigmoidno jedro najnižjo metriko, torej najslabšo zmogljivost.
Med Gaussovim in polinomskim jedrom lahko vidimo, da je Gaussovo jedro doseglo popolno 100-odstotno stopnjo napovedi – kar je običajno sumljivo in lahko kaže na preobremenitev, medtem ko je polinomsko jedro napačno razvrstilo 68 primerkov razreda 1.
Zato ni trdnega in hitrega pravila o tem, katero jedro deluje najbolje v vsakem scenariju ali v našem trenutnem scenariju brez nadaljnjega iskanja hiperparametrov, razumevanja vsake oblike funkcije, raziskovanja podatkov in primerjave rezultatov usposabljanja in testiranja, da bi ugotovili, ali algoritem posplošuje.
Gre za testiranje vseh jeder in izbiro tistega s kombinacijo parametrov in pripravo podatkov, ki daje pričakovane rezultate glede na kontekst vašega projekta.
Going Further – ročni projekt od konca do konca
Ali zaradi vaše radovedne narave želite iti dlje? Priporočamo, da si ogledate naše Vodeni projekt: »Praktično napovedovanje cen nepremičnin – strojno učenje v Pythonu«.
V tem vodenem projektu – naučili se boste, kako zgraditi zmogljive tradicionalne modele strojnega učenja in modele globokega učenja, uporabiti Ensemble Learning in učiti meta-učence za napovedovanje cen stanovanj iz vreče modelov Scikit-Learn in Keras.
Z uporabo Kerasa, API-ja za globoko učenje, zgrajenega na Tensorflowu, bomo eksperimentirali z arhitekturami, zgradili skupino zloženih modelov in usposobili meta-učenec nevronsko mrežo (model ravni 1), da ugotovimo ceno hiše.
Globoko učenje je neverjetno – a preden se zatečete k njemu, je priporočljivo poskusiti težavo rešiti tudi s preprostejšimi tehnikami, kot je npr. plitko učenje algoritmi. Naša osnovna uspešnost bo temeljila na a Naključna gozdna regresija algoritem. Poleg tega – raziskali bomo ustvarjanje sklopov modelov prek Scikit-Learn s tehnikami, kot je npr. vrečanje v vreče in glasovanje.
To je projekt od konca do konca in kot pri vseh projektih strojnega učenja bomo tudi mi začeli z – s Raziskovalne analize podatkov, sledi Predobdelava podatkov in končno Plitvo gradnje in Modeli globokega učenja da ustrezajo podatkom, ki smo jih predhodno raziskali in očistili.
zaključek
V tem članku smo naredili kratek povzetek SVM-jev, preučili trik jedra in implementirali različne okuse nelinearnih SVM-jev.
Predlagam, da implementirate vsako jedro in nadaljujete. Raziščete lahko matematiko, uporabljeno za ustvarjanje vsakega od različnih jeder, zakaj so bila ustvarjena in razlike glede njihovih hiperparametrov. Na ta način boste spoznali tehnike in vrsto jedra, ki je najbolje uporabiti glede na kontekst in razpoložljive podatke.
Jasno razumevanje delovanja posameznega jedra in kdaj jih uporabiti vam bo zagotovo pomagalo na vaši poti. Sporočite nam, kako napreduje in veselo kodiranje!
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- Platoblockchain. Web3 Metaverse Intelligence. Razširjeno znanje. Dostopite tukaj.
- Kovanje prihodnosti z Adryenn Ashley. Dostopite tukaj.
- vir: https://stackabuse.com/implementing-other-svm-flavors-with-pythons-scikit-learn/
- :ima
- : je
- :ne
- :kje
- $GOR
- 1
- 20
- 67
- 8
- 84
- a
- Sposobna
- O meni
- o IT
- Po
- natančnost
- doseže
- dejansko
- Poleg tega
- vplivajo
- po
- Opozorite
- algoritem
- algoritmični
- algoritmi
- vsi
- dodeljenih
- že
- Prav tako
- Čeprav
- vedno
- Neverjetno
- an
- in
- API
- Uporabi
- pristop
- SE
- članek
- AS
- At
- Na voljo
- torba
- Banka
- temeljijo
- Izhodišče
- BE
- ker
- postane
- pred
- Začetek
- zadaj
- počutje
- spodaj
- BEST
- med
- večji
- meja
- tako
- Meje
- Na kratko
- izgradnjo
- zgrajena
- vendar
- by
- izračun
- klic
- se imenuje
- CAN
- ne more
- primeru
- Spremembe
- preverjanje
- Izberite
- izbiri
- razred
- razredi
- Razvrstitev
- jasno
- tesno
- bližje
- Koda
- kombinacija
- združujejo
- primerjate
- primerjavo
- dokončanje
- kompleksna
- Sklenitev
- zmeda
- Razmislite
- šteje
- ozadje
- Ustrezno
- bi
- zajeti
- ustvarjajo
- ustvaril
- Ustvarjanje
- Cross
- Trenutna
- datum
- podatkovne točke
- Priprava podatkov
- Odločitev
- globoko
- globoko učenje
- globlje
- vsekakor
- Stopnja
- Odvisno
- Izpeljano
- opisano
- Podatki
- Podrobnosti
- Razlika
- razlike
- drugačen
- Dimenzije
- dimenzije
- razpravljali
- razdalja
- do
- vsak
- prej
- konec koncev
- konča
- Napaka
- vrednotenja
- Tudi vsak
- Primer
- izvršiti
- Pričakuje
- poskus
- Razlaga
- raziskuje
- Raziskano
- Raziskovati
- FAST
- Lastnosti
- Nekaj
- Slika
- končna
- končno
- Najdi
- iskanje
- prva
- fit
- prilagodljiv
- Osredotočite
- sledili
- po
- za
- gozd
- obrazec
- štiri
- iz
- funkcija
- nadalje
- splošno
- dobili
- git
- Daj
- Go
- dogaja
- Mreža
- vodi
- Vodniki
- hands-on
- srečna
- Trdi
- Imajo
- pomoč
- tukaj
- več
- Hiša
- hover
- Kako
- Kako
- Vendar
- HTML
- HTTPS
- ICON
- Ideja
- izvajati
- izvajali
- izvajanja
- Pomembno
- in
- vključeno
- narašča
- Navedite
- Neskončno
- primer
- obresti
- Zanimivo
- v
- Predstavitev
- vključeni
- IT
- ITS
- sam
- Potovanje
- jpg
- Imejte
- keras
- Otrok
- Vedite
- Vedeti
- UČITE
- učenje
- LG
- knjižnice
- Knjižnica
- Leži
- kot
- vrstica
- linije
- malo
- Poglej
- POGLEDI
- stroj
- strojno učenje
- Stroji
- Makro
- je
- Znamka
- IZDELA
- Izdelava
- več
- map
- Marža
- matematični
- matematika
- matplotlib
- Matrix
- maksimira
- Maj ..
- omenjeno
- zgolj
- Metode
- meritev
- Meritve
- morda
- Model
- modeli
- spremembe
- več
- Najbolj
- več
- skrivnostna
- Narava
- potrebno
- Nimate
- mreža
- nevronska mreža
- Naslednja
- Opombe
- zdaj
- otopeli
- pridobi
- pridobljeni
- of
- on
- ONE
- samo
- optimalna
- or
- Da
- Organizirano
- Ostalo
- naši
- izhod
- pand
- parameter
- parametri
- del
- mimo
- popolna
- performance
- opravlja
- platon
- Platonova podatkovna inteligenca
- PlatoData
- Predvajaj
- točke
- močan
- Praktično
- Precision
- napovedati
- napoved
- Napovedi
- Pripravimo
- prejšnja
- prej
- Cena
- Napoved cen
- Cene
- cenitev
- problem
- Postopek
- Napredek
- Projekt
- projekti
- Python
- Hitri
- Oceniti
- precej
- Rbf
- dosežejo
- Preberi
- pravo
- Rekapitulacija
- prejema
- Priporočamo
- o
- ne pozabite
- ponovite
- ponovi
- poročilo
- REST
- Rezultati
- Ring
- Pravilo
- tek
- s
- Enako
- Scenarij
- scikit-učiti
- morski rojen
- Iskalnik
- iskanje
- Oddelek
- seme
- videnje
- Zdi se,
- izbiranje
- ločena
- Serija
- več
- Shadow
- Oblikujte
- pokazale
- Enostavno
- saj
- So
- trdna
- Reševanje
- nekaj
- ČAROV
- Stackabuse
- zloženi
- standardna
- standardi
- Začetek
- Statistika
- Korak
- Koraki
- stop
- naravnost
- študiral
- taka
- podpora
- sumljiv
- SVG
- miza
- Bodite
- ciljna
- tehnike
- tensorflo
- Test
- Testiranje
- da
- O
- njihove
- Njih
- Tukaj.
- jih
- Razmišljanje
- tretja
- ta
- 3
- skozi
- čas
- krat
- Naslov
- do
- vrh
- Teme
- tradicionalna
- Vlak
- usposobljeni
- usposabljanje
- Transform
- Prehod
- Res
- Vrste
- tipičen
- razumeli
- razumevanje
- us
- uporaba
- primeru uporabe
- Rabljeni
- uporabo
- navadno
- uporabiti
- potrjevanje
- vrednost
- Vrednote
- Ve
- različica
- preko
- način..
- we
- Dobro
- so bili
- Kaj
- Kaj je
- ali
- ki
- medtem
- zakaj
- Wikipedia
- bo
- z
- brez
- Zmagali
- deluje
- deluje
- Klobase
- bi
- X
- Vi
- Vaša rutina za
- zefirnet