T-61.2010 Harjoitustyö #2: "K:n lähimmän naapurin luokitus"

Käytetään "k-nearest neighbour" luokintinta klassiseen iris-dataan.

Sisältö


Työn tekijä:

Opiskelija: Matti Meikäläinen

Opiskelijanumero: 12345A

Sähköpostiosoite: mmeikala@cc.hut.fi

Esitiedot

Tehtävää varten on hyvä lukea luentokalvojen luvun 6 "Hahmontunnistuksen perusteita" materiaali, paperilaskarien H3 tehtävä 3 liittyen kNN-luokittimeen sekä kerrata matriisilaskun perusteet ja tutustua Matlabin käyttöön.

Tehtäväkuvaus

Tämän tehtävän tarkoituksena on demota luennoilla esitettyä lähimmän naapurin luokitinta. Aineistona on klassinen Iris-data eli kolmen eri liljakasvin terä- ja aluslehtien pituudet ja leveydet.

Työtä varten jokaiselle opiskelijalle on kurssin www-sivuilla oma Matlab-tiedosto, josta ladataan 60 näytteen opetusjoukko sTrainD ja noin 30-60 luokiteltavaa näytettä testijoukossa sTestD. Datassa on kolmen eri luokan (liljalajin) olioita, kutakin opetusjoukossa 20 ja testijoukossa 10-20. HUOM! Luokiteltaessa uusi näytteitä ei oikeasti tiedetä niiden luokkaa. Nyt testijoukon näytteiden luokka tunnetaan, jotta luokitteluvirhe voidaan laskea.

Tehtävänä on:

Asiaa on käsitelty luvussa 6 "Hahmontunnistuksen perusteita". Avainsanoja ovat "K-nearest neighbour/neighbor", "Classifier".

Työ tehdään ja dokumentointi palautetetaan yksin oman datasetin pohjalta. Keskustelutasolla 1-3 hengen ryhmät voivat olla hyödyllisimpiä. Koodin kopiointi on kielletty T-osaston vilppitapausten toimintaohjeen mukaisesti: http://tieto.tkk.fi/vilppitoimintaohje.html

Dokumentointi

Tästä työstä tulee palauttaa dokumentti ja koodi sähköpostin liitteenä viimeistään 15.1.2008 sähköpostiosoitteeseen vvi@cis.hut.fi . Sähköpostin otsikoksi: "T-61.2010 harjoitustyo #2 OPNRO", jossa OPNRO korvataan omalla opiskelijanumerolla.

Viestissä pitää olla kaksi liitetiedostoa, joista ensimmäisessä liitteessä tulee olla työstä kirjoitettu dokumentti. Siitä pitää käydä ilmi työn tekijä, opiskelijanumero ja sähköpostiosoite, lyhyt selostus työn vaiheista ja tulokset kuvina. Mahdollinen yhteistyö sekä lähteet tulee mainita. Lopussa tulee vastata pohdintaosan (8) kysymyksiin. Tiedoston pitää olla PDF-muodossa ja nimetty muotoon "DT2007_HT2_doc_<opnro>.pdf" eli esimerkiksi "DT2007_HT2_doc_12345A.pdf".

Toisessa liitteessä on käytetty Matlab-koodi yhdessä ajokelpoissa tiedostossa (pääte .m), jonka muoto "DT2007_HT2_m_<opnro>.m", kuten yllä.

Matlabin funktiota datan käsittelyyn

Vinkkejä Matlabin yleiseen käsittelyyn löytyy myös kurssin tietokoneharjoituksista T#3 sekä Internetistä (vaikkapa hakusanoilla "site:tkk.fi Matlab")

Kurssin www-sivulta löytyy myös apufunktioita:

Matriisien käsittelyyn ja analysointiin:

Datan piirtämiseen komentoja:

Datatiedosto

