Slika novice

Popoln vodnik za razumevanje klasifikacije v strojnem učenju

Izvorno vozlišče: 1866373

Predstavitev

Strojno učenje je povezano s področjem izobraževanja, povezanega z algoritmi, ki se nenehno uči iz različnih primerov in jih nato uporablja za probleme v realnem svetu. Klasifikacija je naloga strojnega učenja, ki dodeli vrednost oznake določenemu razredu in nato lahko identificira določeno vrsto, da je takšne ali drugačne. Najosnovnejši primer je lahko sistem za filtriranje neželene pošte, kjer lahko pošto označimo kot »neželeno« ali »ni vsiljeno«. Srečali se boste z več vrstami izzivov pri klasifikaciji in obstaja nekaj posebnih pristopov za vrsto modela, ki bi se lahko uporabil za vsak izziv.

Prediktivno modeliranje klasifikacije v strojnem učenju

Klasifikacija se običajno nanaša na kakršno koli težavo, kjer je določena vrsta oznake razreda rezultat, ki ga je treba predvideti iz danega vnosnega polja podatkov. Nekatere vrste izzivov pri klasifikaciji so:

  • Razvrščanje e-poštnih sporočil med vsiljeno pošto ali ne
  • Razvrstite dani rokopisni znak kot znani znak ali ne
  • Razvrstite nedavno vedenje uporabnikov kot odliv ali ne

Za vsak model boste potrebovali nabor podatkov za usposabljanje s številnimi primeri vhodov in izhodov, iz katerih se bo model učil. Podatki o usposabljanju morajo vključevati vse možne scenarije težave in morajo imeti dovolj podatkov za vsako oznako, da se lahko model pravilno usposobi. Oznake razredov so pogosto vrnjene kot vrednosti niza in jih je zato treba kodirati v celo število, ki predstavlja 0 za »neželeno pošto« in 1 za »brez neželene pošte«.

Klasifikacija v strojnem učenju

 Image 1

Za najboljši model ni splošne teorije, vendar se pričakuje, da bomo eksperimentirali in odkrili, kateri algoritem in konfiguracija bosta prinesla najboljšo zmogljivost za določeno nalogo. Pri klasifikacijskem napovednem modeliranju se različni algoritmi primerjajo z njihovimi rezultati. Natančnost klasifikacije je zanimiva metrika za ocenjevanje delovanja katerega koli modela na podlagi različnih predvidenih oznak razreda. Natančnost klasifikacije morda ni najboljši parameter, vendar je dobra točka za začetek pri večini nalog klasifikacije.

Namesto oznake razreda nam lahko nekateri dajo napoved verjetnosti pripadnosti razredu določenega vnosa in v takšnih primerih je krivulja ROC lahko koristen pokazatelj, kako natančen je model. Obstajajo predvsem 4 različne vrste klasifikacijskih nalog, s katerimi se lahko srečate pri vsakodnevnih izzivih. Na splošno so različne vrste napovednih modelov v strojnem učenju naslednje:

  • Binarna klasifikacija
  • Klasifikacija z več oznakami
  • Večrazredna klasifikacija
  • Neuravnotežena klasifikacija

Pregledali jih bomo enega za drugim.

Binarna klasifikacija za strojno učenje

Binarna klasifikacija se nanaša na tiste naloge, ki lahko dajo eno od dveh oznak razreda kot rezultat. Na splošno se eno šteje za normalno stanje, drugo pa za nenormalno stanje. Naslednji primeri vam bodo pomagali, da jih boste bolje razumeli.

  • Zaznavanje neželene e-pošte: normalno stanje – ni neželena pošta, nenormalno stanje – neželena pošta
  • Napoved pretvorbe: normalno stanje – ni odpadno, nenormalno stanje – odpad
  • Napoved pretvorbe: normalno stanje – kupljen artikel, neobičajno stanje – ni kupljen artikel

