Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learnin avulla

Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learnin avulla

esittely

Tämä opas on kolmas ja viimeinen osa kolmesta Support Vector Machines (SVM) -oppaasta. Tässä oppaassa jatkamme työskentelyä väärennettyjen seteleiden käyttötapauksen parissa, teemme nopean yhteenvedon SVM:iden yleisestä ideasta, ymmärrämme ytimen tempun ja toteutamme erilaisia ​​epälineaarisia ytimiä Scikit-Learnin avulla.

Täydellisessä SVM-oppaiden sarjassa opit muun tyyppisistä SVM:istä oppimisen lisäksi myös yksinkertaisista SVM:istä, SVM:n ennalta määritetyistä parametreista, C- ja Gamma-hyperparametreistä ja kuinka niitä voidaan virittää ruudukkohaun ja ristiintarkistuksen avulla.

Jos haluat lukea aiempia oppaita, voit vilkaista kahta ensimmäistä opasta tai katsoa, ​​mitkä aiheet kiinnostavat sinua eniten. Alla on taulukko kussakin oppaassa käsitellyistä aiheista:

  1. SVM:n ja ytimen SVM:n käyttöönotto Pythonin Scikit-Learnin avulla
  • Käyttötapaus: unohda setelit
  • SVM:iden tausta
  • Yksinkertainen (lineaarinen) SVM-malli
    • Tietoja tietojoukosta
    • Tietojoukon tuonti
    • Tietojoukon tutkiminen
  • SVM:n käyttöönotto Scikit-Learnin avulla
    • Tietojen jakaminen juna-/testisarjoihin
    • Mallin kouluttaminen
    • Ennusteiden tekeminen
    • Mallin arviointi
    • Tulokset
  1. SVM-hyperparametrien ymmärtäminen
  • C-hyperparametri
  • Gamma-hyperparametri

3. Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learnin avulla

  • SVM:ien yleinen idea (yhteenveto)
  • Ytimen (temppu) SVM
  • Ei-lineaarisen ytimen SVM:n käyttöönotto Scikit-Learnin avulla
  • Kirjastojen tuominen
    • Tietojoukon tuonti
    • Tietojen jakaminen ominaisuuksiin (X) ja kohteeseen (y)
    • Tietojen jakaminen juna-/testisarjoihin
    • Algoritmin koulutus
  • Polynominen ydin
    • Ennusteiden tekeminen
    • Algoritmin arviointi
  • Gaussin ydin
    • Ennustus ja arviointi
  • Sigmoid-ydin
    • Ennustus ja arviointi
  • Ei-lineaarisen ytimen suorituskyvyn vertailu

Muistetaan, mistä SVM:ssä on kyse, ennen kuin näemme mielenkiintoisia SVM-ytimen muunnelmia.

SVM:n yleinen idea

Lineaarisesti erotettavissa olevan datan tapauksessa kahdessa ulottuvuudessa (kuten kuvassa 1) tyypillinen koneoppimisalgoritmin lähestymistapa olisi yrittää löytää raja, joka jakaa datan siten, että virheluokitusvirhe minimoidaan. Jos katsot tarkasti kuvaa 1, huomaa, että siinä voi olla useita rajoja (äärettömät), jotka jakavat datapisteet oikein. Kaksi katkoviivaa sekä yhtenäinen viiva ovat kaikki kelvollisia tietojen luokituksia.

Useita päätösrajoja

Kuva 1: Useita päätösrajoja

Kun SVM valitsee päätöksen raja, se valitsee rajan, joka maksimoi etäisyyden itsensä ja luokkien lähimpien datapisteiden välillä. Tiedämme jo, että lähimmät datapisteet ovat tukivektorit ja että etäisyyttä voidaan parametroida molemmilla C ja gamma hyperparametrit.

Laskeessaan päätösrajaa algoritmi valitsee, kuinka monta pistettä otetaan huomioon ja kuinka pitkälle marginaali voi mennä – tämä määrittää marginaalin maksimointiongelman. Ratkaiseessaan marginaalin maksimointiongelman SVM käyttää tukivektoreita (kuten kuvassa 2) ja yrittää selvittää, mitkä ovat optimaaliset arvot, jotka pitävät marginaalietäisyyden suurempana, ja luokittelee enemmän pisteitä oikein käytettävän funktion mukaan. erota tiedot.

