Kuinka käyttää koneoppimista viinien laadun ennustamiseen

Julkaistaan ​​myös tech-blogissani

Koneoppiminen (ML) on tekoälyn osa-alue. Se koskee tietokoneille opiskelukyvyn antamista ilman erillistä ohjelmointia. Koneoppimisen suosio ja kysyntä ovat varmasti kasvaneet vuosien mittaan, kuten tämä hype-käyrä osoittaa:

ML-hype-käyrä viimeisen 5 vuoden aikana

Tosiaankin, keskimääräinen palkka koneoppimisinsinöörille Yhdysvalloissa on 134 655 dollaria. Mutta mikä on siinä erityistä, että se on yksi ohjelmistojen korkeimmin palkattuista töistä? Tämä artikkeli auttaa sinua ymmärtämään sen monenlaisia ​​sovelluksia.

Tämä opetusohjelma alkaa viimeisestä, joka osoittaa, kuinka voit käyttää Data Science -sovellusta ymmärtääksesi mikä tekee viinistä maun hyvältä! Jos et ole vielä tehnyt sitä, tarkista se ensin ja saat reilun näkemyksen siitä, mistä Data Science on kyse.

Koneoppiminen on usein seuraava vaihe valmisteilla, heti Data Sciencen jälkeen. Oletko valmis olemaan osa hypeä? Jatka lukemista!

Sisällysluettelo (Voit lukea vapaasti peräkkäin tai hypätä tämän artikkelin tiettyihin osiin)

  • Mikä on koneoppiminen?
  • Kenen pitäisi lukea tämä opetusohjelma
  • Päästä alkuun
  • Koneoppimisen tyypit -
  • Mitä ongelmia ohjattu oppiminen voi ratkaista?
  • Koneoppimisen mekanismi
  • Esiintyvyydestä ja varianssista johtuvat virheet - ali- ja ylimääräiset asennukset
  • Jotkut yleisimmin käytetyistä koneoppimisalgoritmeista
  • Koulutusprosessi
  • Suoritusmittarit luokitteluongelmiin
  • Ominaisuuden tärkeys
  • Hyperparametrien viritys ja optimointi

Mikä on koneoppiminen?

Todellisessa maailmassa meillä on ihmisiä ja meillä on tietokoneita. Kuinka me ihmiset oppimme? Se on yksinkertaista - aikaisemmista kokemuksista!

Nyt me ihmiset käytämme aistituloja, kuten silmiä, korvia tai kosketustietoja, saadaksesi tietoja ympäristöstämme. Käytämme sitten näitä tietoja erittäin mielenkiintoisilla ja mielekkäällä tavalla. Yleisimmin käytämme sitä tarkkojen ennusteiden tekemiseen tulevaisuudesta. Toisin sanoen, me opimme.

Esimerkiksi, onko sadetta tällä vuodenaikana? Aikooko tyttöystäväsi hulluun, jos unohdat hänen syntymäpäivänsä? Pitäisikö sinun lopettaa, kun liikennemerkki on punainen? Pitäisikö sinun sijoittaa osaan kiinteistöjä? Kuinka todennäköisesti Jon Snow selviytyy seuraavalla GOT-kaudella? Näihin kysymyksiin vastaamiseksi tarvitaan aiempia tietoja!

Toisaalta tietokoneet eivät perinteisesti käytä tietoja samalla tavalla kuin me. Heille on annettava erityiset ohjeet seuraamiseksi - toisin sanoen algoritmi. Tietokone on erittäin hyvä seuraamaan vaiheita lyhyessä ajassa.

Nyt kysymys on - voivatko tietokoneet oppia aiemmista kokemuksista (tai tiedoista), aivan kuten ihmiset? Kyllä - voit antaa heille kyvyn oppia ja ennustaa tulevia tapahtumia ilman erillistä ohjelmointia. Ja juuri siitä koneoppiminen on kyse. Itse ajavista autoista planeettojen löytämiseen - ML: n sovellukset ovat valtavat.

Luin myös todella mukavan viestin, joka käsittelee tietotekniikan, koneoppimisen ja tekoälyn eroa. Se on melko kattava, joten teen siitä tiivistelmän -

  • Data Science tuottaa oivalluksia
  • Koneoppiminen tuottaa ennusteita
  • Keinotekoinen älykkyys tuottaa toimia

Ja näiden kenttien välillä on paljon päällekkäisyyksiä, minkä vuoksi näitä termejä käytetään usein vuorottelevasti.

