Johdatus tekoälyyn : Weka-ohje (5. laskuharjoituksiin)
Weka-ohje
1. ASENNUS
Lataa omalle tietokoneelle Weka-ohjelmisto (vaatii Javan) osoitteesta: http://www.cs.waikato.ac.nz/~ml/weka/ .
Kun avaat Wekan, ruudulle pitäisi ilmestyä jotakuinkin tämän näköinen ikkuna.
2. ESIMERKKIAINEISTON LATAAMINEN JA AVAAMINEN
Lataa Iris-aineisto tästä: iris.arff. Tiedosto sisältää tietoja eri lajikkeisiin kuuluvien iris-kukkien lehtien muodosta. Varsinainen data seuraa %-merkillä alkavia kommenttirivejä:
--- @DATA 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa ---
Ja niin edelleen. Voit myös ladata muita arff-tiedostoja, joita löytyy netistä googlaamalla.
Valitse Wekassa sovellus "Explorer". Pitäisi aueta seuraavan näköinen ikkuna.
Valitse nyt "Open file..." ja valitse tallentamasi iris.arff -tiedosto. Saat seuraavan näkymän.
Current relation -osio kertoo, että aineistossa on 150 esimerkkiä, joista jokainen koostuu viidestä attribuutista eli muuttujasta. Muuttujaluettelo löytyy osiosta Attributes. Muuttujat 1–4 sisältävät tietoa kukan verho- (sepal) ja terälehtien (petal) pituuden ja leveyden. Viides muuttuja kertoo kukan lajikkeen: Iris setosa, Iris versicolor tai Iris virginica.
3. AINEISTON VISUALISOINTI
Valitse nyt "Visualize". Avautuvassa näkymässä on ns. scatter plot -esitys kaikille muuttujapareille.
Kaksoisklikkaa nyt vaikkapa toiseksi ylimmän rivin keskimmäistä kuvaa, niin muuttujia petal length ja petal width esittävä visualisointi aukeaa isommaksi. Kuvassa kukin aineiston 150 esimerkistä on yksi rasti, jonka x-koordinaatti määräytyy petal length -muuttujan perusteella ja y-koordinaatti petal width -muuttujan perusteella. Rastin väri määräytyy lajikkeen mukaan.
Kuvaan voi lisätä satunnaiskohinaa ("Jitter"), jotta muuten päällekkäin osuvat esimerkit erottuvat. Kuten kuvasta näkyy, etenkin luokka Iris setosa (sininen) erottuu muista luokista selkeästi petal length- ja petal width -muuttujien suhteen. Tämä on hyvä ennusmerkki luokittelun kannalta.
4. OHJATTU OPPIMINEN: LUOKITTELU
Voit nyt sulkea scatter plot -ikkunan ja valita "Classify"-välilehden.
Valitse kohdasta "Classifier" painike "Choose", jotta pääset valitsemaan mieleisesi luokittelijan. Hyvä valinta aluksi on esimerkiksi Naivi Bayes -luokittelija, joka löytyy valikosta "Bayes" otsikolla "NaiveBayes".
Joillakin luokittelijoilla on liuta parametreja, joita voi säätää klikkaamalla valitun luokittelijan nimeä osiossa "Classifier", mutta Naivi Bayes -luokittelija ei tarvitse erityistä säätöä.
Luokittelutehtävänä on oletusarvoisesti viimeisenä olevan luokan (Class) oppiminen muista muuttujista. Muut muuttujat vastaavat siis koneoppimisluennon merkinnöin X:ää ja viimeinen muuttuja eli kukan lajike vastaa Y:tä. Valitse kohdasta "Test options" vaihtoehto "Percentage split", jolloin luokittelija opetetaan valitsemalla satunnaisesti 66 % osuus koko aineistosta ja luokittelutarkkuutta testataan jäljelle jäävillä 34 %:lla. Paina vielä "Start", niin luokittimen oppiminen ja testaus käynnistyy.
Koska aineisto on hyvin pieni ja luokitin nopea, koko operaatio kestää vain pienen hetken.
Tuloste kertoo mm. sen, että testijoukosta (34 % aineistosta, n=51) 48 tapausta luokiteltiin oikein ja 3 väärin. Tulosteen lopussa oleva "Confusion Matrix" kertoo tarkemmin, mitkä esimerkit luokiteltiin väärin. Yksi oikeasti Iris versicolor -lajikkeen yksilö luokiteltiin luokkaan Iris virginica ja kaksi Iris virginicaa luokiteltiin Iris versicoloriksi. Sen sijaan kaikki 15 Iris setosa lajikkeen yksilöä luokiteltiin aivan oikein.
Kokeile luokittelua myös lähimmän naapurin luokittimella (löytyy luokitinvalikosta kohdasta "lazy –> IB1"), päätöspuulla ("trees –> J48") ja monikerrosperseptronilla ("functions –> MultiLayerPerceptron"). Päätöspuun etuna on opitun luokittelusäännön helppo tulkinta: näet säännön tulosraportin kohdassa ("J48 pruned tree"). Sen voi lukea suoraan if-then-else -lausekkeena, jossa kaksoispisteen jälkeen lukee luokittelupäätös. Esimerkiksi seuraava sääntö sanoo, että jos petal width -muuttujan arvo on alle 0.6, luokitellaan esimerkki luokkaan Iris setosa, ja niin edelleen.
--- petalwidth <= 0.6: Iris-setosa (50.0) petalwidth > 0.6 | petalwidth <= 1.7 | | petallength <= 4.9: Iris-versicolor (48.0/1.0) | | petallength > 4.9 | | | petalwidth <= 1.5: Iris-virginica (3.0) | | | petalwidth > 1.5: Iris-versicolor (3.0/1.0) | petalwidth > 1.7: Iris-virginica (46.0/1.0) ---
Monikerrosperseptronin kohdalla on ehkä mielenkiintoista katsoa neuroverkon rakennetta valitsemalla sen asetuksista (klikkaa valitun luokittimen nimeä) GUI = True. Kun nyt painat "Start" aukeaa verkkoa esittävä kuva ja oppiminen käynnistyy valitsemalla "Start" kohdasta "Controls".
Jos valitset "Accept" ilman, että olet käynnistänyt verkon oppimisen, luokitin luokittelee kaikki esimerkit luokkaan Iris virginica. Huomaa että isommilla aineistoilla monikerrosperseptronin oppiminen saattaa kestää todella pitkään.
5. LUOKITTELUTULOSTEN VISUALISOINTI
Seuraavaksi voit tarkastella tarkemmin luokittelutuloksia ja etenkin virheitä. Klikkaa hiiren oikealla napilla kohdassa "Results list" haluamasi luokittimen kohdalta ja valitse "Visualize classifier errors". Lisää kuvaan kohinaa (Jitter), jotta pisteet erottuvat paremmin.
Kuvassa näkyy y-akselilla Naivi Bayes -luokittimen luokitus (luokat järjestyksessä alhaalta ylöspäin Iris setosa, Iris versicolor ja Iris virginica) ja oikea x-akselilla oikea luokka (vasemmalta oikealle samassa järjestyksessä). Kuten näkyy, viginica- ja versicolor -luokat ovat menneet muutaman kerran sekaisin. Valitsemalla ylärivin valikoista x-akselin muuttujaksi esimerkiksi petal length ja y-akselin muuttujaksi petal width saadaan selville, minkälaiset esimerkit on luokiteltu väärin.
Väärin luokitellut esimerkit näkyvät kuvassa laatikoina (ympyröitu punaisella kuvan päälle). Kuten arvata saattoi, väärin luokitellut esimerkit ovat eri luokkien reunoilla ja siksi helppo luokitella väärin.
6. OHJAAMATON OPPIMINEN: RYVÄSTÄMINEN (ELI KLUSTEROINTI)
Sulje nyt luokitteluvirheitä kuvaava ikkuna ja valitse Weka Explorer -ikkunassa "Cluster". Koska kyseessä on ohjaamaton oppiminen, poista luokkamuuttuja eli kukan lajike käytettävien muuttujien joukosta painamalla "Ignore attributes" ja valitsemalla aukeavassa ikkunassa "class" ja painamalla sen jälkeen "Select". Voit käyttää oletusarvona olevaa "EM" -klusterointimenetelmää tai valita itse valikosta jonkun muun – esimerkiksi "SimpleKMeans" on hyvin suosittu ja yksinkertainen menetelmä.
Paina vielä "Start", niin saat raportin klusterointituloksista.
Raportin lopussa näkyy mm. se, kuinka moneen ryhmään tai klusteriin menetelmä päätti aineiston pilkkoa. Tässä tapauksessa pilkottiin viiteen ryhmään, joista ensimmäiseen (ryhmä 0) päätyi 28 esimerkkiä, toiseen (ryhmä 1) 35 esimerkkiä, jne.
Klusterointitulosta voi visualisoida klikkaamalla oikealla hiiren napilla listasta "Result list", jolloin aukeaa ikkuna. Valitse ylärivin valikoista x-akselin muuttujaksi taas esim. petal length ja y-akselin muuttujaksi petal width. Pieni kohina (Jitter) ei todennäköisesti tee pahaa.
Ryhmät 0 ja 3 (sininen ja vaaleansininen) kattavat selkeästi erottuvan Iris setosa luokan ja muut ryhmät jakavat muun aineiston kolmeen osaan. Koska kyseessä on ohjaamaton oppiminen ei kuitenkaan välttämättä ole syytä odottaa, että ryhmittely vastaisi luokkamuuttujan mukaista luokittelua eli kukan lajikkeita.
Nyt voit kokeilla itse muilla aineistoilla ja erilaisilla luokittelu- ja klusterointimenetelmillä.