logo

Palaikykite vektorinės mašinos (SVM) algoritmą

„Support Vector Machine“ (SVM) yra galingas mašininio mokymosi algoritmas, naudojamas linijiniam ar netiesiniam klasifikavimui, regresijai ir net išskirtinių dalykų aptikimo užduotims atlikti. SVM gali būti naudojami įvairioms užduotims, tokioms kaip teksto klasifikavimas, vaizdų klasifikavimas, šlamšto aptikimas, rašysenos identifikavimas, genų ekspresijos analizė, veido aptikimas ir anomalijų aptikimas. SVM yra pritaikomi ir veiksmingi įvairiose programose, nes jie gali valdyti didelės apimties duomenis ir netiesinius ryšius.

SVM algoritmai yra labai veiksmingi, nes mes stengiamės rasti maksimalų atskyrimo hiperplokštumą tarp skirtingų klasių, prieinamų tikslinėje savybėje.



c++ prototipo funkcija

Palaikykite vektorinę mašiną

Parama vektorinė mašina (SVM) yra a prižiūrimas mašininis mokymasis Klasifikavimui ir regresijai naudojamas algoritmas. Nors mes taip pat sakome regresijos problemas, ji geriausiai tinka klasifikacijai. Pagrindinis SVM algoritmo tikslas yra rasti optimalią hiperplokštumą N matmenų erdvėje, kuri galėtų atskirti duomenų taškus skirtingose ​​ypatybių erdvės klasėse. Hiperplokštuma stengiasi, kad skirtumas tarp artimiausių skirtingų klasių taškų būtų kuo didesnis. Hiperplokštumos matmenys priklauso nuo funkcijų skaičiaus. Jei įvesties ypatybių skaičius yra du, tada hiperplokštuma yra tik linija. Jei įvesties ypatybių skaičius yra trys, tada hiperplokštuma tampa 2-D plokštuma. Sunku įsivaizduoti, kai funkcijų skaičius viršija tris.

Panagrinėkime du nepriklausomus kintamuosius x1, x2,ir vienas priklausomas kintamasis, kuris yra mėlynas arba raudonas apskritimas.

Tiesiškai atskiriami duomenų taškai



Iš aukščiau esančio paveikslo labai aišku, kad yra kelios eilutės (mūsų hiperplokštuma čia yra linija, nes mes svarstome tik dvi įvesties funkcijas x1, x2), kurie atskiria mūsų duomenų taškus arba klasifikuoja raudonus ir mėlynus apskritimus. Taigi, kaip pasirinkti geriausią liniją arba apskritai geriausią hiperplokštumą, kuri atskiria mūsų duomenų taškus?

Kaip veikia SVM?

Vienas protingas pasirinkimas kaip geriausia hiperplokštuma yra ta, kuri atspindi didžiausią atskyrimą arba skirtumą tarp dviejų klasių.

Kelios hiperplokštumos, skiriančios duomenis iš dviejų klasių

Kelios hiperplokštumos atskiria duomenis iš dviejų klasių



Taigi pasirenkame hiperplokštumą, kurios atstumas nuo jos iki artimiausio duomenų taško kiekvienoje pusėje yra maksimalus. Jei toks hiperplokštumas egzistuoja, jis vadinamas didžiausios maržos hiperplokštuma/kietoji paraštė . Taigi iš aukščiau pateikto paveikslo pasirenkame L2. Panagrinėkime scenarijų, kaip parodyta toliau

Hiperplokštumos pasirinkimas duomenims su nuokrypiais

Hiperplokštumos pasirinkimas duomenims su nuokrypiais

Čia turime vieną mėlyną rutulį raudono rutulio ribose. Taigi, kaip SVM klasifikuoja duomenis? Tai paprasta! Mėlynas rutulys, esantis raudonų rutuliukų ribose, yra mėlynų rutulių skirtumas. SVM algoritmas turi ypatybes, leidžiančias nepaisyti nuokrypio ir randa geriausią hiperplokštumą, kuri padidina maržą. SVM yra atsparus pašaliniams rodikliams.

Hiperplane, kuri yra labiausiai optimizuota

Hiperplane, kuri yra labiausiai optimizuota