Netflixissä koneoppimista käytetään oppimaan tiedoista, jotka sisältävät käyttäjien käyttäytymisprofiileja ja osoittavat sinulle hyviä suosituksia. Google-haku on räätälöity näyttämään sinulle parhaiten sopivia tuloksia - taas monilla ML-tekniikoilla, jotka oppivat jatkuvasti kulissien takana olevista tiedoista. Data Sciencen ja ML: n alueella data on kultaa. Kuten Tyrion Lannister voi sanoa, kohdatessaan ML: n ja AI: n maailmaa:

Yhtiö tarvitsee tietoja, koska miekka tarvitsee kiertonimen, jotta se säilyttäisi reunansa.

Nyt kun olemme ymmärtäneet, mistä on kysymys, on aika sukeltaa!

Kenen pitäisi lukea tämä opetusohjelma:

Jos haluat ymmärtää koneoppimisen, mutta olet lykkääntynyt, koska löydät matematiikan, tilastotietojen ja algoritmien toteuttamisen tyhjästä alusta alkaen liian monimutkaista, tämä opas on sinulle.

Jossain vaiheessa oppimisesi täytyy sukeltaa syvemmälle - et voi välttää matematiikasta liian kauan! Toivon, että tämän artikkelin loppuun mennessä motivoitut tutkimaan kaikkia kenttiä.

Jos sinulla on jonkin verran tietoa Python-ohjelmoinnista ja olet suorittanut aiemman opetusohjelman, voit mennä.

Aloitetaan!

Olet oppinut melko paljon viineistäsi edellisestä opetusohjelmasta. Tällä kertaa koneesi suorittaa oppimisen. Opit rakentamaan koneoppimallin, joka, jos annat sille viiniominaisuuksia, kertoisi tarkalleen sinulle, kuinka hyvä viini on. Tämän oppaan valmistumisen jälkeen saat käsityksen seuraavista asioista:

  • Erilaiset ML-algoritmit ja tekniikat
  • Kuinka kouluttaa ja rakentaa luokitin
  • Yleisiä virheitä, joita tapahtuu ML-malleja rakennettaessa, ja miten niistä päästä eroon
  • Kuinka analysoida ja tulkita mallien suorituskykyä

Koneoppimisen tyypit -

  • Ohjattu oppiminen (mitä opimme tässä opetusohjelmassa):

Kuten nimestä voi päätellä, ohjattu oppiminen tarvitsee ihmisen “valvomaan” ja kertomaan tietokoneelle, mitä se on koulutettava ennustamaan tai antamaan sille oikea vastaus. Syötämme tietokoneen harjoitustiedoilla, jotka sisältävät erilaisia ​​ominaisuuksia, ja kerromme myös oikean vastauksen.

Antaaksesi analogian kuvittele tietokone olevan lapsi, joka on tyhjä liuskekivi. Hän ei tiedä mitään.

Kuinka opettaa Jon Snow: lle eroa koiran ja kissan välillä? Se on melko intuitiivista - vie hänet ulos kävelylle, ja kun näet kissan, osoitat sen ja sanot: “Tämä on kissa.” Kun jatkat kävelyä, saatat nähdä koiran, joten osoitat sen uudelleen ja sano "Tämä on koira." Ajan myötä, kun näytät jatkuvasti paljon koiria ja kissoja, lapsi oppii erottamaan nämä kaksi.

Tietysti voit aina näyttää Jonille paljon kuvia koirista ja kissoista sen sijaan, että lähteisit kävelylle. Instagram pelastamaan! : P

Viinitietokokonaisuutemme suhteen koneoppimuksemme oppii yhdistämään viinien laadun suhteessa muihin ominaisuuksiin. Toisin sanoen se oppii tunnistamaan ominaisuuksien ja kohteiden väliset mallit (laatu).

  • Ohjaamaton oppiminen:

Tässä ei anneta tietokoneelle ”kohde” -etikettiä ennakoimaan. Sen sijaan annamme tietokoneen löytää malleja yksinään ja sitten valita sen, mikä on järkevin. Tämä tekniikka on välttämätön, koska emme usein edes tiedä mitä etsimme tietoihimme.

  • Vahvistusoppiminen:

Sitä käytetään kouluttamaan AI-agentti "käyttäytymään" ja oppimaan valitsemaan paras toimenpide tietylle skenaariossa palkkioiden ja palautteen perusteella. Sillä on paljon samankaltaisuuksia AI: n kanssa.

Näiden kolmen lisäksi on myös muita ML-tyyppejä, kuten puoliohjattu oppiminen, klusterointi jne.

Mitä ongelmia ohjattu oppiminen voi ratkaista?

Yleisesti ottaen valvottua ML: ää voidaan käyttää kahden tyyppisten ongelmien ratkaisemiseen:

