Együttes tanulás (Ensemble learning)
Alapötlet Concordet tétele (1785): tegyük fel, hogy emberek egy csoportjának két lehetőség között kell döntenie (melyek közül egy helyes). Tfh. a szavazataik függetlenek, és p valószínűséggel helyesek. A szavazatokat többségi alapon összesítjük. Jelölje M annak a valószínűségét, hogy a többségi alapon hozott döntés helyes. A tétel azt mondja ki, hogy ha p>0.5, akkor M1 ha a szavazatok száma végtelenhez tart. Ez azt jelenti, hogy tömeg okosabb mint az egyének viszonylag enyhe feltételek mellett is Az egyes egyéneknek p>0.5 eséllyel kell helyesen dönteniük (a véletlen tippelésnél jobbnak kell lenniük) Egymástól függetlenül kell tippelniük Rendben, de hogy lehet ezt használni a gépi tanulásban?
Erős és gyenge tanulók “Strong learner”: Egyetlen osztályozó tanulására törekszünk, és azt szeretnénk, ha ennek a hibáját tetszőleges kicsire lehetne csökkenteni Az eddigi módszereknél mindig erre törekedtünk “Weak learner”: olyan osztályozó, ami épp csak jobb hatásfokú a véletlen találgatásnál Most csak ez lesz az egyetlen feltevésünk Együttes tanulás: egytlen erős osztályozó helyett, egy csomó gyenge osztályozót csinálunk, majd ezek kimentét egyesítjük egyetlen végső döntéssé Concordet tétele szerint bizonyos feltételek teljesülése esetén az egyesített modell is tesztőlegesen kicsi hibát érhet el Miközben sok-sok gyenge tanulót előállítani remélhetőleg könnyebb feladat, mint egyetlen erőset
Együttes tanulás – általános séma
Feltételek Ugyanazt az osztályozót ugyanazon az adaton betanítva ugyanazt az eredményt kapjuk a legtöbb gépi tanulási algoritmus esetén Kivéve azon algoritmusokat, amelyekben valami véletlenszerűség van Az így kapott osztályozókat semmi értelme kombinálni Az osztályozók kombinálása akkor működik a legjobban, ha Az osztályozók különféle eredményeket adnak ugyanazon az inputon Az osztályozók függetlenek (vagy legalább részben függetlenek) Minden osztályozónak van valami egyedi vagy “lokális” tudása Pl. eltérő (vagy legalább részben eltérő) adatokon voltak tanítva Emellett szükségünk lesz még valamilyen formalizmusra az osztályozók kimenetének kombinálására (aggregálására)
Eltérő osztályozók - Hogyan? Kombinálhatunk különböző tanulóalgoritmusokat (“hybridization”) Pl. taníthatunk egy GMM-et, SVM-et, k-NN-et,… ugyanazon az adaton, majd ezek kimenetét kombináljuk Kombinálhatjuk ugyanazon algoritmus kimenetét ugyanazon az adaton többször egymásután betanítva Csak akkor működik, ha az algoritmusban van valami véletlenszerű Pl.: neuronhálók eltérő random incializálással tanítva Kombinálhatjuk ugyanazon algoritmus kimenetét a tanítóadatok eltérő részhalmazain többször egymásután betanítva Vagy taníthatjuk őket a jellemők különböző részhalmazain Esetleg az osztályok részhalmazain (sok osztályos feladat esetén) Bizonyos algoritmusok esetén használhatjuk ugyanazt az algoritmust ugyanazokon a példákon, de a példákat eltérően súlyozva
Döntési fák randomizálása A döntési fák nagyon népszerűek az együttes tanuláson alapuló módszerek körében A (kicsi) döntési fák nem igazán hatékony tanulók De a tanításuk gyors és egyszerű, ezért könnyű létrehozni egy együttes tanulót sok-sok (kis) döntési fa kombinálásával A döntési fa algoritmusa determinisztikus, hogyan módosíthatjuk, hogy többször futtatva eltérő eredményeket adjon? Adatrandomizálás – a fákat a példák eltérő részhalmazain tanítjuk “Random altér” módszer – a fák tanítsa során a jellemzők eltérő részhalmazait használjuk Algoritmus randomizálása – Az egyes csúcsokban a legjobb attributum helyett véletlenszerűen választunk a K legjobb attributumból
Aggregálási módszerek Az osztályozók kimeneteit többféle módon kombinálhatjuk (aggregálhatjuk) Ha a kimenet osztálycímke: Többségi szavazás Súlyozott többségi szavazás (pl. az egyes osztályo- zókat a megbízhatóságuk szerint súlyozzuk (amit persze me kell valahogy becsülni…) Ha a kimenetek számok (pl. valószínűségi becslések minden ci osztályhoz): A dj kimenti értékeknek vehetjük a (súlyozott átlagát), szorzatát, minimumát, maximumát, … Stacking A fenti egyszerűs aggregációs szabályok helyett, betaníthatunk egy újabb osztályozót az alap osztályozók kimenetén
Együttes tanuláson alapuló módszerek Az osztályozók kombinálása egy általános alapelv, amit bármely feladat, és osztályozók bármilyen eltérő halmaza esetén bevethetünk (az eltérőség garantálására ez előbb láttunk módszereket) De ma azokról a módszerekről lesz szó, amelyeket direkt az együttes tanulási elv kihasználására hoztak létre Ezek először létrehoznak egy csomó alap tanulót (“base learners”) Ezek lehetnek gyenge tanulók is, mivel az egyesítéstől várjuk, hogy felfokozza a hatékonyságot Ezért jó sok ilyen alap tanulót hozunk létre Arra fogunk törekedni, hogy ezek különbözőek legyenek, sőt, a jobb algoritmusok esetében kijavítsák egymás hibáit A kombinálásuk során maximális osztálozási pontosságra törekszünk Ezeket a módszereket fogjuk megnézni: Bagging, Boosting, AdaBoost, Random Forests
Bagging Bagging = Bootstrap + aggregating Ún. “bootstrap resampling” eljárással az eredeti példahalmazból L különböző példahalmazt generálunk Az L példahalmazon L különböző alap tanulót tanítunk be A kiértékelés során az L tanulóalgoritmust (egyenlő súlyozású) átlagolással, esetleg többségi szavazással kombináljuk A tanulóalgoritmusok sokféleségét sehogy sem szabályozzuk, a véletlenszerűségre, illetve az alap tanulók instabilitására bízzuk Az egyesített modell majdnem mindig jobb lesz, mint ez egyes alap tanulók külön-külön, ha az alap tanulók instabilak (ennek definíciója, hogy a tanítópéldákon végzet kicsi változtatás nagy különbséget eredményezhet a tanulás kimenetében)
Bootstrap resampling Tfh. van egy tanítóhalmazunk n példával Ebből szeretnénk L különböző tanító példahalmazt kreálni A “bootstrap” újramintavételezési módszer véletlenszerűen húz példákat az eredeti halmazból, visszatevést is megengedve A véletlenszerűség azért kell, hogy L menetben L különböző példahalmazt kaphassunk A visszatevést azért kell megengedni, hogy akár n méretű halmazokat is tudjunk kreálni az n méretű eredeti halmazból Mivel az L tanítóhalmaz eltérő, az ezeken tanított osztályozók is többé-kevésbé eltérőek lesznek, akármilyen algoritmust is használunk De instabil tanulókkal ez jobban működik (pl. neuronhálók, döntési fák) Stabil tanulókkal kevésbé (pl. k-NN, SVM)
Bagging - Összegzés
Random Forests – egy együttes módszer döntési fákhoz Input: training data set Sn, T, m
Boosting 1 A bagging az alap tanulók sokféleségét a tanítópéldák véletlenszerű újramintavételezésével garantáltuk Ez azoban ez nem ad elvi biztosítékot arra, hogy az eltérő tanulók tényleg segítenek egymásnak Jobb eredményt kaphatnánk, ha valahogy törekednénk arra, hogy az egyes tanulók kiegészítsék egymást Például a minta különböző részhalmazain legyenek “szakértők” Azaz más-más részhalmazokon más-más tanulók működjenek jobban A boosting módszer alapötlete, hogy a tanulóknak egy olyan sorozatát állítsuk elő, amelyek kiegészítik egymás tudását E célből minden egyes tanulót arra fogunk késztetni, hogy az előző tanuló hibáit próbálja kijavítani
Boosting 2 Minden egyes példához egy súlyt fogunk rendelni, amely a példa fontosságát reprezentálja korrekt osztályozás csökkentjük a súlyt félreosztályozás növeljük a súlyt A súlyok az algoritmust kétféleképp befolyásolhatják Boosting by sampling: a súlyok az újramintavételezésnél számítanak Ez az általánosabban használható megoldás Boosting by weighting: a súlyok a tanulóalgoritmust befolyásolják Ez csak bizonyos tanulóalgoritmusokkal működik Boosting esetén az aggregálás is kifinomultabb, mint bagging-nél: az alap tanulók kimenetét súlyozott összegzéssel egyesítjük A pontosabb tanulók nagyobb súlyt kapnak Iteratívan újabb és újabb alap tanulókat veszünk fel, így iteratívan növeljük a kombinált modell pontosságát
AdaBoost (Adaptive Boosting) Egyforma súlyokkal kezdünk Random resampling Becsült címkék kiszámítása A hiba az elrotnott példák súlyozott összege Nem gyenge tanuló, megállunk Súlyok változtatása Súlyok újranormalizálása Az osztályozók súlyozott egyesítése
Példa Két osztály 5-5 tanítópéldával Két folytonos jellemző Íme tanítópéldák egy lehetséges jó megoldással (döntési felülettel): Alap tanulóként 1 mélységű döntési fákat fogunk használni Ezek neve “decision stump” Folytonos jellemzők esetén tengelyekkel párhuzamos egyeneseknek felelnek meg: A kimenet 1 az egyik oldalon, -1 a másikon
Inicializálás + első iteráció A súlyokat egyenlőre inicializáljukD1 Betanítjuk az első stumpot, kiszámoljuk a hibáját és kombinációs súlyát Az elrontott minták súlyát növeljük az új eloszlás D2
Második iteráció A D2 eloszlás alapján új mintavételezést végzünk Betanítjuk a második stumpot, kiszámoljuk a hibáját és kombinációs súlyát Az elrontott minták súlyát növeljük az új eloszlás D3
Harmadik iteráció A D3 eloszlás alapján új mintavételezést végzünk Megállunk, mivel az egyesített modell hibája 0
A végleges osztályozó előállítása A 3 stumpot kombinálni kell a súlyaik alapján
Az együttes osztályozó A 3 stumpot kombinálni kell a súlyaik alapján
Az együttes tanulók torzítása és varianciája Bagging: Elméleti és gyakorlati eredmények is igazolják, hogy a bagging csökkenti a hiba variancia részét A variancia hatékony csökkentése az oka például annak, hogy a Random Forest módszerben nem érdemes az egyes döntési fákat visszametszeni AdaBoost: a gyakorlati eredményekből úgy tűnik, hogy az AdaBoost módszernél az alap tanulók hibájának mind a bias, mind a variancia komponense csökken. A bias leginkább a korai iterációkban, a variancia pedig a későbbieken.