Dodate lahko tudi primer, da je »Ni odkritega raka« normalno stanje in »Odkrit rak« kot nenormalno stanje. Zapis, ki se večinoma upošteva, je, da se normalnemu stanju dodeli vrednost 0, razredu z nenormalnim stanjem pa vrednost 1. Za vsak primer je mogoče ustvariti tudi model, ki napove Bernoullijevo verjetnost za izhod. Več o verjetnosti lahko preberete tukaj. Skratka, vrne diskretno vrednost, ki pokriva vse primere in bo dala izhod, saj bo rezultat imel vrednost 1 ali 0. Torej po povezavi z dvema različnima stanjema lahko model da izhod za katero koli od vrednosti prisoten.

Najbolj priljubljeni algoritmi, ki se uporabljajo za binarno klasifikacijo, so:

  • K-Najbližji sosedje
  • Logistična regresija
  • Podporni vektorski stroj
  • Drevesa odločanja
  • Naiven Bayes

Od omenjenih algoritmov so bili nekateri algoritmi posebej zasnovani za namene binarne klasifikacije in izvorno ne podpirajo več kot dveh vrst razredov. Nekateri primeri takšnih algoritmov so podporni vektorski stroji in logistična regresija. Zdaj bomo ustvarili lasten nabor podatkov in na njem uporabili binarno klasifikacijo. Uporabili bomo make_blob() funkcija modula scikit-learn za ustvarjanje nabora podatkov binarne klasifikacije. Spodnji primer uporablja nabor podatkov s 1000 primeri, ki pripadajo enemu od dveh razredov, prisotnih z dvema vhodnima funkcijama.

koda:

from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot X, y = make_blobs(n_samples=5000, centers=2, random_state=1) print(X.shape, y.shape) counter = Counter( y) print(counter) for i in range(10): print(X[i], y[i]) for label, _ in counter.items(): row_ix = where(y == label)[0] pyplot .scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show()

Izhod:

(5000, 2) (5000,) Števec ({1: 2500, 0: 2500}) [-11.5739555 -3.2062213] 1 [0.05752883 3.60221288] 0 [-1.03619773 3.97153319] 0 [-8.22983437 3.54309524 -1] 10.49210036 [-4.70600004 - 1] 10.74348914 [-5.9057007 -1 ] 3.20386867 [-4.51629714 0] 1.98063705 [-4.9672959 0 ] 8.61268072 [-3.6579652 -1 ] 10.54840697 [-2.91203705 1 -XNUMX] XNUMX
Binarna klasifikacija

Zgornji primer ustvari nabor podatkov s 5000 vzorci in jih razdeli na vhodne elemente 'X' in izhodne elemente 'Y'. Porazdelitev nam pokaže, da lahko vsak primerek pripada razredu 0 ali razredu 1 in v vsakem je približno 50 %.

Prvih 10 primerov v naboru podatkov je prikazanih z vhodnimi vrednostmi, ki so številske, ciljna vrednost pa je celo število, ki predstavlja članstvo v razredu.

Nato se za vhodne spremenljivke ustvari razpršeni graf, kjer so nastale točke barvno kodirane glede na vrednost razreda. Z lahkoto vidimo dva različna grozda, ki ju lahko ločimo.

Večrazredna klasifikacija

Te vrste težav s klasifikacijo nimajo fiksnih dveh oznak, lahko pa imajo poljubno število oznak. Nekaj ​​priljubljenih primerov večrazredne klasifikacije je:

  • Razvrstitev rastlinskih vrst
  • Klasifikacija obrazov
  • Optično prepoznavanje znakov

Tukaj ni pojma normalnega in nenormalnega izida, ampak bo rezultat pripadal eni od mnogih med nizom spremenljivk znanih razredov. Obstaja lahko tudi ogromno oznak, kot je napovedovanje slike glede tega, kako blizu bi lahko pripadala enemu od več deset tisoč obrazov sistema za prepoznavanje.

Druga vrsta izziva, pri katerem morate predvideti naslednjo besedo zaporedja, kot je prevodni model za besedilo, bi se prav tako lahko obravnavala kot večrazredna klasifikacija. V tem posebnem scenariju vse besede v besednjaku določajo vse možno število razredov, ki se lahko gibljejo v milijonih.

Te vrste modelov so običajno izdelane z uporabo a Kategorična porazdelitev za razliko od Bernoullija za binarno klasifikacijo. V kategorični porazdelitvi ima lahko dogodek več končnih točk ali rezultatov, zato model napove verjetnost vnosa glede na vsako izhodno oznako.