https://aldro61.github.io/microbiome-summer-school-2017/sections/basics/
  • Luokittelu: Missä sinun on luokiteltava tietty havainto ryhmään. Edellä olevassa kuvassa, jos sinulle on annettu piste, sinun on luokiteltava se joko siniseksi tai punaiseksi pisteeksi. Muutama esimerkki olisi - ennustaa, onko annettu sähköposti roskapostia vai ei roskapostia? Onko havaittu hiukkanen Higgs Boson tai normaali alaatominen hiukkanen? Tai jopa määrittää tietyn uutisartikkelin ryhmälle - kuten urheilu, sää tai tiede.
  • Regressio: Käytetään jälleen ennustamiseen ja ennustamiseen, mutta jatkuviin arvoihin. Oletetaan esimerkiksi, että olet kiinteistönvälittäjä, joka haluaa myydä talon, joka on 2000 neliöjalkaa, jossa on 3 makuuhuonetta ja alueella on 5 koulua. Mikä hinta talon pitäisi myydä?

Skenaario, jossa sinun on tunnistettava hyvänlaatuiset kasvainsolut vs. pahanlaatuiset kasvainsolut, olisi luokitteluongelma. Joten koneoppimisluokittajan tehtävänä olisi käyttää harjoitustietoja oppimiseen ja löytää tämä linja, käyrä tai päätöksenraja, joka erottaa tehokkaimmin kaksi luokkaa.

Huomaa, että luokitteluongelmien ei tarvitse välttämättä olla binaarisia - meillä voi olla ongelmia yli 2 luokan kanssa.

Toisaalta tilanne, jossa sinun on määritettävä syöpäpotilaiden elinajanodote, olisi regressio-ongelma. Tässä tapauksessa mallimme tulisi löytää viiva tai käyrä, joka yleistyy todella hyvin suurimmalle osalle datapisteistä.

Muutama regressio-ongelma voidaan muuttaa myös luokitteluongelmaksi. Lisäksi tietyt ongelmat voisivat hyvinkin kuulua molempiin tyyppeihin, luokitukseen ja regressioon.

Koneoppimisen mekanismi

Suurin osa ohjatun oppimisen ongelmista voidaan ratkaista kolmessa vaiheessa:

# Vaihe 1: Tietojen valmistelu, muuntaminen ja jakaminen

Ensimmäinen askel on analysoida tiedot ja valmistella niitä käytettäväksi harjoitustarkoituksiin. Tarkkailet esimerkiksi sitä, kuinka vinossa se on, kuinka hyvin se on jaettu, ja tilastot, kuten ominaisuuksien keskiarvo ja mediaani. Käsittelimme tätä jo aiemmassa blogissa.

Kun ymmärrät ne, voit esikäsitellä niitä ja soveltaa ominaisuusmuutoksia siihen tarvittaessa.

Seuraavaksi jaat tiedot kahteen joukkoon - isompi palat harjoitusta varten ja toinen pienempi palat testausta varten. Luokittelijamme käyttää koulutuksen tietojoukkoa “oppimaan”. Tarvitsemme erillisen osan dataa testausta ja validointia varten, jotta voimme nähdä, kuinka hyvin mallimme toimii tietoihin, joita se ei ole aiemmin nähnyt.

# Vaihe 2: Harjoittelu

Sitten rakennat mallia. Voit tehdä tämän luomalla funktion tai ”mallin” ja kouluttamalla sitä tietosi avulla. Toiminto käyttäisi sisäisesti mitä tahansa valitsemiasi algoritmeja ja käyttäisi tietojasi harjoitteluun ja ymmärtämiseen tai oppimiseen. Muista, että luokittelijasi on vain niin hyvä kuin kuinka hyvä sen opettaja (mikä olet sinä) - joten sinun täytyy kouluttaa se oikealla tavalla!

# Vaihe 3: Testaus ja validointi

Kun malli on koulutettu, voit antaa sille uutta näkymätöntä tietoa, ja se antaa sinulle tuotoksen tai ennusteen.

# Vaihe 4: Hyperparametrien viritys

Lopuksi yrität parantaa algoritmin suorituskykyä.

Nyt, ennen kuin sukellamme joidenkin koneoppimisalgoritmien yksityiskohtiin, meidän on opittava tietyistä mahdollisista virheistä, joita voi tapahtua luokittelu- tai regressio-ongelmissa.

Bias-virhe - Tarkkuus ja vajaat asennus

Bias esiintyy, kun mallilla on tarpeeksi tietoa, mutta se ei ole tarpeeksi monimutkainen taustalla olevien suhteiden kaappaamiseksi. Seurauksena on, että malli edustaa johdonmukaisesti ja systemaattisesti vääriä tietoja, mikä johtaa alhaiseen tarkkuuteen ennustamisessa. Tätä kutsutaan vajaakuntoisiksi.