Päätösraja tukivektorien kanssa

Kuva 2: Päätösraja tukivektorien kanssa

Tästä syystä SVM eroaa muista luokittelualgoritmeista, kun se ei vain löydä päätösrajaa, vaan se päätyy löytämään optimaalisen päätösrajan.

Tukivektorien löytämisen, päätösrajan ja tukivektoreiden välisen marginaalin laskemisen ja marginaalin maksimoimisen takana on tilastoista ja laskentamenetelmistä johdettu monimutkainen matematiikka. Tällä kertaa emme mene yksityiskohtiin matematiikan toiminnasta.

On aina tärkeää sukeltaa syvemmälle ja varmistaa, etteivät koneoppimisalgoritmit ole jonkinlainen mystinen loitsu, vaikka kaikkien matemaattisten yksityiskohtien tuntematta jättäminen tällä hetkellä ei estänyt eikä estä sinua suorittamasta algoritmia ja saamasta tuloksia.

Neuvo: Nyt kun olemme tehneet yhteenvedon algoritmisesta prosessista, on selvää, että datapisteiden välinen etäisyys vaikuttaa SVM:n valitsemaan päätösrajaan. datan skaalaaminen on yleensä tarpeen, kun käytetään SVM-luokitinta. Kokeile käyttää Scikit-learnin Standard Scaler -menetelmä valmistelemaan tietoja ja suorittamaan sitten koodit uudelleen nähdäksesi, onko tuloksissa eroja.

Ytimen (temppu) SVM

Edellisessä osiossa olemme muistaneet ja järjestäneet SVM:n yleisidean – katsomme, kuinka sen avulla voidaan löytää optimaalinen päätösraja lineaarisesti erotettavalle datalle. Epälineaarisesti erotettavissa olevan datan, kuten kuvassa 3 esitetyn, tapauksessa tiedämme kuitenkin jo, että suoraa ei voida käyttää päätösrajana.

Epälineaarisesti erotettava data

Kuva 3: Epälineaarisesti erotettava data

Sen sijaan voimme käyttää SVM:n modifioitua versiota, josta keskustelimme alussa, nimeltään Kernel SVM.

Periaatteessa ytimen SVM projisoi pienempien ulottuvuuksien epälineaarisesti erotettavan datan vastaavaan muotoonsa korkeammissa ulottuvuuksissa. Tämä on temppu, koska projisoitaessa epälineaarisesti erotettavaa dataa korkeampiin ulottuvuuksiin, datan muoto muuttuu siten, että siitä tulee erotettavissa olevaa. Kun esimerkiksi ajatellaan kolmea ulottuvuutta, kunkin luokan datapisteet voivat päätyä allokoitumaan eri ulottuvuuteen, jolloin se voidaan erottaa. Yksi tapa lisätä datan ulottuvuutta voi olla sen eksponentioiminen. Jälleen, tähän liittyy monimutkaista matematiikkaa, mutta sinun ei tarvitse huolehtia siitä voidaksesi käyttää SVM:ää. Sen sijaan voimme käyttää Pythonin Scikit-Learn-kirjastoa toteuttamaan ja käyttämään epälineaarisia ytimiä samalla tavalla kuin olemme käyttäneet lineaarista.

Ei-lineaarisen ytimen SVM:n käyttöönotto Scikit-Learnin avulla

Tässä osiossa käytämme samaa tietojoukkoa ennustamaan, onko seteli aito vai väärennetty neljän jo tuntemamme ominaisuuden mukaisesti.

Näet, että loput vaiheet ovat tyypillisiä koneoppimisvaiheita ja tarvitsevat hyvin vähän selitystä, kunnes saavutamme osan, jossa koulutamme epälineaarisia ytimen SVM:itä.

Kirjastojen tuominen

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

Tietojoukon tuonti

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)

Tietojen jakaminen ominaisuuksiin (X) ja kohteeseen (y)