Taigi tokio tipo duomenų taške SVM randa maksimalią ribą, kaip tai daroma su ankstesniais duomenų rinkiniais, kartu prideda baudą kiekvieną kartą, kai taškas kerta paraštę. Taigi paraštės tokio tipo atvejais vadinamos minkštos paraštės . Kai duomenų rinkinyje yra minkšta paraštė, SVM bando sumažinti (1 / marža + ∧ (∑bauda)) . Vyrių praradimas yra dažniausiai naudojama nuobauda. Jei nėra pažeidimų, vyrių praradimas nėra. Jei pažeidimai vyrių praradimas proporcingas pažeidimo atstumui.

Iki šiol mes kalbėjome apie tiesiškai atskiriamus duomenis (mėlynų ir raudonų rutulių grupę galima atskirti tiesia linija / linijine linija). Ką daryti, jei duomenys nėra tiesiškai atskiriami?

latekso matrica
Originalus 1D duomenų rinkinys klasifikavimui

Originalus 1D duomenų rinkinys klasifikavimui

Tarkime, mūsų duomenys rodomi aukščiau esančiame paveikslėlyje. SVM tai išsprendžia sukurdamas naują kintamąjį naudodamas a branduolys . Vadiname tašką xieilutėje ir sukuriame naują kintamąjį yikaip atstumo nuo kilmės o funkcija.taigi, jei tai nubraižysime, gautume kažką panašaus į kaip parodyta toliau

1D duomenų susiejimas su 2D, kad būtų galima atskirti dvi klases

1D duomenų susiejimas su 2D, kad būtų galima atskirti dvi klases

Šiuo atveju naujas kintamasis y sukuriamas kaip atstumo nuo pradžios funkcija. Netiesinė funkcija, kuri sukuria naują kintamąjį, vadinama branduoliu.

Palaikykite vektorinės mašinos terminologiją

    Hiperplokštuma: Hiperplokštuma yra sprendimo riba, naudojama atskirti skirtingų klasių duomenų taškus objekto erdvėje. Tiesinės klasifikacijos atveju tai bus tiesinė lygtis, t. y. wx+b = 0. Atraminiai vektoriai: atraminiai vektoriai yra arčiausiai hiperplokštumos esantys duomenų taškai, o tai atlieka lemiamą vaidmenį sprendžiant dėl ​​hiperplokštumos ir paraštės. Kraštinė: paraštė yra atstumas tarp atramos vektoriaus ir hiperplokštumos. Pagrindinis paramos vektoriaus mašinos algoritmo tikslas yra maksimaliai padidinti maržą. Didesnė paraštė rodo geresnį klasifikavimo našumą. Branduolys : Branduolys yra matematinė funkcija, naudojama SVM atvaizduoti pradinius įvesties duomenų taškus į didelių matmenų objektų erdves, kad būtų galima lengvai sužinoti hiperplokštumą, net jei duomenų taškai nėra tiesiškai atskiriami pradinėje įvesties erdvėje. Kai kurios įprastos branduolio funkcijos yra tiesinės, daugianario, radialinės bazės funkcijos (RBF) ir sigmoidinės. Kietoji paraštė: didžiausios paraštės hiperplokštuma arba kietosios paraštės hiperplokštuma yra hiperplokštuma, kuri tinkamai atskiria skirtingų kategorijų duomenų taškus be jokių klaidingų klasifikacijų. Minkšta paraštė: kai duomenys nėra visiškai atskiriami arba juose yra nuokrypių, SVM leidžia naudoti minkštosios paraštės metodą. Kiekvienas duomenų taškas turi laisvą kintamąjį, įvestą minkštos ribos SVM formuluotės, kuri sušvelnina griežtą maržos reikalavimą ir leidžia atlikti tam tikrus klaidingus klasifikavimus arba pažeidimus. Atrandamas kompromisas tarp maržos padidinimo ir pažeidimų mažinimo.C: maržos maksimizavimo ir netinkamo klasifikavimo baudos subalansuojamos SVM reguliavimo parametru C. Bauda už maržos viršijimą arba klaidingą duomenų straipsnių klasifikavimą sprendžia ji. Griežtesnė nuobauda taikoma su didesne C reikšme, todėl mažesnė marža ir galbūt mažiau klaidingų klasifikacijų. Vyrių praradimas: tipiška SVM praradimo funkcija yra vyrių praradimas. Tai baudžiama už neteisingą klasifikaciją ar maržos pažeidimus. Tikslinė funkcija SVM dažnai formuojama derinant ją su reguliavimo terminu. Dviguba problema: SVM išspręsti galima naudoti dvigubą optimizavimo uždavinio, reikalaujančio surasti Lagranžo daugiklius, susijusius su paramos vektoriais, vietą. Dviguba formulė leidžia naudoti branduolio gudrybes ir efektyviau skaičiuoti.