Yksinkertaisesti sanottuna, puolueellisuus tapahtuu, kun meillä on puutteellinen malli. Esimerkki voi olla, kun yritämme tunnistaa Game of Thrones -hahmot jaloiksi tai talonpojiksi hahmon korkeuden ja tyylin perusteella. Jos mallimme voi vain jakaa ja luokitella merkkejä korkeuden perusteella, niin se merkitsisi Tyrion Lannisterin (kääpiö) talonpoikaksi - ja se olisi väärin!

Toinen esimerkki voi olla, kun meillä on esineitä, jotka on luokiteltu värin ja muodon mukaan, esimerkiksi pääsiäismunat. Mutta mallimme voi vain osioida ja luokitella esineitä värin mukaan. Siksi se merkitsisi tulevaisuuden kohteita johdonmukaisesti väärin - esimerkiksi merkitsemällä sateenkaareja pääsiäismunina, koska ne ovat värikkäitä.

Viinitietokokonaisuutemme suhteen koneoppimisluokittelijamme asuvat liian hyvin, jos se on liian “humalassa” vain yhden tyyppisen viinin kanssa. : P

Toinen esimerkki olisi jatkuva data, joka on luonteeltaan polynomia ja jonka malli voi edustaa vain lineaarisia suhteita. Tässä tapauksessa ei ole väliä kuinka paljon tietoa me syödä malliin, koska se ei voi edustaa taustalla olevaa suhdetta. Jotta voimme välttää puolueellisuudesta johtuvan virheen, tarvitsemme monimutkaisemman mallin.

Varianssista johtuva virhe - tarkkuus ja liiallinen asennus

Varianssi on mitta siitä, kuinka ”herkkä” malli on harjoitustietojen osajoukolle.

Malleja koulutettaessa käytämme tyypillisesti rajoitettua määrää näytteitä suuremmasta populaatiosta. Jos koulutamme toistuvasti mallia, jossa on satunnaisesti valitut datan osajoukot, odotamme sen mallin ennusteiden olevan erilaisia ​​perustuen sille annettuihin erityisiin esimerkkeihin. Tässä varianssi on mitta siitä, kuinka paljon ennusteet vaihtelevat tietystä testinäytteestä.

Jotkut varianssit ovat normaaleja, mutta liian suuri varianssi osoittaa, että malli ei pysty yleistämään ennusteitaan suuremmalle väestölle. Tällaisessa tilanteessa malli on erittäin tarkka tiedoille, jotka se on jo nähnyt aiemmin. Mutta se toimii huonosti näkymättömissä datapisteissä. Suuri herkkyys harjoitusjoukolle tunnetaan myös ylimääräisenä asennuksena ja esiintyy yleensä, kun malli on liian monimutkainen. Jos mallisi on liikaa, sinun on todennäköisesti purettava se.

Voimme tyypillisesti vähentää mallin ennusteiden vaihtelua ja lisätä tarkkuutta kouluttamalla lisätietoja. Jos lisätietoja ei ole saatavana, voimme myös hallita varianssia rajoittamalla mallimme monimutkaisuutta.

Ohjelmoijalle haasteena on käyttää oikean tyyppistä algoritmia, joka ratkaisee ongelman optimaalisesti välttäen suurta vääristymää tai suurta varianssia. Syynä on, että:

  • Esiintyvyyden lisääntyminen vähentää varianssia
  • Varianssin lisäys vähentää vääristymää

Tätä kutsutaan myös yleisesti The Bias-Variance -vaihtoon. Tässä on erittäin mukava yksityiskohtainen viesti, jonka voit lukea myöhemmin.

Joten toisin kuin perinteiset ohjelmoinnit, koneoppimiseen ja syvän oppimisen ongelmiin voi usein liittyä paljon jäljitys- ja virhepohjaisia ​​lähestymistapoja, kun yrität löytää paras malli.

Nyt sinulla on oltava perusajatus joistakin algoritmeista, joita voit käyttää mallisi kouluttamiseen. En sukella matematiikkaan tai alemman tason toteutustietoihin, mutta tämän pitäisi riittää antamaan sinulle jonkin verran näkökulmaa.

Jotkut yleisimmin käytetyistä koneoppimisalgoritmeista:

  1. Gaussian Naive Bayes

Tämä tekniikka on ollut olemassa 1950-luvulta lähtien. Se kuuluu algoritmiperheeseen, jota kutsutaan todennäköisyysluokittajiksi tai ehdolliseksi todennäköisyydeksi, jossa se myös ottaa itsenäisyyden ominaisuuksien välillä. Naive Bayes -sovellusta voidaan käyttää tehokkaasti joihinkin luokitteluongelmiin, kuten sähköpostiviestien merkitsemiseen roskapostiksi tai ei roskapostiksi tai luokittelemaan uutisia.

2. Päätöspuut