Hae oma henkilökohtainen datatiedosto XXXXXY.mat (Aihe #2) osoitteesta http://www.cis.hut.fi/Opinnot/T-61.2010/Harjoitustyo/.

Datatiedosto perustuu klassiseen Iris-dataan, jossa 150 näytettä kolmesta luokasta (liljalaji). Datan dimensio on neljä - datajoukkoon on mitattu:

kts. esim. http://en.wikipedia.org/wiki/Sepal. Näin on saatu neljä mittausta jokaisesta kukasta ja datamatriisi on (N x 4).

Mittauksia on tehty kolmesta eri lähekkäisestä liljalajista 'Setosa', 'Versicolor' ja 'Virginica'.

Tätä työtä varten joukko on jaettu kahteen osaan. Opetusosassa sTrainD on 60 näytettä ja luokiteltavassa testiosassa sTestD on noin 30-60 näytettä. Data on jaettu niin, että ensimmäiset 20 näytettä opetusaineistossa kuuluvat luokkaan 'Setosa', seuraavat 20 'Versicolor' ja viimeiset 20 'Virginica'. Testijoukossa lajit ovat sekaisin. Jokaisella opiskelijalla on käytännössä hieman eri datasetti.

Molemmat muuttujat ovat Matlabin strukteja. Struktin osiin pääsee käsiksi seuraavalla tavalla: sTrainD sisältää kaksi muuttujaa (kuten sTestD), sTrainD.data sisältää datasetin (60x4) ja sTrainD.label sisältää solurakenteen (60x1), jossa oikea luokkanimi kullekin näytteelle. Esimerkiksi sTrainD.data(25,3) on 25:nnen kukan 3. muuttuja. Kukan oikea luokka ('Versicolor') löytyy sTrainD.label{25}, huomaa aaltosulut!


Esimerkkiajo

(1) Datamatriisin tarkastelu Matlabissa

Haetaan oma tiedosto XXXXXY.mat (Aihe #1) osoitteesta http://www.cis.hut.fi/Opinnot/T-61.2010/Harjoitustyo/. (HUOM! Jos tiedostoa ei ole olemassa, mailaa Ville.Viitaniemi () tkk.fi, kirjoita viestiin opiskelijanumerosi ja pyydä tiedostoa.)

Luetaan tiedosto komennolla load. Näin on saatu kaksi muuttujaa sTrainD ja sTestD.

Voit tutustua dataan kirjoittamalla Matlabiin sTrainD ja painamalla "enter". Seuraavaksi sTrainD.data ja "enter". Ja vielä sTrainD.label ja "enter", sekä vastaavat toiselle joukolle.

Ensimmäisen muuttujan, aluslehden pituus (Sepal length), kaikki arvot saadaan sTrainD.data(:,1); 'Versicolor'-kukan terälehden leveydet (Petal width) saadaan taas sTrainD.data(21:40, 4), koska 'Versicolor' on näytteissä 21..40. plot-komennolla voidaan visualisoida dataa. Datahistogrammi eli lukujen "jakauma" saadaan komennolla hist. Näistä esimerkki erikseen täällä.

(2) Etäisyys

Lasketaan euklidinen etäisyys jokaisesta luokiteltavasta pisteestä jokaiseen opetuspisteeseen, yhteensä (60 x M) etäisyyttä. Esimerkiksi 4D-pisteiden [5.1000 3.5000 1.4000 0.2000] ja [5.5000 2.4000 3.7000 1.0000] välinen (neliöllinen) etäisyys on E = (5.1-5.5)^2 + (3.5-2.4)^2 + (1.4-3.7)^2 + (0.2-1.0)^2 = 7.3 (koska haetaan jatkossa suuruuden perusteella lähimpiä, niin ei tarvitse välttämättä ottaa neliöjuurta).

(3) K-nearest neighbour

Valitaan joku K:n arvo ja luokitellaan testinäyteet. Kohtiin (3) ja (4) voi käyttää ylempänä tarjottua funktiota myKnnClass.m.

(4) Luokitteluvirhe

Lasketaan luokitteluvirhe. Esimerkiksi:

K=1. Virhe: 3.3333%

(5) Toinen K:n arvo

Valitaan joku toinen K:n arvo ja toista kokeilu. Esimerkiksi:

K=5. Virhe: 5%

(6) Pohdinnat

Pohdi seuraavia kohtia dokumentissasi:

Kirjoita loppuun vielä palaute harjoitustyön tekemisestä ja aika-arvio käytetystä ajasta. Muista, että jos teet yhteistyötä, mainitse siitäkin!