Matematinė palaikymo vektorinės mašinos intuicija

Apsvarstykite dvejetainio klasifikavimo problemą su dviem klasėmis, pažymėtomis +1 ir -1. Turime mokymo duomenų rinkinį, kurį sudaro įvesties ypatybių vektoriai X ir juos atitinkančios klasės žymės Y.

Tiesinės hiperplokštumos lygtis gali būti parašyta taip:

w^Tx+ b = 0

Vektorius W reiškia normalųjį hiperplokštumos vektorių. y. kryptis, statmena hiperplokštumai. Parametras b lygtyje reiškia hiperplokštumos poslinkį arba atstumą nuo pradžios išilgai normalaus vektoriaus Į .

Atstumas tarp duomenų taško x_i ir sprendimo ribos gali būti apskaičiuojamas taip:

d_i = frac{w^T x_i + b}

kur ||w|| reiškia svorio vektoriaus w Euklido normą. Euklido normanormalaus vektoriaus W

Linijiniam SVM klasifikatoriui:

Optimizavimas:

    Kietosios paraštės linijiniam SVM klasifikatoriui:

underset{w,b}{	ext{minimize}}frac{1}{2}w^Tw =underset{W,b}{	ext{minimize}}frac{1}{2}left | w 
ight|^{2}  	ext{subject to}; y_i(w^Tx_i + b) geq 1 ;for; i = 1, 2,3, cdots,m

Tikslinis kintamasis arba etiketė ithmokymo pavyzdys žymimas simboliu tišiame pareiškime. Ir ti=-1 neigiamiems įvykiams (kai yi= 0) ir ti=1 teigiamas atvejis (kai yi= 1) atitinkamai. Kadangi mums reikia sprendimo ribos, atitinkančios apribojimą: underset{w,b}{	ext{sumažinti }}frac{1}{2}w^Tw+ C sum_{i=1}^m zeta_{i}  	ext{subject to } y_i( w^Tx_i + b)ge 1-zeta_{i};; ir ; zeta_{i} ge 0;; dėl ; i = 1, 2,3, cdots,m

    Minkštos paraštės linijiniam SVM klasifikatoriui:

underset{alpha}{	ext{maximize}}: frac{1}{2}underset{i	o m;}{sum};underset{j	o m}{sum} alpha_ialpha_j t_i t_j K(x_i, x_j) -underset{i	o m}{sum}alpha_i

    Dviguba problema: SVM išspręsti gali būti naudojama dviguba optimizavimo problemos, kuriai reikia nustatyti Lagrange daugiklius, susijusius su paramos vektoriais, vietą. Optimalūs Lagranžo daugikliai α(i), kurie maksimaliai padidina šią dvigubą tikslo funkciją

w= underset{i	o m}{sum}alpha_i t_i K(x_i, x) + b  t_i(w^Tx_i-b) = 1 Longleftrightarrow b= w^Tx_i-t_i

kur,

  • aiyra Lagranžo daugiklis, susietas su i-tuoju mokymo pavyzdžiu.
  • K(xi, xj) yra branduolio funkcija, apskaičiuojanti dviejų pavyzdžių x panašumąiir xj. Tai leidžia SVM spręsti netiesinio klasifikavimo problemas, netiesiogiai susiejant pavyzdžius į aukštesnio matmens funkcijų erdvę.
  • Terminas ∑αireiškia visų Lagrando daugiklių sumą.

SVM sprendimo ribą galima apibūdinti naudojant šiuos optimalius Lagrando daugiklius ir paramos vektorius, kai išspręsta dviguba problema ir aptinkami optimalūs Lagrando daugikliai. Mokymo pavyzdžiai, kurių i> 0 yra paramos vektoriai, o sprendimo ribą pateikia:

egin{lygied} 	ext{Tiesinis : } K(w,b) &= w^Tx+b  	ext{Polinomis : } K(w,x) &= (gamma w^Tx+b)^ N  	ekstas{Gauso RBF: } K(w,x) &= exp(-gamma|| x_i-x_j||^n  	ext{Sigmoid :} K(x_i, x_j) &=  tanh(alpha x_i^Tx_j + b) end{sulygintas}

Paramos vektoriaus mašinos tipai

Atsižvelgiant į sprendimo ribos pobūdį, paramos vektorių mašinos (SVM) gali būti suskirstytos į dvi pagrindines dalis:

    Linijinis SVM: Linijiniai SVM naudoja linijinę sprendimo ribą, kad atskirtų skirtingų klasių duomenų taškus. Kai duomenis galima tiksliai atskirti tiesiškai, linijiniai SVM yra labai tinkami. Tai reiškia, kad viena tiesi linija (2D) arba hiperplokštuma (didesnių matmenų) gali visiškai padalinti duomenų taškus į atitinkamas klases. Hiperplokštuma, kuri maksimaliai padidina skirtumą tarp klasių, yra sprendimo riba. Netiesinis SVM: Netiesinis SVM gali būti naudojamas duomenims klasifikuoti, kai jų negalima atskirti į dvi klases tiesia linija (2D atveju). Naudodami branduolio funkcijas, netiesiniai SVM gali tvarkyti netiesiniu būdu atskiriamus duomenis. Pradiniai įvesties duomenys šiomis branduolio funkcijomis paverčiami aukštesnės dimensijos funkcijų erdve, kurioje duomenų taškai gali būti tiesiškai atskirti. Linijinis SVM naudojamas netiesinio sprendimo ribos vietai šioje modifikuotoje erdvėje nustatyti.

Populiarios branduolio funkcijos SVM

SVM branduolys yra funkcija, kuri užima žemos dimensijos įvesties erdvę ir paverčia ją aukštesnės dimensijos erdve, ty paverčia neatskiriamas problemas į atskiriamas problemas. Tai dažniausiai naudinga netiesinio atskyrimo problemoms spręsti. Paprasčiau tariant, branduolys atlieka keletą itin sudėtingų duomenų transformacijų ir išsiaiškina duomenų atskyrimo procesą pagal apibrėžtas etiketes ar išvestis.

Krūties vėžio klasifikacija naudojant SVM RBF branduolį-Geeksforgeeks

iškviesti js funkciją iš html

SVM privalumai

  • Veiksmingas didelių matmenų atvejais.
  • Jo atmintis yra efektyvi, nes sprendimų funkcijoje naudojama mokymo taškų poaibis, vadinamas paramos vektoriais.
  • Sprendimo funkcijoms gali būti nurodytos skirtingos branduolio funkcijos ir galima nurodyti pasirinktinius branduolius.

SVM diegimas Python

Numatykite, ar vėžys yra gerybinis ar piktybinis. Naudodamiesi istoriniais duomenimis apie pacientus, kuriems diagnozuotas vėžys, gydytojai gali atskirti piktybinius atvejus, o gerybiniams – atskirus požymius.

Žingsniai

  • Įkelkite krūties vėžio duomenų rinkinį iš sklearn.datasets
  • Atskiros įvesties funkcijos ir tiksliniai kintamieji.
  • Sukurkite ir mokykite SVM klasifikatorius naudodami RBF branduolį.
  • Nubraižykite įvesties ypatybių sklaidos diagramą.
  • Nubrėžkite sprendimo ribą.
  • Nubrėžkite sprendimo ribą

Python3

# Load the important packages> from> sklearn.datasets>import> load_breast_cancer> import> matplotlib.pyplot as plt> from> sklearn.inspection>import> DecisionBoundaryDisplay> from> sklearn.svm>import> SVC> # Load the datasets> cancer>=> load_breast_cancer()> X>=> cancer.data[:, :>2>]> y>=> cancer.target> #Build the model> svm>=> SVC(kernel>=>'rbf'>, gamma>=>0.5>, C>=>1.0>)> # Trained the model> svm.fit(X, y)> # Plot Decision Boundary> DecisionBoundaryDisplay.from_estimator(> >svm,> >X,> >response_method>=>'predict'>,> >cmap>=>plt.cm.Spectral,> >alpha>=>0.8>,> >xlabel>=>cancer.feature_names[>0>],> >ylabel>=>cancer.feature_names[>1>],> >)> # Scatter plot> plt.scatter(X[:,>0>], X[:,>1>],> >c>=>y,> >s>=>20>, edgecolors>=>'k'>)> plt.show()>
>
>

Išvestis :

Krūties vėžio klasifikacijos su SVM RBF branduoliu