Periaatteessa se on puumainen datarakenne, joka käyttäytyy vuokaaviona. Päätöspuu on luokittelualgoritmi, joka käyttää puumaisia ​​tietorakenteita mallien laatimiseksi päätöksistä ja niiden mahdollisista tuloksista. Tapa, jolla algoritmi toimii:

  • Sijoita tietojoukon paras attribuutti puun juureen.
  • Solmuja tai sivuliikkeen hajoamispaikkaa kutsutaan usein ”päätöksenteko- solmuksi”. Se edustaa yleensä testiä / ehdollista. (esimerkiksi jos on pilvistä tai aurinkoista)
  • Oksat edustavat kunkin päätöksen tulosta.
  • Lehmän solmut osoittavat lopputuloksen tai merkinnän (luokitteluongelmissa) tai erillisen arvon regressio-ongelmissa.

3. Satunnaiset metsät

Yksin käytettynä päätöksentekopuut ovat alttiita ylikuormitukselle. Satunnaiset metsät auttavat kuitenkin korjaamaan mahdollisen ylikuormituksen, joka voi tapahtua. Satunnaiset metsät toimivat käyttämällä useita päätöksentekopuita - käyttämällä lukuisia erilaisia ​​päätöksentekopuita, joilla on erilaiset ennusteet, satunnainen metsä yhdistää näiden yksittäisten puiden tulokset lopullisten tulosten saamiseksi.

Satunnainen metsä soveltaa päätöksentekopuihin ryhmäalgoritmia, jota kutsutaan pussittamiseksi, mikä auttaa vähentämään varianssia ja ylimääräistä asennusta.

  • Annettua harjoitusjoukkoa X = x1,…, xn tunnisteilla / tuloksilla Y = y1,…, yn, pussittaminen toistuvasti (B kertaa) valitsee satunnaisen näytteen korvaamalla harjoitusjoukon
  • Juna päätöksentekopuut näillä näytteillä
  • Tee luokitukset tekemällä luokittelupuiden enemmistöpäätös

Näiden lisäksi on olemassa useita muita algoritmeja, kuten tukivektorikoneet, Ensemble-menetelmät ja paljon ohjaamattomia oppimismenetelmiä. Lisää siitä myöhemmin.

Nyt on aika aloittaa koulutusprojektillamme!

Ensinnäkin meidän on valmisteltava tietomme.

Tämän opetusohjelman tarkoituksia varten muutat regressio-ongelmamme luokitteluongelmaksi. Kaikki viinit, joiden luokitus on vähemmän kuin 5, kuuluvat luokkaan 0 (huono), viinit, joiden luokitus on 5 ja 6, luokitellaan arvolla 1 (keskiarvo) ja viinit, joiden luokka on vähintään 7, ovat korkealaatuisia (2).

#Luokkien jakamisen määritteleminen. 1–4 on heikkolaatuista, 5–6 on keskimääräistä, 7–10 on hienoa
roskakorit = [1,4,6,10]
# 0 heikosta laadusta, 1 keskimäärin, 2 loistavasta
quality_labels = [0,1,2]
data ['quality_categorical'] = pd.cut (data ['laatu'], roskakorit = roskakorit, tarrat = laatumerkinnät, sisältävät_loukkaimmat = totta)
#Näyttää kaksi ensimmäistä saraketta
näyttö (data.head (n = 2))
# Jaa tiedot ominaisuuksiin ja kohdetunnisteeseen
quality_raw = data ['quality_categorical']
Features_raw = data.drop (['laatu', 'laatu_luokka'], akseli = 1)

Kuten näette, on uusi sarake, nimeltään laatu_luokka, joka luokittelee laatuluokitukset aikaisemmin valitsemasi alueen perusteella. Käytät tavoitearvoina laatu_luokka ja loput ominaisuuksina.

Seuraavaksi luot koulutus- ja testausjoukot tiedoille:

# Tuo juna_test_jako
osoitteesta sklearn.model_selection tuo juna_test_split
# Jaa "ominaisuudet" ja "tulot" tiedot harjoitus- ja testausjoukkoihin
X_train, X_test, y_train, y_test = train_test_split (features_raw,
 quality_raw,
 test_koko = 0,2,
 random_state = 0)
# Näytä jaon tulokset
print ("Harjoittelujoukolla on {} näytteitä.". muoto (X_train.shape [0]))
print ("Testausjoukolla on {} näytteitä.". muoto (X_test.shape [0]))

Yllä olevassa koodisolussa käytämme sklearn train_test_split -menetelmää ja annamme sille ominaisuustiedot (X) ja kohdemerkinnät (y). Se sekoittaa ja jakaa tietojoukkomme kahteen osaan - 80% siitä käytetään koulutukseen ja loput 20% käytetään testaustarkoituksiin.