X = bankdata.drop('class', axis=1)
y = bankdata['class']

Tietojen jakaminen juna-/testisarjoihin

SEED = 42 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = SEED)

Algoritmin koulutus

Käytämme samaa ytimen SVM:n kouluttamiseen SVC Scikit-Learnin luokassa svm kirjasto. Ero on ytimen parametrin arvossa SVC luokka.

Yksinkertaisen SVM:n tapauksessa olemme käyttäneet "lineaarista" ytimen parametrin arvona. Kuitenkin, kuten olemme aiemmin maininneet, ytimen SVM:ssä voimme käyttää Gaussin, polynomin, sigmoidi- tai laskettavia ytimiä. Toteutamme polynomi-, Gauss- ja sigmoidiytimet ja tarkastelemme sen lopullisia mittareita nähdäksemme, kumpi näyttää sopivan luokkiimme korkeammalla mittarilla.

1. Polynomiydin

Algebrassa polynomi on muodon lauseke:

$$
2a*b^3 + 4a – 9
$$

Tässä on muuttujia, kuten a ja b, vakiot, esimerkissämme, 9 ja kertoimet (vakiot ja muuttujat), kuten 2 ja 4. 3 katsotaan polynomin asteena.

On olemassa tietotyyppejä, jotka voidaan parhaiten kuvata käytettäessä polynomifunktiota. Tässä ydin tekee, kun kartoittaa tietomme polynomiin, jonka asteen valitsemme. Mitä korkeampi tutkinto, sitä enemmän funktio yrittää päästä lähemmäksi dataa, joten päätösraja on joustavampi (ja alttiimpi ylisovitukselle) – mitä pienempi aste, sitä vähemmän joustava.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Joten täytäntöönpanosta polynomiydin, sen lisäksi, että valitset poly ytimen, välitämme myös arvon degree parametri SVC luokkaa. Alla on koodi:

from sklearn.svm import SVC
svc_poly = SVC(kernel='poly', degree=8)
svc_poly.fit(X_train, y_train)

Ennusteiden tekeminen

Nyt, kun olemme kouluttaneet algoritmin, seuraava askel on tehdä ennusteita testidatan perusteella.

Kuten olemme tehneet aiemmin, voimme suorittaa seuraavan komentosarjan tehdäksesi sen:

y_pred_poly = svclassifier.predict(X_test)

Algoritmin arviointi

Kuten tavallista, viimeinen vaihe on arvioiden tekeminen polynomiytimellä. Koska olemme toistaneet luokitusraportin ja sekavuusmatriisin koodin muutaman kerran, muunnetaan se funktioksi, joka display_results saatuaan vastaavat tiedot y_test, y_pred ja otsikko Seabornin hämmennysmatriisiin 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))

Nyt voimme kutsua funktiota ja tarkastella polynomiytimellä saatuja tuloksia:

cm_title_poly = "Confusion matrix with polynomial kernel"
display_results(y_test, y_pred_poly, cm_title_poly)

Tulos näyttää tältä:

 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

Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learn PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Nyt voimme toistaa samat vaiheet Gaussin ja sigmoidiytimille.

2. Gaussin ydin

Jos haluat käyttää gaussin ydintä, meidän tarvitsee vain määrittää "rbf" arvoksi kernel SVC-luokan parametri:

svc_gaussian = SVC(kernel='rbf', degree=8)
svc_gaussian.fit(X_train, y_train)

Kun tutkit tätä ydintä edelleen, voit myös käyttää ruudukkohakua yhdistääksesi sen eri C ja gamma arvot.

Ennustus ja arviointi

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)

Gauss-ytimen SVM:n tulos näyttää tältä:

 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

Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learn PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

3. Sigmoid-ydin

Lopuksi käytetään sigmoidista ydintä ytimen SVM:n toteuttamiseen. Katso seuraava skripti:

svc_sigmoid = SVC(kernel='sigmoid')
svc_sigmoid.fit(X_train, y_train)

Jos haluat käyttää sigmoid-ydintä, sinun on määritettävä 'sigmoid' arvoksi kernel parametri SVC luokka.