Najpogostejši algoritmi, ki se uporabljajo za večrazredno klasifikacijo, so:

  • K-Najbližji sosedje
  • Naiven Bayes
  • Odločitvena drevesa
  • Gradient krepitev
  • Naključni gozd

Tukaj lahko uporabite tudi algoritme za binarno klasifikacijo na podlagi enega razreda proti vsem drugim razredom, znanega tudi kot ena proti počitku, ali enega modela za par razredov v modelu, ki je znan tudi kot en- proti enemu.

One Vs Rest – Glavna naloga tukaj je prilagoditi en model za vsak razred, ki bo v primerjavi z vsemi drugimi razredi

Ena proti enemu – Glavna naloga tukaj je definirati binarni model za vsak par razredov.

Ponovno bomo vzeli primer večrazredne klasifikacije z uporabo funkcije make_blobs() učnega modula scikit. Naslednja koda to prikazuje.

koda:

from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot X, y = make_blobs(n_samples=1000, centers=4, random_state=1) print(X.shape, y.shape) counter = Counter( y) print(counter) for i in range(10): print(X[i], y[i]) for label, _ in counter.items(): row_ix = where(y == label)[0] pyplot .scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show()

Izhod:

(1000, 2) (1000,) Števec ({1: 250, 2: 250, 0: 250, 3: 250}) [-10.45765533 -3.30899488] 1 [-5.90962043 -7.80717036] 2 [-1.00497975 4.35530142 0] 6.63784922 [ -4.52085249 -3] 6.3466658 [-8.89940182 -2] 4.67047183 [-3.35527602 -3] 5.62742066 [-1.70195987 -3] 6.91064247 [-2.83731201 -3 1.76490462] 5.03668554 [-0 8.70416288] 4.39234621 [-1 -XNUMX] XNUMX
večrazredna klasifikacija v strojnem učenju

Tukaj lahko vidimo, da obstajata več kot dve vrsti razredov in ju lahko ločeno razvrstimo v različne vrste.

Klasifikacija z več oznakami za strojno učenje

Pri klasifikaciji z več oznakami se sklicujemo na tiste specifične naloge klasifikacije, kjer moramo dodeliti dve ali več specifičnih oznak razreda, ki jih je mogoče predvideti za vsak primer. Osnovni primer je lahko klasifikacija fotografij, kjer je lahko na eni fotografiji več predmetov, kot je pes ali jabolko in podobno. Glavna razlika je možnost predvidevanja več oznak in ne samo ene.

Za klasifikacijo z več oznakami ne morete uporabiti binarnega klasifikacijskega modela ali večrazrednega klasifikacijskega modela in morate uporabiti spremenjeno različico algoritma, da vključite več razredov, kar je lahko mogoče, in jih nato poiščete vse. Postane bolj zahtevno kot preprosta izjava da ali ne. Tukaj uporabljeni običajni algoritmi so:

  • Naključni gozdovi z več oznakami
  • Odločitvena drevesa z več oznakami
  • Povečanje gradienta z več oznakami

Drug pristop je uporaba ločenega klasifikacijskega algoritma za napovedovanje oznak za vsako vrsto razreda. Uporabljali bomo knjižnico iz scikit-učiti za ustvarjanje našega nabora klasifikacijskih podatkov z več oznakami iz nič. Naslednja koda ustvari in prikazuje delujoč primer klasifikacije z več oznakami 1000 vzorcev in 4 tipov razredov.

Koda:

iz sklearn.datasets import make_multilabel_classification X, y = make_multilabel_classification(n_samples=1000, n_features=3, n_classes=4, n_labels=4, random_state=1) print(X.shape, y.shape) for i in range(10): natisni (X[i], y[i])

Izhod:

(1000, 3) (1000, 4) [ 8. 11. 13.] [1 1 0 1] [ 5. 15. 21.] [1 1 0 1] [15. 30. 14.] [1 0 0 0] [ 3. 15. 40.] [0 1 0 0] [ 7. 22. 14.] [1 0 0 1] [12. 28. 15.] [1 0 0 0] [ 7. 30. 24.] [1 1 0 1] [15. 30. 14.] [1 1 1 1] [10. 23. 21.] [1 1 1 1] [10. 19. 16.] [1 1 0 1]