Seuraavaksi suoritamme koulutusta algoritmilla ja arvioimme sen suorituskykyä.

Tarvitset toiminnon, joka hyväksyy valitsemasi ML-algoritmin sekä koulutus- ja testaustiedot. Toiminto suorittaa koulutuksen ja arvioi sitten algoritmin suorituskykyä käyttämällä joitain suorituskykymittareita.

Lopuksi kirjoitat toiminnon, jossa alustat kaikki valitsemasi 3 algoritmia ja suoritat harjoittelun jokaiselle käyttämällä yllä olevaa toimintoa. Tämän jälkeen koota kaikki tulokset ja visualisoida ne sitten.

# Tuo sklearnista kaikki kolme valvottua oppimismallimallia
maasta sklearn.naive_bayes tuo GaussianNB
sklearn.tree -tuotteesta ImportTreeClassifier
sklearn.ensemble -tuotteesta tuo RandomForestClassifier
#lähteestä sklearn.linear_malli tuo LogisticRegression
# Alusta kolme mallia
clf_A = GaussianNB ()
clf_B = DecisionTreeClassifier (max_depth = Ei mitään, random_state = Ei mitään)
clf_C = RandomForestClassifier (max_depth = Ei mitään, random_state = Ei mitään)
# Laske näytteiden lukumäärä 1%, 10% ja 100% harjoitustiedoista
# VIHJE: näytteet_100 on koko harjoittelu, ts. Len (y_train)
# VIHJE: näytteet_10 on 10% näytteistä_100
# VIHJE: näytteet_1 on 1% näytteistä_100
näytteet_100 = len (y_train)
näytteet_10 = int (len (y_train) * 10/100)
näytteet_1 = int (len (y_train) * 1/100)
# Kerää tuloksia oppijoista
tulokset = {}
clf: lle kohteissa [clf_A, clf_B, clf_C]:
    clf_name = clf .__ luokka __.__ nimi__
    tulokset [clf_name] = {}
    i: lle näytteet luettelossa ([näytteet_1, näytteet_10, näytteet_100]):
    tulokset [clf_name] [i] = \
    juna_ennuste_arvio (clf, näytteet, X_train, y_train, X_test, y_test)
#print (tulokset)
# Suorita metrian visualisointi valituille kolmelle ohjatulle oppimismallelle
vs.visualize_classification_performance (tulokset)

Tulos näyttää tältä:

Yllä oleva kaavio näyttää kuinka hyvin algoritmit toimivat ennusteissa. Ensimmäinen rivi näyttää harjoitustietojen suorituskykymittarit ja toinen rivi testaustietojen (tiedot, joita ei ole ennen nähty) tiedot. Mitä nämä suorituskykymittarit tarkoittavat? Jatka lukemista…

Suoritusmittarit luokitteluongelmiin

tarkkuus

Tarkkuus on ylivoimaisesti yksinkertaisin ja yleisimmin käytetty suoritusmittari. Se on yksinkertaisesti oikeiden ennusteiden suhde jaettuna kokonaisdatapisteillä. Meillä voi kuitenkin olla skenaarioita, joissa mallillamme voi olla todella hyvä tarkkuus, mutta se saattaa epäonnistua toimimaan hyvin uusilla näkymättömillä datapisteillä.

Milloin tarkkuus ei ole hyvä suorituskyvyn mittari?

Joskus tietojoukon luokittelujakaumat voivat olla erittäin vinossa. Tarkoittaa, että tiedot voisivat sisältää kovin paljon datapisteitä muutamille luokille ja paljon vähemmän muille luokille. Tarkastellaan tätä esimerkillä.

Oletetaan, että sinulla on tietokokonaisuus 100 erilaista sähköpostia. Näistä sähköposteista 10 roskapostia, kun taas 90 muuta ei ole roskapostia. Tämä tarkoittaa, että tietojoukkomme on vinossa ja jakautunut epätasaisesti kahden luokan kesken - roskapostit ja sähköpostiviestit, jotka eivät ole roskapostia.

Kuvittele nyt, että olet kouluttanut luokittelijan tämän tietojoukon avulla ennustamaan, onko uusi sähköposti roskapostia vai ei. Arvioituasi sen suorituskyvyn saat 90% tarkkuuden. Kuulostaa melko hyvältä eikö? Ei aivan.

Syynä on, että luokittelija voisi merkitä tai ennustaa kaikki 100 sähköpostiviestiä nimellä "Ei roskapostia" ja olla silti erittäin tarkkoja. Tässä tapauksessa sillä olisi 90/100 = 0,9 tai 90% tarkkuus! Mutta tällä luokittelijalla ei ole meille mitään hyötyä, koska se luokittelee jokaisen sähköpostin aina roskapostiksi.

