Introducere
Acest ghid este a treia și ultima parte a trei ghiduri despre suport Vector Machines (SVMs). În acest ghid, vom continua să lucrăm cu cazul de utilizare a bancnotelor falsificate, vom avea o recapitulare rapidă despre ideea generală din spatele SVM-urilor, vom înțelege care este trucul nucleului și vom implementa diferite tipuri de nuclee neliniare cu Scikit-Learn.
În seria completă de ghiduri SVM, pe lângă informații despre alte tipuri de SVM, veți afla și despre SVM simpli, parametrii SVM predefiniti, hiperparametrii C și Gamma și cum pot fi reglați cu căutarea în grilă și validarea încrucișată.
Dacă doriți să citiți ghidurile anterioare, puteți arunca o privire la primele două ghiduri sau puteți vedea ce subiecte vă interesează cel mai mult. Mai jos este tabelul cu subiectele abordate în fiecare ghid:
- Caz de utilizare: uitați bancnotele
- Contextul SVM-urilor
- Model SVM simplu (liniar).
- Despre setul de date
- Importul setului de date
- Explorarea setului de date
- Implementarea SVM cu Scikit-Learn
- Împărțirea datelor în seturi de tren/test
- Instruirea modelului
- Realizarea previziunilor
- Evaluarea modelului
- Interpretarea rezultatelor
- Hiperparametrul C
- Hiperparametrul Gamma
3. Implementarea altor variante SVM cu Scikit-Learn de la Python
- Ideea generală a SVM-urilor (o recapitulare)
- Kernel (Trick) SVM
- Implementarea SVM a kernelului non-liniar cu Scikit-Learn
- Importul bibliotecilor
- Importul setului de date
- Împărțirea datelor în caracteristici (X) și țintă (y)
- Împărțirea datelor în seturi de tren/test
- Antrenarea algoritmului
- Nucleu polinom
- Realizarea previziunilor
- Evaluarea algoritmului
- Miez gaussian
- Predicție și evaluare
- Nuezul sigmoid
- Predicție și evaluare
- Comparația performanțelor kernelului neliniar
Să ne amintim despre ce este SVM înainte de a vedea câteva variații interesante ale nucleului SVM.
Ideea generală a SVM-urilor
În cazul datelor separabile liniar în două dimensiuni (așa cum se arată în Fig. 1), abordarea tipică a algoritmului de învățare automată ar fi încercarea de a găsi o limită care împarte datele în așa fel încât eroarea de clasificare greșită să fie redusă la minimum. Dacă vă uitați cu atenție la figura 1, observați că pot exista mai multe limite (infinite) care împart corect punctele de date. Cele două linii întrerupte, precum și linia continuă sunt toate clasificări valide ale datelor.
Fig 1: Limite de decizii multiple
Când SVM alege hotar de decizie, alege o graniță care maximizează distanța dintre ea și cele mai apropiate puncte de date ale claselor. Știm deja că cele mai apropiate puncte de date sunt vectorii suport și că distanța poate fi parametrizată atât prin C
și gamma
hiperparametrii.
În calculul acelei limite de decizie, algoritmul alege câte puncte să ia în considerare și cât de departe poate merge marja - acest lucru configurează o problemă de maximizare a marjei. Pentru a rezolva această problemă de maximizare a marjei, SVM folosește vectorii suport (așa cum se vede în Fig. 2) și încearcă să descopere care sunt valorile optime care mențin distanța de marjă mai mare, în timp ce clasifică mai multe puncte în mod corect în funcție de funcția care este utilizată pentru separa datele.
Fig 2: Limită de decizie cu vectori suport
Acesta este motivul pentru care SVM diferă de alți algoritmi de clasificare, odată ce nu găsește doar o limită de decizie, ci ajunge să găsească limita de decizie optimă.
Există o matematică complexă derivată din statistici și metode de calcul implicate în spatele găsirii vectorilor suport, calculând marja dintre limita de decizie și vectorii suport și maximizând acea marjă. De data aceasta, nu vom intra în detalii despre modul în care se desfășoară matematica.
Este întotdeauna important să vă aprofundați și să vă asigurați că algoritmii de învățare automată nu sunt un fel de vrajă misterioasă, deși nu cunoașteți fiecare detaliu matematic în acest moment nu v-a împiedicat și nu vă va împiedica să puteți executa algoritmul și să obțineți rezultate.
Indicații: acum că am făcut o recapitulare a procesului algoritmic, este clar că distanța dintre punctele de date va afecta limita de decizie pe care SVM o alege, din această cauză, scalarea datelor este de obicei necesar atunci când se utilizează un clasificator SVM. Încercați să utilizați Metoda Scaler standard de la Scikit-learn pentru a pregăti datele și apoi rulați din nou codurile pentru a vedea dacă există o diferență între rezultate.
Kernel (Trick) SVM
În secțiunea anterioară, ne-am amintit și am organizat ideea generală a SVM - văzând cum poate fi folosită pentru a găsi limita optimă de decizie pentru date separabile liniar. Cu toate acestea, în cazul datelor separabile neliniar, cum ar fi cea prezentată în Fig. 3, știm deja că o linie dreaptă nu poate fi folosită ca limită de decizie.
Fig 3: Date neliniar separabile
Mai degrabă, putem folosi versiunea modificată de SVM despre care am discutat la început, numită Kernel SVM.
Practic, ceea ce va face SVM-ul nucleului este să proiecteze datele separabile neliniar de dimensiuni inferioare la forma corespunzătoare în dimensiuni mai mari. Acesta este un truc, deoarece atunci când proiectați date neliniar separabile în dimensiuni mai mari, forma datelor se schimbă în așa fel încât devin separabile. De exemplu, când ne gândim la 3 dimensiuni, punctele de date din fiecare clasă ar putea ajunge să fie alocate într-o dimensiune diferită, făcându-l separabil. O modalitate de a crește dimensiunile datelor poate fi prin exponenția lor. Din nou, există matematică complexă implicată în acest lucru, dar nu trebuie să vă faceți griji pentru a utiliza SVM. Mai degrabă, putem folosi biblioteca Scikit-Learn de la Python pentru a implementa și a folosi nucleele neliniare în același mod în care am folosit liniarul.
Implementarea SVM a kernelului non-liniar cu Scikit-Learn
În această secțiune, vom folosi același set de date pentru a estima dacă o bancnotă este reală sau falsificată conform celor patru caracteristici pe care le cunoaștem deja.
Veți vedea că restul pașilor sunt pași tipici de învățare automată și au nevoie de foarte puține explicații până când ajungem la partea în care antrenăm SVM-urile noastre neliniare Kernel.
Importul bibliotecilor
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
Importul setului de date
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)
Împărțirea datelor în caracteristici (X) și țintă (y)
X = bankdata.drop('class', axis=1)
y = bankdata['class']
Împărțirea datelor în seturi de tren/test
SEED = 42 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = SEED)
Antrenarea algoritmului
Pentru a antrena SVM-ul nucleului, vom folosi același lucru SVC
clasa Scikit-Learn's svm
bibliotecă. Diferența constă în valoarea parametrului kernel al SVC
clasă.
În cazul SVM-ului simplu am folosit „liniar” ca valoare pentru parametrul nucleului. Cu toate acestea, așa cum am menționat mai devreme, pentru nucleu SVM, putem folosi nuclee gaussiene, polinomiale, sigmoide sau calculabile. Vom implementa nuclee polinomiale, gaussiene și sigmoide și vom analiza metricile finale pentru a vedea care dintre ele pare să se potrivească claselor noastre cu o metrică mai mare.
1. Nucleu polinom
În algebră, un polinom este o expresie de forma:
$$
2a*b^3 + 4a – 9
$$
Aceasta are variabile, cum ar fi a
și b
, constante, în exemplul nostru, 9
şi coeficienţi (constante însoţite de variabile), precum 2
și 4
. 3
este considerat a fi gradul polinomului.
Există tipuri de date care pot fi descrise cel mai bine atunci când se folosește o funcție polinomială, aici, ceea ce va face nucleul este să mapam datele noastre la un polinom la care vom alege gradul. Cu cât gradul este mai mare, cu atât funcția va încerca să se apropie de date, astfel încât limita de decizie este mai flexibilă (și mai predispusă la supraadaptare) – cu cât gradul este mai mic, cu atât mai puțin flexibil.
Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!
Deci, pentru implementarea nucleu polinom, pe lângă alegerea poly
kernel, vom transmite și o valoare pentru degree
parametrul parametrului SVC
clasă. Mai jos este codul:
from sklearn.svm import SVC
svc_poly = SVC(kernel='poly', degree=8)
svc_poly.fit(X_train, y_train)
Realizarea previziunilor
Acum, odată ce am antrenat algoritmul, următorul pas este să facem predicții asupra datelor de testare.
Așa cum am făcut anterior, putem executa următorul script pentru a face acest lucru:
y_pred_poly = svclassifier.predict(X_test)
Evaluarea algoritmului
Ca de obicei, pasul final este de a face evaluări pe nucleul polinom. Deoarece am repetat de câteva ori codul pentru raportul de clasificare și matricea de confuzie, să-l transformăm într-o funcție care display_results
după primirea respectivelor y_test
, y_pred
și titlul matricei de confuzie a Seaborn cu 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))
Acum, putem apela funcția și privim rezultatele obținute cu nucleul polinom:
cm_title_poly = "Confusion matrix with polynomial kernel"
display_results(y_test, y_pred_poly, cm_title_poly)
Ieșirea arată astfel:
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
Acum putem repeta aceiași pași pentru nucleele gaussiene și sigmoide.
2. Miez gaussian
Pentru a folosi nucleul gaussian, trebuie doar să specificăm „rbf” ca valoare pentru kernel
parametrul clasei SVC:
svc_gaussian = SVC(kernel='rbf', degree=8)
svc_gaussian.fit(X_train, y_train)
Când explorați în continuare acest nucleu, puteți utiliza și căutarea în grilă pentru a-l combina cu diferite C
și gamma
valori.
Predicție și evaluare
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)
Ieșirea SVM-ului nucleului gaussian arată astfel:
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. Nuezul sigmoid
În cele din urmă, să folosim un nucleu sigmoid pentru implementarea Kernel SVM. Aruncă o privire la următorul script:
svc_sigmoid = SVC(kernel='sigmoid')
svc_sigmoid.fit(X_train, y_train)
Pentru a utiliza nucleul sigmoid, trebuie să specificați „sigmoid” ca valoare pentru kernel
parametrul parametrului SVC
clasă.
Predicție și evaluare
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)
Ieșirea Kernel SVM cu kernel Sigmoid arată astfel:
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
Comparația performanțelor kernelului neliniar
Dacă comparăm pe scurt performanța diferitelor tipuri de nuclee neliniare, s-ar putea părea că nucleul sigmoid are cele mai scăzute valori, deci cea mai proastă performanță.
Printre nucleele gaussiene și polinomiale, putem observa că nucleul gaussian a atins o rată de predicție perfectă de 100% - ceea ce este de obicei suspect și poate indica o supraadaptare, în timp ce nucleul polinomial a clasificat greșit 68 de instanțe din clasa 1.
Prin urmare, nu există o regulă strictă și rapidă cu privire la care nucleu funcționează cel mai bine în fiecare scenariu sau în scenariul nostru actual, fără a căuta în continuare hiperparametrii, a înțelege despre fiecare formă a funcției, a explora datele și a compara rezultatele trenului și testelor pentru a vedea dacă algoritmul se generalizează.
Este vorba despre testarea tuturor nucleelor și selectarea celui cu combinația de parametri și pregătirea datelor care dau rezultatele așteptate în funcție de contextul proiectului dumneavoastră.
Going Further – Proiect manual de la capăt la capăt
Natura ta curios te face să vrei să mergi mai departe? Vă recomandăm să verificați Proiect ghidat: „Predicție practică pentru prețul casei – Învățare automată în Python”.
În acest proiect ghidat – veți învăța cum să construiți modele puternice tradiționale de învățare automată, precum și modele de învățare profundă, să utilizați Ensemble Learning și să pregătiți meta-învățați pentru a prezice prețurile caselor dintr-un pachet de modele Scikit-Learn și Keras.
Folosind Keras, API-ul de deep learning construit pe Tensorflow, vom experimenta arhitecturi, vom construi un ansamblu de modele stivuite și vom antrena un meta-învățator rețea neuronală (model de nivel 1) pentru a afla prețul unei case.
Învățarea profundă este uimitoare – dar înainte de a recurge la ea, se recomandă să încercați și să rezolvați problema cu tehnici mai simple, cum ar fi cu învăţare superficială algoritmi. Performanța noastră de bază se va baza pe a Regresie aleatorie a pădurii algoritm. În plus – vom explora crearea de ansambluri de modele prin Scikit-Learn prin tehnici precum insacuire și vot.
Acesta este un proiect de la capăt la capăt și, ca toate proiectele de învățare automată, vom începe cu – cu Analiza datelor exploratorii, urmat de Pre-procesare de date și, în sfârșit Construire superficială și Modele de învățare profundă pentru a se potrivi cu datele pe care le-am explorat și curățat anterior.
Concluzie
În acest articol, am făcut o recapitulare rapidă a SVM-urilor, am studiat despre trucul nucleului și am implementat diferite variante de SVM-uri neliniare.
Vă sugerez să implementați fiecare nucleu și să mergeți mai departe. Puteți explora matematica folosită pentru a crea fiecare dintre diferitele nuclee, de ce au fost create și diferențele în ceea ce privește hiperparametrii lor. În acest fel, veți afla despre tehnici și ce tip de nucleu este cel mai bine aplicat în funcție de context și de datele disponibile.
Înțelegerea clară a modului în care funcționează fiecare nucleu și când să le utilizați vă va ajuta cu siguranță în călătoria dvs. Spuneți-ne cum merge progresul și codificare fericită!
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- Platoblockchain. Web3 Metaverse Intelligence. Cunoștințe amplificate. Accesați Aici.
- Mintând viitorul cu Adryenn Ashley. Accesați Aici.
- Sursa: https://stackabuse.com/implementing-other-svm-flavors-with-pythons-scikit-learn/
- :are
- :este
- :nu
- :Unde
- $UP
- 1
- 20
- 67
- 8
- 84
- a
- Capabil
- Despre Noi
- despre
- Conform
- precizie
- realizat
- de fapt
- În plus,
- afecta
- După
- Alerta
- Algoritmul
- algoritmică
- algoritmi
- TOATE
- alocate
- deja
- de asemenea
- Cu toate ca
- mereu
- uimitor
- an
- și
- api
- Aplică
- abordare
- SUNT
- articol
- AS
- At
- disponibil
- sac
- Bancă
- bazat
- De bază
- BE
- deoarece
- devine
- înainte
- Început
- în spatele
- fiind
- de mai jos
- CEL MAI BUN
- între
- mai mare
- frontieră
- atât
- limitele
- scurt
- construi
- construit
- dar
- by
- calcularea
- apel
- denumit
- CAN
- nu poti
- caz
- Modificări
- control
- Alege
- alegere
- clasă
- clase
- clasificare
- clar
- îndeaproape
- mai aproape
- cod
- combinaţie
- combina
- comparaţie
- compararea
- Completă
- complex
- concluzie
- confuzie
- Lua în considerare
- luate în considerare
- context
- Corespunzător
- ar putea
- acoperit
- crea
- a creat
- Crearea
- Trece
- Curent
- de date
- puncte de date
- Pregătirea datelor
- decizie
- adânc
- învățare profundă
- Mai adânc
- categoric
- Grad
- În funcție
- Derivat
- descris
- detaliu
- detalii
- diferenţă
- diferenţele
- diferit
- Dimensiune
- Dimensiuni
- discutat
- distanţă
- do
- fiecare
- Mai devreme
- un capăt la altul
- se încheie
- eroare
- evaluări
- Fiecare
- exemplu
- a executa
- de aşteptat
- experiment
- explicație
- explora
- explorat
- Explorarea
- FAST
- DESCRIERE
- puțini
- Figura
- final
- În cele din urmă
- Găsi
- descoperire
- First
- potrivi
- flexibil
- Concentra
- a urmat
- următor
- Pentru
- pădure
- formă
- patru
- din
- funcţie
- mai mult
- General
- obține
- merge
- Da
- Go
- merge
- Grilă
- ghida
- Ghiduri
- hands-on
- fericit
- Greu
- Avea
- ajutor
- aici
- superior
- casă
- planare
- Cum
- Cum Pentru a
- Totuși
- HTML
- HTTPS
- ICON
- idee
- punerea în aplicare a
- implementat
- Punere în aplicare a
- important
- in
- inclus
- crescând
- indica
- Infinit
- instanță
- interes
- interesant
- în
- Introducere
- implicat
- IT
- ESTE
- în sine
- călătorie
- jpg
- A pastra
- keras
- Copil
- Cunoaște
- Cunoaștere
- AFLAȚI
- învăţare
- LG
- biblioteci
- Bibliotecă
- se află
- ca
- Linie
- linii
- mic
- Uite
- Se pare
- maşină
- masina de învățare
- Masini
- Macro
- făcut
- face
- FACE
- Efectuarea
- multe
- Hartă
- Margine
- matematic
- matematică
- matplotlib
- Matrice
- Maximizează
- Mai..
- menționat
- pur și simplu
- Metode
- metric
- Metrici
- ar putea
- model
- Modele
- modificată
- mai mult
- cele mai multe
- multiplu
- misterios
- Natură
- necesar
- Nevoie
- reţea
- rețele neuronale
- următor
- notițe
- acum
- NumPy
- obține
- obținut
- of
- on
- ONE
- afară
- optimă
- or
- comandă
- Organizat
- Altele
- al nostru
- producție
- panda
- parametru
- parametrii
- parte
- trece
- Perfect
- performanță
- efectuează
- Plato
- Informații despre date Platon
- PlatoData
- Joaca
- puncte
- puternic
- Practic
- Precizie
- prezice
- prezicere
- Predictii
- Pregăti
- precedent
- în prealabil
- preţ
- Predicția prețurilor
- Prețuri
- de stabilire a prețurilor
- Problemă
- proces
- Progres
- proiect
- Proiecte
- Piton
- Rapid
- rată
- mai degraba
- Rbf
- ajunge
- Citeste
- real
- recapitula
- primire
- recomanda
- cu privire la
- minte
- repeta
- repetat
- raportează
- REST
- REZULTATE
- Inel
- Regula
- funcţionare
- s
- acelaşi
- scenariu
- scikit-learn
- născut în mare
- Caută
- căutare
- Secțiune
- sămânţă
- vedere
- pare
- selectarea
- distinct
- serie
- câteva
- Umbră
- Modela
- indicat
- simplu
- întrucât
- So
- solid
- Rezolvarea
- unele
- VRAJA
- Stackabuse
- stivuite
- standard
- standarde
- Începe
- statistică
- Pas
- paşi
- Stop
- drept
- studiat
- astfel de
- a sustine
- suspicios
- SVG
- tabel
- Lua
- Ţintă
- tehnici de
- tensorflow
- test
- Testarea
- acea
- lor
- Lor
- Acolo.
- ei
- Gândire
- Al treilea
- acest
- trei
- Prin
- timp
- ori
- Titlu
- la
- top
- subiecte
- tradiţional
- Tren
- dresat
- Pregătire
- Transforma
- tranziţie
- adevărat
- Tipuri
- tipic
- înţelege
- înţelegere
- us
- utilizare
- carcasa de utilizare
- utilizat
- folosind
- obișnuit
- folosi
- validare
- valoare
- Valori
- Ve
- versiune
- de
- Cale..
- we
- BINE
- au fost
- Ce
- Ce este
- dacă
- care
- în timp ce
- de ce
- Wikipedia
- voi
- cu
- fără
- Castigat
- de lucru
- fabrică
- Mini rulouri de absorbție
- ar
- X
- Tu
- Ta
- zephyrnet