1 Luokittelijan suorituskyvyn optimointi Tässä luvussa käsitellään optimaalisten piirteiden valintaa, luokittelijan optimointia ja luokittelijan suorituskyvyn arviointia. A. Piirteen valinnan menetelmiä Erottelukykyisten piirteiden ideoiminen on ratkaisevan tärkeää suorituskykyisen hahmontunnistusjärjestelmän suunnittelussa. Tämä ei kuitenkaan riitä, vaan lisäksi on suoritettava ns. piirteen valinta (feature selection), jossa haetaan annetusta piirrejoukosta luokat parhaitten erilleen saavat piirteet. Kaikkia laskettavissa olevia piirteitä ei yleensä voida valita mukaan piirrevektoriin, koska jokainen niistä lisää uusia parametreja luokittelijaan, mikä puolestaan edellyttää opetusaineiston määrän kasvattamista tilastollisten mallien kiinnittämiseksi. Käytännön sovelluksissa opetusaineistoa on työlästä hankkia suuria määriä, joten kiinnitettävien parametrien lukumäärää on syytä rajoittaa. Tässä yhteydessä voidaan joutua jättämään osa erottelukykyisistäkin piirteistä pois. Tällöin siis joudutaan tekemään kompromissi luokittelijan tarkkuuden ja aineiston hankkimiseen käytettävän työmäärän/hinnan kesken. Seuraavaksi tarkastellaan eräitä suosittuja piirteen valinnan menetelmiä. A.1. Full search Mikäli piirrejoukko on pienehkö, voidaan testata kaikki eri pituiset piirrevektorit ja piirrekombinaatiot sekä valita niistä paras. Piirteenvalinnan aikakompleksisuus on suuri (O(2 n )), joten suurilla piirremäärillä vie epäkäytännöllisen paljon laskentaaikaa. Jokaisella kierroksellahan täytyy opettaa luokittelija ja testata sen suorituskyky. A.2. Sequential forward/backward floating search Seuraavaksi tarkastellaan erästä suosittua piirteen valinnan menetelmää: sequential forward/backward floating search [Pudil et al 1994]. Ajatuksena on, että piirrevektoriin lisätään yksi piirre kerrallaan, mikäli tämä parantaa suorituskykyä; ja piirteitä poistetaan, mikäli tämä parantaa suorituskykyä (forward malli). Prosessia jatketaan lisäten ja poistaen vuoronperään (floating), etsien paras suorituskyky jokaisella piirrevektorin dimensiolla. Käytännössä usein piirrevektorin dimensio rajataan kuitenkin valittuun maksimiarvoon. Menetelmä on alioptimaalinen, sillä se ei takaa parhaan mahdollisenpiirrevektorin löytymistä. Käytännössä menetelmä tuottaa erinomaisen suorituskyvyn luokittelijalle. Algoritmin voi ajaa myös toiseen suuntaan aloittaen kaikki piirteet valittuna ja sitten poistaen ja lisäten piirteitä vuoronperää (backward malli).
2 Algoritmi: sequential forward floating search 1. Opeta ja testaa luokittelija jokaisella piirteellä erikseen sisällyttäen piirrevektoriin vain kyseinen piirre. Valitse lopuksi paras piirrevektori; dimensio d = 1. 2. Jatka kunnes ehto d = d max on saavutettu: 2.1. lisäämis-vaihe: - lisää yksi jäljellä oleva piirre kerrallaan piirrevektoriin ja testaa luokittelijan suorituskyky (dimensio = d+1) - valitse testien mukainen paras piirrevektori - sisällytä kyseinen piirre piirrevektoriin; d d+1 - Jos d 2 siirry takaisin vaiheen 2.1. alkuun muutoin mene vaiheeseen 2.2. 2.2. poistamis-vaihe - poista yksi piirre kerrallaan piirrevektorista ja testaa luokittelijan suorituskyky (dimensio = d-1) - valitse testien mukainen paras piirrevektori - jos se parantaa suorituskykyä d-1 dimension parhaasen tulokseen nähden, - poista kyseinen piirre piirrevektorista; d d-1 - siirry takaisin vaiheen 2.2. alkuun muutoin mene vaiheeseen 2.1. Huomautus 1: kyseessä on heuristinen hakualgoritmi joka pystyy taaksepäin katsomalla usein näkemään paikallisten maksimien ulkopuolella olevat paremmat piirrevektorit ja siten välttää pesiytymistä. Huomautus 2: mukana oleva piirrejoukko jakautuu kahteen ryhmään piirrevektorissa olevat ja jäljellä olevat käyttämättömät piirteet. Huomautus 3: algoritmi sisältää luokittelijan testaamisen, mikä on kuvattu osiossa B. Huomautus 4: algoritmin voi ajaa myös toiseen suuntaan (sequential backward floating search) aloittaen kaikki piirteet valittuna ja poistaen piirteitä vaiheessa 2.1 ja vastaavasti lisäten vaiheessa 2.2. (Huom. dimensio askeltaa toiseen suuntaan) Lähde: Pudil, P., Novovičová, J. & Kittler J. (1994) Floating search methods in feature selection. Pattern Recognition Letters 15 (11), 1119 1125.
3 B. Luokittelijan testaaminen Kertauksena aiemmasta: luokittelijan parametrit kiinnitetään opetusaineistolla (training data) ja sen suorituskyky arvioidaan riippumattomasti poimitulla testidatalla (test data). Pääperiaate on, että luokittelijan opetusaineiston tulisi olla mahdollisimman laaja, jotta luokittelijan parametrit saadaan kiinnitettyä mahdollisimman tarkasti ja luokittelijan yleistyskyvystä tulee hyvä. Toisaalta myös testiaineistoa tulisi olla mahdollisimman paljon. Koottu aineisto voidaan jakaa eri tavoin opetus- ja testiaineistoksi ja pyrkiä hyödyntämään se mahdollisimman tarkoin. Seuraavaksi esitellään usein käytettyjä menetelmiä aineiston käsittelemiseksi luokittelijan testaamista ajatellen. B.1. Hold-out test Aineisto jaetaan kahteen osaan, opetusaineisto ja testiaineisto, esimerkiksi suhteissa 2/3 ja 1/3. Opetettu luokittelija testataan ja siitä lasketaan määrätyt suorituskykyä kuvaavat tunnusluvut (katso kohta B.3.). Tämä menetelmä sopii silloin, kun aineistoa on paljon käytettävissä, jolloin opettaminen tuottaa hyvin yleistävän luokittelijan ja testaus antaa tarkan tuloksen. B.2. N-fold cross-validation Aineisto jaetaan N:ään yhtä suureen osaan ja niitä jokaista käytetään kerrallaan luokittelijan testaamiseen ja muita osia sen opettamiseen. Lopuksi lasketaan suorityskykysuureiden keskiarvo. Tällä tavoin jokainen datanäyte on mukana sekä opettamisessa että testaamisessa, mikä johtaa aineiston hyvään hyödyntämisasteeseen. Usein valitaan N=10.
4 Algoritmi: N-fold cross-validation 1. Osita data D satunnaispoiminnoilla N yhtä suureen, toisensa poissulkevaan osaan: D 1,...,D N. 2. Suorita kaikilla i-arvoilla: i=1,...,n 2.1. Poimi osa D i testiaineistoksi 2.2. Poimi muut osat D j opetusaineistoksi (j=1,...,n, j i) ja opeta luokittelija 2.3. Testaa luokittelija aineistolla D i ja talleta suorituskykysuure P i 3. Laske keskimääräinen suorituskykysuure P = (P 1 +...+ P N )/N B.3. Luokittelijan suorituskykysuureet Usein käytetään sekaannusmatriisia (confusion matrix), joka kuvastaa sitä kuinka paljon eri luokkiin kuuluvat testinäytteet luokitellaan väärin. Vasemman puolisin sarake luettelee testitapausten oikeat luokat, ja ylärivi luettelee luokittelijan tekemät ratkaisut. Matriisin soluihin merkitään luokittelutapauksista lasketut prosenttiluvut. Matriisin avulla saa palautetta siitä kuinka hyvin piirteet erottelevat luokkia toisistaan ja vihjeitä siitä mihin kannattaisi panostaa uusien piirteiden kehittämisessä. Eräässä esimerkkitapauksessa sekaannusmatriisi näyttää seuraavalta kun luokkia on kolme. Luokka 1 Luokka 2 Luokka 3 Luokka 1 92 6 2 Luokka 2 10 89 1 Luokka 3 3 0 97 Esimerkiksi: Luokan 1 tapauksista 92% on luokiteltu oikein luokkaan 1 kuuluviksi, mutta 6% on luokiteltu virheellisesti luokkaan 2 kuuluviksi ja 2% luokkaan 3 kuuluviksi. Paras tulos on sellainen, jossa päädiagonaalilla on mahdollisimman lähellä 100% olevia lukemia. Päädiagonaalin keskiarvo kuvastaa luokittelijan keskimääristä tarkkuutta (average accuracy) ja ilmoitetaan aina.
5 C. Luokittelijoiden yhdistäminen: hybridiluokittelijat Yksi mahdollisuus suorituskykyisen hahmontunnistusjärjestelmän kehittämisessä on suunnitella useita erilaisia kantaluokittelijoita samaan ongelmaan ja sitten yhdistää ne hybridiluokittelijaksi. Yksikään kantaluokittelijoista ei ole täydellinen, joten niiden yhdistäminen saattaa parantaa suorituskykyä, jos yhdistämisessä painotetaan niiden vahvuuksia oikealla tavalla. Kukin kantaluokittelijoista voi hyödyntää erilaisia piirteitä; esimerkkinä vaikkapa henkilön biometrinen tunnistaminen kamerakuvasta ja puhenäytteestä yhdistämällä kuva-analyysialgoritmien tuottamien kuvapiirteiden luokittelija äänialyysialgoritmien tuottamien äänipiirteiden luokittelija. Tällöin määrätyn hahmon tunnistamiseksi kantaluokittelijoiden tulokset yhdistetään sopivalla tavalla. Tähän on käytettävissä useita erilaisia menetelmiä. C.1. AdaBoost käyttäen yhtä kantaluokittelijaa AdaBoost (Adaptive Boosting) on koneoppimismenetelmä (machine learning), joka kehitettiin 1995. Tässä kurssissa sen periaate esitetään kaksiluokkaisen tunnistusongelman yhteydessä, mutta siitä on kehitetty moniluokkaisiin ongelmiin soveltuvia versioita. Laskennan edetessä algoritmi generoi kantaluokittelijasta (h) annetun määrän uusia luokittelijoita (h t, t=1,...,t) ja jokaiselle painokertoimen (α t ), joista kootaan lopullinen luokittelija H, hybridiluokittelija. Kukin uusi luokittelija muodostetaan eri otoksella opetusaineistoa painottaen virheellisesti luokiteltuja näytteitä, mitä tarkoitusta varten algoritmi laskee datajoukon näytteille (x i, y i ) joka iteraatiolla painokertoimia (D t (i)).
6 Algoritmi: AdaBoost kahdelle luokalle, yksi kantaluokittelija 1. Kokoa data (x 1, y 1 ),...,(x N, y N ), jossa x i on datanäyte ja y i sen luokkaleima: -1 tai +1 2. Alusta datanäytteiden painokertoimet D 1 (i) = 1/N, i= 1,,N 3. Iteroi T kierrosta: t=1,...,t 3.1. Opeta kantaluokittelija h satunnaisotoksella dataa painottaen D t -jakaumalla h t 3.2. Laske luokittelijan h t tekemä virhe 3.3. Laske 3.4. Laske Päivitä 4. Tulosta valmis hybridiluokittelija Huomautus 1: Kohdassa 3.1. kantaluokittelija opetetaan poimimalla aineistosta satunnaisotos (resampling) painottamalla poimintaa D-jakaumalla. D-jakauman alkio D(i) liittyy todennäköisyyteen luokitella datanäyte x i väärin. Alkion D(i) arvo muodostuu korkeaksi, jos usea luokittelija h t luokittelee sen väärin. Tällöin seuraavaa luokittelijaa muodostettaessa kohonnut D(i)-arvo nostaa todennäköisyyttä että kyseinen datanäyte tulee valituksi uuden luokittelijan opetusaineistoon. Siten eniten virheitä tuottavat datanäytteet vaikuttavat eniten uusien luokittelijoiden rakenteeseen, mikä johtaa siihen että uusimmat luokittelijat pyrkivät erikoistumaan hankalien datanäytteiden oikeaan luokitteluun. Alkupään luokittelijoiden opetuksessa painaa enemmän oikein luokittuvat datanäytteet. Hybridiluokittelija pyrkii siis luokittelemaan hyvin sekä helpot (kaukana päätöspinnasta) että vaikeat (lähellä päätöspintaa) sijaitsevat datanäytteet.
7 Hybridiluokittelijassa luokittelijoita painotetaan suhteessa niiden opetusaineistolla tekemään virheen määrään kertoimilla α j. Huomautus 2: Kohdassa 3.1. kantaluokittelijan opettamisessa voidaan soveltaa jopa piirteen valintaa jokaiselle luokittelijalle h t erikseen. Täten voi käydä niin, että jokaiselle niistä muodostuu erilainen piirrevektori. Kaikki ne kuitenkin hyödyntävät samaa alkuperäistä piirrejoukkoa. Huomautus 3: Kantaluokittelijaksi käy mikä hyvänsä opetettavissa oleva luokittelija (knn, lineaarinen kone, neuroverkko,...), mutta se luonnollisesti pysyy samana AdaBoost-algoritmissa; vain data vaihtuu iteroidessa. Lähde: Freund Y, Shapire R. A short introduction to boosting. Journal of Japanese Society for Artificial Intelligence, 14(5):771-780, September, 1999. C.1. AdaBoost käyttäen useaa kantaluokittelijaa Toinen käyttömahdollisuus tälle meta-algoritmille on yhdistää useita kantaluokittelijoita (h k, k=1,...,l). Perusideana on etsiä kullekin kantaluokittelijalle paras konfiguraatio ja sille painokerroin, jolla kyseisen luokittelijan luokittelutulosta painotetaan lopullisen luokittelutuloksen saamiseksi näytteelle. Samoin kuin aiemmin, laskennan edetessä algoritmi laskee datajoukon näytteille painokertoimia, joiden avulla voidaan painottaa väärin luokiteltavia näytteitä satunnaispoiminnoissa. Alla on esitetty eräs versio.
8 Algoritmi: AdaBoost kahdelle luokalle, monta kantaluokittelijaa h k 1. Kokoa data (x 1, y 1 ),...,(x N, y N ), jossa x i on datanäyte ja y i sen luokkaleima: -1 tai +1 2. Alusta datanäytteiden painokertoimet D 1 (i) = 1/N, i= 1,,N, ja luokittelijoiden painokertoimet α 1 k = 0, k=1,...,l 3. Iteroi T kierrosta: t=1,...,t 3.1. Opeta kantaluokittelijat h k satunnaisotoksella dataa painottaen D t -jakaumalla uudet luokittelijat h k t 3.2. Laske kunkin luokittelijan h k t tekemä virhe 3.3. Valitse paras luokittelija h k t eli jolla pienin ε k t-arvo 3.4. Laske parhaalle luokittelijalle h k t ja talleta myös h k t 3.5. Laske käyttäen parasta luokittelijaa h k t Päivitä 4. Tulosta valmis hybridiluokittelija käyttäen kunkin kantaluokittelijan parasta (talletettua) versiota. Huomautus 1: Algoritmi pyrkii etsimään kullekin kantaluokittelijalle mahdollisimman hyvän konfiguraation siten, että se kompensoi muiden luokittelijoiden virheitä.
9 Huomautus 2: Algoritmi pyrkii ohjautumaan kulloinkin parhaan luokittelijan tekemien luokitteluvirheiden mukaisesti ja löytämään niitä paremmin käsittelevän luokittelijan. Huomautus 3: Lopullinen hybridiluokittelija yhdistää parhaat löydetyt kantaluokittelijoiden konfiguraatiot.