Joten tarkkuus ei aina ole hyvä suorituskyvyn mittari. On myös muita mittareita, joiden avulla voit arvioida mallisi paremmin tietyissä tilanteissa:

Tarkkuus

Tarkkuus kertoo meille, kuinka suuri osa roskapostiksi luokitelluista viesteistä oli roskapostia. Se on todellisten positiivisten (roskapostiksi luokiteltujen ja tosiasiallisesti roskapostiksi luokiteltujen sähköpostiviestien) suhde kaikkiin positiivisiin (kaikki roskapostiksi luokitellut sähköpostit riippumatta siitä, oliko tämä oikea luokittelu). Toisin sanoen, se on todellisten positiivisten / (todellisten positiivisten + vääriä positiivisten) suhde.

Palauttaa mieleen

Muistutus tai herkkyys kertoo meille, kuinka suuri osa viesteistä, jotka todella olivat roskapostia, luokittelimme roskapostiksi. Se on todellisten positiivisten (roskapostiksi luokiteltujen ja todella roskapostiksi luokiteltujen sanojen) suhde kaikkiin sanoihin, jotka todella olivat roskapostia (riippumatta siitä, luokittelimmeko ne oikein). Se annetaan kaavalla - Tosi Positiivit / (Tosi Positiivit + Väärä Negatiivit)

Mikä olisi sen tarkkuus ja muistutus luokittelijallemme, jonka tarkkuusaste on 90%? Katsotaanpa - sen todelliset positiiviset ovat 0, vääriä positiivisia ovat 0 ja väärät negatiiviset ovat 10. Yhdistämällä nämä kaavoihimme, luokittelijamme tarkkuus ja palautusarvot ovat 0 - melko epämiellyttäviä pisteitä! Eikö se näytä niin upealta nyt?

F1-pisteet

F1-pistemäärä on tarkkuuden ja muistin harmoninen keskiarvo. Sen antaa kaava:

Jos asetat β-arvon korkeammaksi, korostetaan enemmän tarkkuutta.

Katsotaanpa nyt, kuinka hyvin ML-algoritmeimme suoriutuivat jälleen:

Näistä tuloksista voimme nähdä, että Gaussian Naive Bayes -suorituskyky ei ole yhtä suuri kuin päätöksentekopuu tai Random Forests.

Miksi se ei mielestäsi toimi yhtä hyvin kuin muut algoritmit? (Vihje: vieritä vapaasti ja lue vielä kerran Gaussian Naive Bayesin selitys!)

Ominaisuuden tärkeys

Joissakin scikit-oppilaitoksen tarjoamista luokittelualgoritmeista on ominaisuuden tärkeysominaisuus. Tätä ominaisuutta käyttämällä voit nähdä kunkin ominaisuuden tärkeyden suhteessa sen joukkoon, kun tehdään ennusteita valitun algoritmin perusteella.

Scikit-oppien satunnaismetsäluokittelijalla on ominaisuus .feature_importance_, joten voit käyttää samaa luokittelijaa tai valita toisen.

# Tuo valvottu oppimismalli, jolla on 'feature_importances_'
malli = RandomForestClassifier (max_depth = Ei mitään, random_state = Ei mitään)
# Harjoittele valvottua mallia harjoittelujoukossa käyttämällä .fit (X_train, y_train)
malli = malli.fitti (X_train, y_train)
# Pura ominaisuuksien merkitykset käyttämällä .feature_importances_
importances = model.feature_importances_
Tulosta (X_train.columns)
Tulosta (merkityksiin)
# Tontti
vs.feature_plot (tuontitiedot, X_train, y_train)

Tämä antaa sinulle seuraavat suhteelliset sijoitukset:

Kuten voit selvästi nähdä, kaavio näyttää viisi tärkeintä ominaisuutta, jotka määrittävät, kuinka hyvä viini on. Alkoholipitoisuus ja haihtuvien happamustasojen vaikutukset vaikuttavat olevan vaikuttavimpia tekijöitä, joita seuraavat sulfaatit, sitruunahappo ja kiinteät happopitoisuudet.

Hyperparametrien viritys ja optimointi

Kuten ehkä huomasit, koneoppiminen (tai jopa syväoppiminen) liittyy tietotekniikkaan. Kuten mikään muu tiede, se alkaa joillakin aikaisemmilla havainnoilla. Sitten teet hypoteesin, suoritat kokeita ja analysoit sitten kuinka tarkasti ne toistavat aikaisempia havaintoja. Tätä kutsutaan myös tieteelliseksi menetelmäksi. Se on samanlainen kuin suunnitteluprosessi.