Ennustus ja arviointi

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)

Ytimen SVM:n tulos Sigmoid-ytimellä näyttää tältä:

 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

Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learn PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Ei-lineaarisen ytimen suorituskyvyn vertailu

Jos verrataan lyhyesti erityyppisten epälineaaristen ytimien suorituskykyä, saattaa vaikuttaa siltä, ​​että sigmoidiytimellä on alhaisimmat mittarit, joten suorituskyky on huonoin.

Gaussin ja polynomin ytimistä voimme nähdä, että Gaussin ydin saavutti täydellisen 100 %:n ennustusasteen – mikä on yleensä epäilyttävää ja saattaa viitata ylisovitukseen, kun taas polynomiydin luokitteli väärin 68 luokan 1 esiintymää.

Siksi ei ole olemassa tiukkaa sääntöä siitä, mikä ydin toimii parhaiten kaikissa skenaarioissa tai nykyisessä skenaariossamme ilman hyperparametrien etsimistä, kunkin funktiomuodon ymmärtämistä, tietojen tutkimista ja harjoitus- ja testitulosten vertailua sen selvittämiseksi, toimiiko algoritmi. yleistää.

Kyse on kaikkien ytimien testaamisesta ja sen valitsemisesta parametrien ja tietojen valmistelun yhdistelmällä, joka antaa odotetut tulokset projektisi kontekstin mukaan.

Jatketaan – Kädessä pidettävä päästä päähän -projekti

Utelias luonteesi saa sinut haluamaan pidemmälle? Suosittelemme tutustumaan meidän Ohjattu projekti: "Hands-on House Price Prediction – koneoppiminen Pythonissa".

Muiden SVM-makujen käyttöönotto Pythonin Scikit-Learn PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Tässä ohjatussa hankkeessa opit rakentamaan tehokkaita perinteisiä koneoppimismalleja sekä syväoppimismalleja, hyödyntämään Ensemble Learningiä ja kouluttamaan meta-oppineita ennustamaan asuntojen hintoja Scikit-Learn- ja Keras-mallien pussin avulla.

Käyttämällä Kerasia, Tensorflow:n päälle rakennettua syväoppimissovellusliittymää, kokeilemme arkkitehtuuria, rakennamme joukon pinottuja malleja ja koulutamme meta-oppija hermoverkko (tason 1 malli) talon hinnoittelun selvittämiseksi.

Syväoppiminen on hämmästyttävää – mutta ennen kuin siihen turvaudutaan, on suositeltavaa yrittää ratkaista ongelma myös yksinkertaisemmilla tekniikoilla, kuten pinnallista oppimista algoritmeja. Lähtötason suorituskykymme perustuu a Satunnainen metsäregressio algoritmi. Lisäksi – tutkimme mallien ryhmien luomista Scikit-Learnin avulla esimerkiksi pussitus ja äänestys.

Tämä on päästä päähän -projekti, ja kuten kaikki koneoppimisprojektit, aloitamme – kanssa Tutkimusaineistoanalyysi, jonka jälkeen Tietojen esikäsittely ja lopuksi Rakennus matala ja Syväoppimismallit sopimaan aiemmin tutkimiimme ja puhdistamiimme tietoihin.

Yhteenveto

Tässä artikkelissa teimme nopean yhteenvedon SVM:istä, tutkimme ytimen temppua ja toteutimme erilaisia ​​​​epälineaaristen SVM:ien makuja.

Suosittelen, että otat jokaisen ytimen käyttöön ja jatkat eteenpäin. Voit tutkia eri ytimien luomiseen käytettyä matematiikkaa, niiden luomisen syytä ja niiden hyperparametrien eroja. Tällä tavalla opit tekniikoista ja siitä, minkä tyyppistä ydintä on parasta käyttää kontekstista ja saatavilla olevista tiedoista riippuen.

Selkeä käsitys siitä, miten kukin ydin toimii ja milloin niitä tulee käyttää, auttaa sinua varmasti matkallasi. Kerro meille kuinka edistyminen etenee ja onnea koodaukseen!

Aikaleima:

Lisää aiheesta Stackabus