Neuravnotežena klasifikacija za strojno učenje

Neuravnotežena klasifikacija se nanaša na tiste naloge, kjer je število primerov v vsakem razredu neenakomerno porazdeljeno. Na splošno so naloge neuravnoteženega razvrščanja binarne naloge razvrščanja, kjer je večji del nabora podatkov za usposabljanje običajnega tipa razreda, manjšina pa jih pripada neobičajnemu razredu.

Najpomembnejši primeri teh primerov uporabe so:

  • Zaznavanje prevare
  • Odkrivanje odstopanj
  • Medicinski diagnostični test

Težave se z nekaterimi specializiranimi tehnikami pretvorijo v naloge binarne klasifikacije. Uporabite lahko podvzorčenje za večinske razrede ali nadvzorčenje za manjšinske razrede. Najvidnejši primeri so:

  • Naključno premajhno vzorčenje
  • Preveliko vzorčenje SMOTE

Posebne algoritme za modeliranje je mogoče uporabiti za večjo pozornost manjšinskemu razredu, ko se model prilagaja naboru podatkov za usposabljanje, ki vključuje cenovno občutljive modele strojnega učenja. Še posebej za primere, kot so:

  • Stroškovno občutljiva logistična regresija
  • Stroškovno občutljiva drevesa odločanja
  • Stroškovno občutljivi podporni vektorski stroji

Torej, ko izberemo model, moramo dostopati do modela in ga oceniti, za katerega lahko bodisi uporabimo Precision, Recall or F-mera rezultat. Zdaj si bomo ogledali razvoj nabora podatkov za problem neuravnotežene klasifikacije. Uporabili bomo Clasifikacijska funkcija scikit-learn za ustvarjanje popolnoma sintetičnega in neuravnoteženega nabora podatkov binarne klasifikacije 1000 vzorcev

koda:

from numpy import where from collections import Counter from sklearn.datasets import make_classification from matplotlib import pyplot X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=1, weights= [0.99,0.01], random_state=1) print(X.shape, y.shape) counter = Counter(y) print(counter) for i in range(10): print(X[i], y[i]) za oznako, _ v counter.items(): row_ix = where(y == label)[0] pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label)) pyplot. legenda() pyplot.show() 

Izhod:

(1000, 2) (1000,) Števec ({0: 983, 1: 17}) [0.86924745 1.18613612] 0 [1.55110839 1.81032905] 0 [1.29361936 1.01094607] 0 [1.11988947 1.63251786] 0 [1.04235568 1.12152929] 0 [1.18114858 0.92397607] 0 [1.1365562 1.17652556] 0 [0.46291729 0.72924998] 0 [0.18315826 1.07141766] 0 [0.32411648 0.53515376] 0
neuravnotežena klasifikacija v strojnem učenju

Tukaj lahko vidimo porazdelitev oznak in vidimo močno neravnovesje razredov, kjer 983 elementov pripada eni vrsti in samo 17 pripada drugi vrsti. Kot pričakovano lahko vidimo večino tipa 0 ali razreda 0. Te vrste naborov podatkov je težje prepoznati, vendar imajo bolj splošen in praktičen primer uporabe.

zaključek

Hvala, ker ste prebrali članek do konca, in če se vam zdi kakor koli koristen, ga ne pozabite deliti s svojim omrežjem. Če želite prebrati še nekaj mojih člankov, lahko Klikni tukaj in se lahko povežete z mano na LinkedInu ali Githubu.

Reference

  1. Povezava do dokumenta o sodelovanju: https://colab.research.google.com/drive/1EiGZCGypDIHFNuzm71QN16NJxas41vE3?usp=sharing
  2. Arnab Mondal – Podatkovni inženir | Python, C/C++, AWS razvijalec | Samostojni tehnični pisec

Viri slik

  1. Slika 1 – https://unsplash.com/photos/n6B49lTx7NM

Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po presoji avtorja.

Vir: https://www.analyticsvidhya.com/blog/2021/09/a-complete-guide-to-understand-classification-in-machine-learning/

Časovni žig:

Več od Analitika Vidhya