Hypoteesia voidaan pitää myös ”oletuksena”. Luokittelijamme rakentamisessa hypoteesimme ensin joukon algoritmeja, jotka mielestämme toimisivat hyvin. Mutta myös hypoteesimme voi olla väärä. Emme vieläkään ole varmoja siitä, ovatko ne räätälöityjä vai viritettyjä. Usein meidän on viritettävä hypoteesimme nähdäksemme, voidaanko niitä parantaa.

Valittaessa koneoppimismallejamme teimme alustavat oletukset joihinkin niiden hyperparametreihin. Hyperparametri on erityyppinen kokoonpanomuuttuja, jonka arvoa ei voida suoraan laskea tietojoukon avulla. Tietotekijän tai koneoppimisen suunnittelijan tehtävä on kokeilla ja selvittää näiden hyperparametrien optimaaliset arvot. Tätä prosessia kutsutaan hyperparametrien viritykseksi.

Nyt, mitä satunnaisen metsän algoritmillamme voisi olla sen hyperparametrit?

  • Metsäpäätöspuiden lukumäärä
  • Niiden ominaisuuksien lukumäärä, jotka on otettava huomioon etsiessäsi puun parasta halkaisua
  • Puun enimmäissyvyys tai pisin polku juurista lehtiin

Näihin hyperparametreihin satunnainen metsäluokittelijamme käytti oletusarvoja, jotka on koottu skikit-oppi-sovellusliittymien piiriin.

Eikö nyt kestäisi kauan, kun me toistuvasti koulutamme, analysoimme ja tallennamme algoritmin suorituskyvyn joukolle hyperparametrien eri arvoja?

Kyllä se olisi! Meille onneksi scikit-learning tarjoaa erittäin kätevän sovellusliittymän, joka tekee meille raskaan nostamisen. Voimme määrittää eri arvot hyperparametrillemme “ruudukossa”, ja scikit-oppi GridSearchCV-sovellusliittymä kouluttaisi ja suorittaisi ristiinvalidoinnin näiden hyperparametrien kaikilla mahdollisilla yhdistelmillä ja antaisi meille optimaalisen kokoonpanon. Tällä tavalla meidän ei tarvitse manuaalisesti suorittaa niin monta iteraatiota.

Suorita malli virittämällä seuraavassa solulohossa oleva koodi:

Ja valmis. Voit nähdä, että mallimme suorituskyky on tosiasiallisesti parantunut!

Mallisi käyttäminen ennusteissa

Lopuksi voit testata mallisi antamalla sille joukon arvoja eri ominaisuuksille ja nähdä, mitä se ennustaa:

Onnittelut! Olet onnistuneesti rakentanut oman koneoppimisluokittelijasi, joka osaa ennustaa hyviä ja huonoja viinejä. Toivottavasti sinulla oli hauskaa ratkaista tämä harjoitus. Istu nyt takaisin, juo juo ja nauti koneoppimisestasi!

Joitakin kysymyksiä, joihin sinun tulisi pohtia:

  • Onko luokittelijasi paremmin keskimääräisten viinien havaitsemiseksi vai onko he paremmin varustettu hyvien viinien havaitsemiseksi? Mikä voisi mielestäsi olla syy?
  • Suosittelisit luokittelijaasi viininvalmistajalle? Jos kyllä, niin miksi? Jos ei, miksi ei?
  • Kuinka hyvin mallisi toimii, jos koulutat sitä regresiointitekniikoilla luokituksen sijasta?

Mitä seuraavaksi?

  • Kokeile ratkaista tämä tehtävä valkoviinien tietojoukolla
  • Siirry Kaggleen, tutkia erilaisia ​​tietojoukkoja ja työskentele mielenkiintoisen kanssa.
  • Kirjoita sovellusliittymäpalvelu, joka käyttää koneoppimismallejasi, ja tee mukava verkko- tai mobiilisovellus

Lopuksi, sinun tulisi ehdottomasti tutustua näihin resursseihin -

  • Aloittelijan opas AI: stä ja ML: stä
  • Yli 200 parhaasta koneoppimis-, NLP- ja Python-oppaasta - 2018-painos
  • Koneoppimisen hallitseminen
  • Johdanto koneoppimiseen - Udacity
  • Visuaalinen johdanto koneoppimiseen
  • Kierros koneoppimisalgoritmeista
  • 40 haastattelukysymystä, joita kysytään Data Science and Machine Learning Startup -yrityksissä

Siihen asti Valar-alkoholistit! Saatatko saavuttaa mahtavia F1-pisteitä kaikille uusille ratkaisuillesi (ratkaisuille) tänä vuonna.

Piditkö lukemasi? Sinun tulisi tilata. En tuhlaa aikaaasi.

Jos sinulla on kysyttävää tai jos haluat, että tietty aihe poistetaan, jätä kommentti! Mitä haluaisit oppia seuraavaksi?