Umetna inteligenca za učitelje: Modeli
Nadaljevanje prijaznega uvoda v umetno inteligenco
V prvi knjigi smo malo vrteli in risali podatke, mimogrede pa se naučili še uporabljati Orange. V drugem delu ugriznemo v bolj pravo analizo: modeliranje.
Knjiga je krajša, saj pokriva predvsem teme, ki pridejo prav v okviru učnih ur, razvitih v projektu Pumice. Sčasoma pa bomo dodali še kaj.
Poglavja
Poglavje 1: Kako daleč smo od Kanade?
... v katerem razmišljamo o tem, kako opisati in izračunati razliko med objekti.
Profesor Bratko, eden od pionirjev umetne inteligence pri nas in v svetu, je seveda obvladal matematiko, na predavanjih pa nas ni moril z njo. Nekoč pa je za trenutek pokazal kup nekih formul - bile so neke grozne beta distribucije - a jih tudi hitro skril z besedami: "Samo toliko, da boste vedeli, da je tu zadaj tudi nekaj matematike".
To poglavje ima podoben namen. Vendar matematika ne bo prehuda. In še: prav je, da približno veste, za kaj gre.
Za zdaj pustimo celine in verska vprašanja. Vrnimo se k osnovnemu naboru podatkov. Začnimo s praznim platnom, nanj postavimo le Zbirke podatkov, naložimo iste podatke kot vedno in jih povlecimo v Tabelo.
S koliko lastnostmi (spremenljivkami) je opisana vsaka država?
V nekaj naslednjih poglavjih bomo združevali države glede na podobnosti med njimi. Kako, na osnovi česa, lahko rečemo, da sta si dve državi podobni - ali različni?
Očitno na osnovi njihovih lastnosti. Vsaka država je opisana s 53 lastnostmi (tistim, ki niso odgovarjali na gornje vprašanje, smo pravkar izdali odgovor) in dve državi sta si podobni, če sta si podobni po teh lastnostih. Stvar je dodatno preprosta, ker so vse lastnosti številske. Dve državi se po posamični lastnosti razlikujeta za toliko, za kolikor sta si različni pripadajoči številki. In skupna razlika med državama je potem kar vsota teh razlik, ne?
No, da, približno tako. Z nekaj detajli.
Vrednosti spremenljivk morajo biti medsebojno primerljive!
Prvi detajl so različne skale. Vzemimo dva učenca. Prvi je velik 1,85 m in tehta 63 kg, drugi ima 1,60 m in tehta 65 kg. Razlika v višini je 0.25, v teži pa 2. Potemtakem sta skoraj enako visoka, a zelo različno težka? Razlika v njuni teži je osemkrat večja od razlike v velikosti? Očitno ne. Da bi lahko nekako "seštevali" razlike, ki odražajo povsem različne lastnosti - teža, višina, dolžina las, število bratov in sester ter ocena pri biologiji, je potrebno vse spremenljivke spraviti na isto lestvico. Če od tež učencev odštejemo težo najlažjega, potem pa to delimo z razliko med najlažjim in najtežjim, bo najlažji težak 0, najtežji pa 1. To je le ena od vrst normalizacije; daljši seznamček najdete na Wikipediji.
Skupna razlika ni nujno kar vsota razlik.
Drugi detajl je, kaj seštevamo. Lahko seštejemo razlike. Točneje: absolutno vrednost razlik - da ne bi kdo v gornjem primeru seštel 0.25 in -2, ker je prvi višji, drugi pa težji. Razlika med gornjima učencema (če pozabimo na normalizacijo) je 2.25.
Lahko pa seštevamo kvadrate razlik in vsoto korenimo. Torej 0.252 + 22 = 4.0625, koren tega pa je 2.016.
Prvi različici pravimo manhattanska razdalja, drugi evklidska. Prva je dobila ime po Manhattnu. Če smo na križišču 10 ulice in 11 avenije, priti pa nam je na 7 ulico, 15 avenijo, se bo potrebno premakniti za 3 ulice in 4 avenije. Ker je mreža pravokotna (in, recimo, celo kvadratna), bo treba prehoditi 3 + 4 = 7 blokov. V kakršnemkoli redu že.
Druga je dobila ime po Evklidu, lahko pa bi ga tudi po Pitagori. Če imamo za pot z (10, 11) na (7, 15) na voljo helikopter, bo nam dolžino poti pove Pitagora: dolga je koren iz 32 + 42, kar je, kakšno naključje, točno 5.
Obe definiciji sta smiselni, vsaka ima svoje prednosti in slabosti. In obe je možno izračunati s poljubnim številom dimenzij (ekhm, spremenljivk). Če sta dve, tako kot tule, seštejemo dva (kvadratа) razlik in vsoto korenimo. Če jih je sto, pač računamo vsoto stotih (kvadratov) razlik in vsoto korenimo (s kvadratnim korenom, tako kot prej).
Poleg teh dveh obstaja še kup definicij razdalj, za te podatke pa sta že dve preveč. Uporabljali bomo normalizirano evklidsko razdaljo in to bo to.
Razdalje med državami nam bo izračunal gradnik Razdalje. Dajmo mu podatke, naj naredi svoje, potem pa si oglejmo rezultat.
Gradnika Razdalje in Tabela se ne marata.
Ne gre? Ne, ne gre. Če vlečemo povezavo iz Razdalje, nam spustni menu sploh ne ponudi gradnika Tabela. In če ga postavimo na platno ter ju poskusimo povezati, se povezava "ne prime".
Različni gradniki delajo z različnimi tipi podatkov.
Iz gradnika Razdalje ne dobimo tabele s podatki, tako kot iz vseh drugih doslej. V tabeli vsaka vrstica ustreza nekemu objektu (državi, učencu, pacientu, živali, potresu, nogometni tekmi), stolpci pa lastnostim, s katerimi so ti objekti opisani. Rezultat računanja razdalj pa je matrika razdalj, torej tabelica kvadratne oblike, v kateri tako vrstice kot stolpci ustrezajo "objektom" (državam), številke v njej pa predstavljajo razdalje med pari.
Gradnik, ki zna prikazati takšno reč, je Matrika razdalj. Dodajmo, odprimo, pa "Oznake" nastavimo na "Države", če Orange tega ne nastavi že sam.
Kaj pomenijo te številke? Je 3.128 veliko ali malo? Tega ne moremo reči; te številke v splošnem nimajo absolutne lestvice. Odvisne so od števila spremenljivk in vrste razdalje. Kar nas spomni, da gradnika Razdalje sploh še nismo odprli! Odprite in preverite, da res računa normirano evklidsko razdaljo!
Razlika med Nemčijo in Dansko je 3,128, med Nemčijo in Singapurjem pa 5,641. Nemčija je bolj podobna Danski kot Singapurju.
Kakšna je razlika med Slovenijo in Kanado v primerjavi z razliko med Nemčijo in Dansko?
Zdaj znamo izračunati razdaljo - ali razliko, besedi bomo uporabljali kot sopomenki - med poljubnimi objekti. Kaj pa bomo počeli s temi številkami?
Poglavje 2: Gruče držav
... ko spoznamo postopek, s katerim je mogoče zložiti poljubne reči - na primer države - v gruče. Pravzaprav kar celo drevo gruč.
Za začetek bomo spoznali dva postopka gručenja. Najprej enega, ki je za uporabo v razredu najbrž bolj uporaben: njegovo učeno ime je hierarhično gručenje.
Reč je povsem preprosta. Začne se tako: če imamo 188 držav, je to pač 188 gruč. Vsaka država je gruča zase.
To nam kajpada nič ne pomaga, to ne bi bilo nobeno gručenje. Ne, 188 gruč je preveč. Zato postopek vzame tisti dve gruči (torej, očitno: tisti dve državi), ki sta si najbolj podobni, in ju združi v skupno gručo. Ker je 187 še vedno preveč, vzame naslednji najpodobnejši par gruč in ju združi. In nato naslednji najpodobnejši gruči. In naslednji. In naslednji.
V začetku postopek združuje (predvsem) posamične države, nato zliva gruče v večje gruče.
... in s tem početjem neha, ko? Pravzaprav ne neha. Torej: ne neha, dokler ne združi zadnjih dveh gruč v eno samo gručo. Vseh 188 držav da v eno samo gručo.
Ena sama gruča (z vsemi državami) zveni podobno nesmiselno in neuporabno, kot 188 gruč, z vsako posamično državo. Vendar ni: celoten postopek združevanja "shranimo" v obliki drevesa, iz katerega je razvidno, kaj se je združilo s čim.
Gradniku Hierarhično gručenje podamo matriko razdalj, ki jo dobimo iz Razdalje.
Kaj je Wardova razdalja, kakšne so druge in zakaj nam je Wardova najljubša, povemo kasneje.
Odprimo ga. Razdalja med gručami naj bo Wardova. Na desni ugledamo drevo združevanj, ki mu učeno rečemo dendrogram.
Slika kaže le majhen košček celotnega drevesa. V njem najdemo, recimo, Togo in Benin, ki sta si dovolj podobna, da ju je postopek nekoč (morda ne ravno v prvem koraku, vendar kmalu po njem) združil v eno gručo. Malo kasneje jima je pridružil še Burkino Faso, vsem trem pa še Burundi.
Poleg tega je zgručil (je to beseda?! četudi ni, bi lahko bila) Mali in Niger, ki se jima je potem pridružil Afganistan.
Te tri države so se nato skupaj s štirimi iz enega odstavka višje združile v večjo gručo.
Tej gruči se je postopno pridružilo še pol Afrike (vse, kar je izpisano od Ekvatorialne Gvineje do Liberije), temu pa se je potem pridružila še druga polovica, z nekaj izjemami (začenši z najvišje izpisanim predstavnikom te skupine, Mjanmarom).
Kako se imenuje država, ki jo je postopek najprej povezal s Slovenijo?
Slovenije ni težko poiskati. Oddrsati moramo do gruče, v kateri videvamo evropske države in hitro jo najdemo nekje med srednje- in vzhodnoevropskimi državami.
Pohvale, opazke, komentarji in svarila
Tole zahteva kar nekaj pohval, opazk, komentarjev in svaril.
Da so bližnje države tudi blizu v drevesu, sicer ni zgolj zasluga postopka. Da se je to lahko zgodilo, mora biti res tudi, da so države, ki so si blizu zemljepisno, tudi podobno razvite.
Najprej pohvala: če vas to, kar vidite, ne fascinira, potem ne razumete, kaj gledate. Gradnik Hierarhično gručenje ni prejel nobenih zemljepisnih koordinat, celin ali česa podobnega. Prejel je zgolj matriko razdalj, tako, kot smo jo gledali v prejšnjem poglavju. Ve le, kako dolgo v kateri državi hodijo v šolo, koliko žensk je v parlamentu, kakšen delež prebivalstva živi v mestu in tako naprej. Fascinantno je, da dobljene gruče tako dobro sledijo geografiji.
Zdaj pa opazka, komentar, svarilo: kako smo oblikovali gornje vprašanje? (Najprej, tako, da je odgovor v imenovalniku, da ne bo dvomov pri vnosu. :) Vprašali smo, s katero državo je najprej povezal Slovenijo, ne pa, kateri državi je Slovenija najbolj podobna. Možno je, da je Slovenija najbolj podobna Hrvaški. Vendar je Hrvaško že prej združil s Srbijo in Črno goro, ki pa jima Slovenija morda ni zelo podobna in zato ne sodi v njuno gručo. Morda se je torej zgodilo, da se je med Irsko ter Hrvaško-Srbijo-Črno goro raje odločil za Irsko. Morda pa je Slovenija pravzaprav bolj podobna Češki, vendar ...
Prav tako nam je prikrito, kaj se dogaja v naslednjih korakih. Namreč: parček Slovenija-Irska se je pridružil "višegrajski skupini", to je, Poljski, Češki, Slovaški in Madžarski. Na tem "velikostnem nivoju gruč" imamo tudi Rusijo z Baltikom, spodaj pa še balkansko trojko (uh, to zveni kot mafijska naveza), pod njimi pa jugovzhodno Evropo, torej Gruzijo, Moldavijo, Romunijo in Armenijo ter Ukrajino in Belorusijo. Nekako štiri skupine, torej. Zakaj je "našo" skupino združil z rusko-baltsko in ne z balkansko?
Na to je težko odgovoriti, vendar bi lahko ugibali, da zaradi podobnosti med "višegrajci" in ruso-baltikom. Enostavno, Poljaki, Čehi, Slovaki in Madžari so nas potegnili k njim, čeprav morda (vendar tega ne vemo) bolj sodimo na Balkan. To je pač omejitev tega postopka.
Razdalje med gručami
Kako pravzaprav računamo razdaljo med gručami?
Dokler imamo le posamične države, je stvar očitna: razdalja med Slovenijo in Irsko je pač takšna, kot je napisana v tabeli. Kakšna pa je razdalja med gručo Slovenija-Irska in gručo Poljska-Češka-Slovaška-Madžarska? Na to pa še nismo pomislili, ne?
Kakšna je razdalja med modrimi in rdečimi križci na spodnji sliki? Kako bi jo "izmerili"?
-
Če bi bila slika le malo drugačna (skupini bi bilo potrebno le obkrožiti!) bi bil odgovor na prvi pogled praktično soglasen: kot razdaljo med skupinami bi "videli" razdaljo med njenima najbližjima elementoma.
-
Kakor je slika videti zdaj, bi se nekaterim morda zazdelo primerneje izračunati nekakšno "poprečno razdaljo" ali razdaljo med sredinama skupin. Da, zveni smiselno.
-
Spet tretji - vendar bi bili le-ti v manjšini, ki bi morda štela celo 0 oseb - bi morda menili, da je potrebno meriti razdaljo med najbolj oddaljenima elementoma. Morda zveni nesmiselno, a spomnimo se na države: tu bi ob združevanju hitro pomislila, da ta in ta država pač ne more biti v isti skupini kot ona in ona. Če razmišljamo tako, razmišljamo o najbolj ekstremnih, največjih razdaljah.
Ob tem razmišljanju ne smemo pozabiti, da tule gledamo dvodimenzionalno ilustracijo, postopek gručenja pa dobi zgolj matriko razdalj, kakršno smo videli v prejšnjem poglavju. Razdaljo med dvema gručama mora torej izračunati iz znanih razdalj med pari, v katerih je ene država iz ene, druga iz druge gruče.
Po prvem receptu poišče tisti par, med katerime je razdalja najmanjša; to bo razdalja med skupinama. Tretji recept je podoben, le da poišče najbolj oddaljeni par. Po drugem receptu pa izračuna, preprosto, povprečno razdaljo med vsemi pari.
In? Kateri recept je "pravi"? Katerega v resnici uporabljamo? Kakor se odločimo. V gradniku hierarhično gručenje ga nastavljamo z "Razdalja med gručama". Na izbiro imamo minimalno, povprečno, maksimalno in, hm, uteženo in Wardovo?
Wardova metoda minimizira varianco znotraj gruč. Za večino bralcev bode to dovolj, ostali naj sami poiščejo več, za začetek lahko kar članek o Wardovi metodi na Wikipediji.
Kako je videti gručenje, če namesto Wardove uporabimo kako drugo razdaljo, bomo videli čez dve poglavji.
Wardova metoda navadno da dendrogram z lepo ločenimi gručami, kar nam bo pomagalo pri analizi gručenja. Poprej pa povzemimo, kar smo se naučili v tem. Videli smo, da je hierarhično gručenje v osnovi preprost postopek, ki nam na podlagi matrike razdalj zloži elemente v hierarhijo gruč. Malo se zaplete pri definiciji razdalje med gručami, od le-tega pa je odvisna tudi interpretacija drevesa. Vanjo se nismo in ne bomo preveč poglabljali, pokazali pa smo, da iz drevesa ne smemo delati prenagljenih sklepov o tem, kdo je podoben komu. Rezultat postopka so neke smiselne gruče, z manjšo spremembo nastavitev (ali, v koraku prej, računanja razdalj) pa bi bile gruče lahko tudi drugačne.
Poglavje 3: Kje smo - in zakaj
... v katerem se spomnimo, kar smo se naučili v prejšnji knjigi, in postavimo gruče na zemljevid. Pa še brke jim dodamo.
V dendrogramu smo videli, da so države, ki spadajo v isto gručo (pravzaprav: v isti del drevesa) tudi z istega dela sveta. Vsaj zdelo se je tako. Zdaj pa preverimo, ali je res. Hierarhično gručenje povežemo z barvnim zemljevidom. Zdaj lahko v gručenju izbiremo gručo, tako da kliknemo nekje znotraj nje in gradnik bo na izhod poslal tabelico s podatki o teh državah.
Razvitejše države se delijo v dve veji. V eni so "bolj zahodne" države, kot so Nemčija, Danska, Nizozemska in tako naprej do Kanade, v drugi pa smo mi, pa Bolgari, Albanci, Litvanci (in tudi Španci, Italijani in Portugalci; toliko o "zahodu").
Kdor gleda le gornji posnetek, morda ni pozoren na to, kje je potrebno klikniti. Zato naj le premaga pasivno lenobo in poskusi. Ko bo znal, pa naj poskusi tole.
- Najprej s klikom izberite "zahodne" države.
- Nato pa pritisnite Shift in kliknete še našo gručo.
- V Barvnem zemljevidu nastavite "Vrednost" na "Gruča".
Zdaj lahko na zemljevidu vidimo, katere države so v kateri gruči.
Kako in zakaj to deluje? Če izberemo več gruč, vsebuje tabela na izhodi hierarhičnega gručenja stolpec Gruča, ki vsebuje oznaki C1 ali C2. (Če bi označili še več gruč pa, očitno, še C3, C4 in tako naprej.)
Zdaj pa odgovorite na vprašanje, ki bo zahtevalo, da uporabite nekaj znanja iz prejšnje knjige.
Po katerem kriteriju se najbolj razlikujejo države iz teh dveh gruč?
Smo izvedeli? In prebrali tudi razlago odgovora - oziroma pot do njega? Potem mimogrede spoznajmo še eno prikladno funkcijo gradnika Porazdelitve. Priključimo ga na Hierarhično gručenje.
- Poiščimo spremenljivko Bruto nacionalni dohodek (dovolj je, da začnemo tipkati del njenega imena v vrstico nad škatlo) in jo izberimo.
- V "Razdeli po" izberimo "Gruča".
- Primerno nastavimo Širina koša.
Porazdelitve kažejo, tako kot vedno, število držav, katerih spremenljivka (tokrat Bruto nacionalni dohodek) leži v določenem intervalu. Ker smo jih razdelili po gručah, pa vidimo tudi, koliko držav iz posameznega intervala pripada določeni gruči.
Katera država z BND med 40.000 in 45.000 je v 'rdeči' gruči? Odgovor poskusi dobiti s pomočjo Porazdelitev (in morda, še enega gradnika)
Poigrajmo se še malo.
Primerjajte 'afriško' gručo z 'razvito'. Po kateri spremenljivki se najbolj razlikujeta?
V prejšnjem poglavju smo izvedeli, kako sestaviti gruče, kako razumeti drevo (ki mu pravimo dendrogram) in kakšne so omejitve postopka. Tu smo pogledali, kako analizirati dobljeno gručenje. Spoznali smo le preprosti kombinaciji s škatlo z brkami in s porazdelitvami. Na podoben način ga lahko povezujemo tudi z drugimi gradniki, vendar boste to odkrivali sami. Zdaj moramo namreč naprej.
Poglavje 4: Je to res gručenje?!
... ko končno naredimo gruče, ne drevesa.
Kar smo počeli doslej, sploh ni bilo gručenje. Od gručenja bi pač pričakovali gruče, ne drevesa, ne? No, kaj pa je bila potem tista "afriška gruča", ki smo jo primerjali z "razvitejšo"? Ali pa "bolj razvita", ki smo jo z "manj razvito"? Saj to. "Razvitejša gruča" se je delila naprej na "bolj" in "manj" razvito. Ves čas delamo s hierarhijo, ne z nekimi "dokončno določenimi" gručami.
V tem ni težava, temveč lepota hierarhičnega gručenja. Gručenje, ki ga dobimo, je, vemo, odvisno od tega, kako se ga lotimo. Obstajajo različne definicije razdalj med objekti (evklidska, Manhattanska in še deset drugih), ter različne definicije razdalj med gručami (minimalna, povprečna, maksimalna, Wardova). Da o tem, da je vse skupaj odvisno od tega, katere spremenljivke uporabimo, niti ne govorimo. In, ja, odstranimo Irsko, pa se lahko Slovenija znajde v čisto drugi družbi.
Skratka. Gručenje ni nekaj absolutnega, zato je kar dobro, da si lahko ogledamo drevo in na podlagi drevesa določimo gruče "po občutku".
Celo drevo je takšno.
Koliko gruč vidimo v njej? V osnovi dve, ne? Lahko pa prerežemo malo nižje (no, malo bolj desno) in se delamo, da imamo tri ali štiri.
Trak nas dendrogramom kaže razdalje med gručami, vendar je njegova razlaga odvisna od tega, katero definicijo razdalje uporabimo.
V gradniku Hierarhično gručenje lahko določamo mesto, na katerem "prerežemo" dendrogram, tako da klikamo po traku nad njim ali premikamo črto z miško. Druga možnost je, da eksplicitno določamo število gruč.
Zdaj lahko (končno) pokažemo tudi, zakaj nam je od vseh definicij razdalj med gručami najbolj všeč Wardova.
Navadno le z njo dobimo lepo drevo z jasno ločenimi gručami. Z ostalimi si pogosto nimamo kaj pomagati, saj ne vemo, kje odrezati. Poleg tega je pri nekaterih, recimo pri minimalni razdalji med gručami, gručenje pogosto videti tako, da začne z najbližjim parom, potem pa v to -- eno samo, stalno naraščajočo gručo -- dodaja nove in nove objekte.
Tako dobljene gruče lahko pogledamo tudi na zemljevidu.
V Hierarhično gručenje povečujte število gruč z izbirnikom na levi strani gradnika. Na koliko gruč je potrebno razdeliti države, da se zahodnoevropske države ločijo od vzhodnoevropskih?
Poglavje 5: Poimenovanje
... v katerem se ne zgodi nič dramatičnega, vendar je koristno, saj nas nauči po- oziroma pre-imenovati spremenljivke in njihove vrednosti.
Razdelimo države v tri gruče.
Tri gruče se imenujejo C1, C2 in C3. V sedanjih, politično korektnih časih, je to morda edino pravilno. V starih časih, ko se je bobu še smelo reči bob, pa smo govorili o državah, ki so "razvite", "v razvoju" ali "nerazvite". Pa jih tvegajmo tudi tu poimenovati tako.
Beseda domena se v programu Orange nanaša na opis podatkov, torej na imena spremenljivk, njihove tipe (številska, kategorična, časovna, besedilna) in, v primeru kategoričnih, nabor in imena možnih vrednosti. Če želimo spremeniti kaj od tega, uporabimo gradnik Uredi domeno.
Gradnik Uredi domeno bomo postavili na izhod gradnika Hierarhično gručenje. Naslednje gradnike (v tem primeru Barvni zemljevid, Škatlo z brki in Porazdelitve) prevežemo tako, da bodo dobivali podatke iz Uredi domeno.
V Uredi domeno na levi strani poiščemo spremenljivko Gruča. Na desni strani jo bomo preimenovali v Skupina (brez posebnega razloga - samo zato, ker lahko) in nato preimenovali C1, C2 in C3. To storimo tako, da dvokliknemo vrednost in vpišemo novo ime. Katero ime pripada kateri gruči, razberemo iz zemljevida. Poleg tega lahko spremenimo tudi vrstni red, tako da izberemo vrednost in jo premikamo z ikonicama s puščicama gor in dol, ki se nahajata pod seznamom vrednosti.
Spremembe moramo potrditi s tipko Potrdi.
Barvni zemljevid je prej kazal vrednost spremenljivke Gruča. Ker smo jo preimenovali in je torej ne najde več, zdaj kaže vrednost neke druge spremenljivke. Da dobimo enako sliko kot prej, poiščemo spremenljivko Skupine.
Tudi gradnika Škatla z brki in Porazdelitve sta zdaj, ko namesto C1, C2 in C3 vsebuje razumljivejše opise skupin, uporabnejša.
Poglavje 6: Če bi bil svet ploščat
... v katerem ugotovimo, da gručenje ni dovolj, zato postavimo risanje zemljevidov na glavo: namesto, da bi iz zemljevida izračunali razdalje, iz razdalj izračunamo zemljevid.
Maribor je praktično enako daleč od Celja in od Velenja: zračna razdalja do obeh je 46 km. Celje in Velenje sta si dejansko kar blizu: razdalja med njima je 18 km.
Ptuj pa je relativno blizu Maribora: med njima je 22 km (zračne razdalje), medtem ko je od Ptuja do Celja 50 km, do Velenja pa 58 km.
Štajerci v gornjih dveh odstavkih niso izvedeli veliko novega, pa tudi povprečno izobražen Primorec ima v glavi sliko: Maribor zgoraj desno, Celje spodaj levo, Velenje nekje nad Celjem (samo malo levo) in Ptuj desno spodaj od Maribora.
Kakšno sliko pa si ustvarite ob tem? Kakšna je relacija med temi irskimi mesti? Katero je bližje katerega?
Kilkenny | Carlow | Galway | Dublin | |
Kilkenny | 33 | 138 | 105 | |
Carlow | 33 | 150 | 73 | |
Galway | 138 | 150 | 187 | |
Dublin | 105 | 73 | 187 |
Na zadnje vprašanje seveda lahko odgovorimo, Kilkenny in Carlow sta si blizu, Galway in Dublin sta oddaljena ... cele slike pa nimamo. Aja, glej no, če seštejemo razdalji od Kilkennyja do Carlowa (33) in od Carlowa do Dublina (73), dobimo 106, kar je skoraj enako razdalji od Kilkennyja do Dublina (105). Torej je Carlow skoraj natančno na črti med Kilkennyjem in Dublinom - nekako na tretjini poti.
Da dobimo pravo predstavo, očitno potrebujemo zemljevid. Ga znamo narisati? Znamo. Najprej narišemo, recimo, trikotnik Galway - Kilkenny - Dublin s stranicami 138, 105 in 187 (v ustreznem merilu). Nato dodamo še Carlow, tako da bo 33 in 73 oddaljen od Kilkennyja in Dublina. Slednje je možno storiti na dva načina (Carlow je lahko znotraj prvega trikotnika ali izven njega); pravi je tisti, pri katerem je razdalja med Galwayem in Carlowom enaka 150.
Ne le, da bomo na ta način dobili zemljevid, ki je obrnjen v neko poljubno smer: lahko je tudi prezrcaljen. Kot da bi narisali zemljevid Slovenije, v katerem se vse razdalje ujemajo, pa tudi Jesenice so zgoraj in Kočevje spodaj, vendar je Lendava na levi in Piran na desni.
Je to pravilno? V bistvu je. Samo - kdor je že kaj hodil po irskem, ve, da je Galway nekoliko severno od Dublina, tule pa ... No, kdo pa je rekel, da je ta zemljevid obrnjen tako, da je sever zgoraj? Nihče, odgovori omenjeni poznavalec Irske, vendar bi bilo to normalno, ne? Da, bilo bi, vendar smo zemljevid rekonstruirali iz podatkov o razdaljah, iz česar pač ne moremo razbrati orientacije. Ne gre, pri najboljši volji. Sitnež (pravzaprav si kar lahko predstavljamo kake jezikavega dijaka) pripomni, da je to itak brez zveze, ker lahko pogledamo v pravi zemljevid. Čemu naj bi služilo sestavljanje zemljevidov iz razdalj?!
Temu. Recimo, da so to razdalje med državami.
Vemo, niso. To so "razdalje" v smislu razlik v ekonomski razvitosti. A vseeno, bi bilo možno narisati "zemljevid", v katerem bi razpostavili države tako, da bi razdalje med njimi ustrezale različnostim v družbenoekonomskem razvoju?
Matematiki že godrnjajo, za začetek morda kaj o neki "trikotniški neenakosti". Pomirili jih bomo čez par odstavkov; dotlej naj prizanesljivo potrpijo.
Da, na podoben način kot prej. Rezultat bi bil takšen.
Preveč držav, preveč gneče. Vzemimo le evropske države.
Čemu ustrezajo velikost točk (ne velikosti držav ali kakemu podobnemu podatku) in kaj pomenijo povezave med državami, bomo izvedeli malo kasneje.
Večrazsežnostno lestvičenje je (preveč) dobesedni prevod angleškega multidimensional scaling, ali, s kratico, MDS.
Preden se lotimo razlage zemljevida in utemeljevanja, zakaj je uporaben - in pogosto tudi boljši od gručenja - pa ste na vrsti vi: naložite podatke, izberite ameriške države, izračunajte razdalje in narišite zemljevid. Kako izbrati ameriške države, upam, še znamo. (Podatke zlijte s podatki iz celine.xlsx) Zemljevid pa narišete z gradnikom s skrivnostnim imenom večrazsežnostno lestvičenje. Sestaviti bo torej potrebno nekaj takšnega.
Katera ameriška država, katere ime ima štiri črke, odstopa od ostalih?
Poglavje 7: Živalsko drevo
... ko prvič srečamo strojno učenje.
Podatke so za demonstracije strojnega učenja pripravili na Carnegie Melon University. Delitev na živalske vrste je nekoliko čudna (tudi žuželke so nevretenčarji), pa tudi nekatere spremenljivke so nerodne. Ribe, recimo, dihajo, vendar pač ne s pljuči.
Tokrat začnimo s praznim platnom in novimi podatki. Uporabimo Zbirke podatkov, naložili pa bomo podatke Živali. Ti vsebujejo opise 100 različnih živali. Podatke odprimo v tabeli.
"Običajne spremenljivke" so v angleščini attribute, feature, independent variable - odvisno od tega, ali o njih govorimo v strojnem učenju, medicini, statistiki...
Ti podatki so drugačni od podatkov, s katerimi smo delali doslej: vsebujejo novo "vlogo" spremenljivk. Poprej smo imeli "običajne spremenljivke", katerih vrednosti smo raziskovali v škatlah z brki, histogramih in razsevnih diagramih ter jih uporabljali v izračunih, recimo pri računanju razdalj. Poleg tega smo imeli (ne da ti posebej govorili o tem) meta spremenljivko, ime države. Meta spremenljivke nosijo dodatno informacijo; pripišemo jo, recimo, k točkam v večrazsežnostnem lestvičenju, ne uporabljamo pa je pri računanju.
"Ciljna spremenljivka" je v angleščini target, outcome, class, dependent variable...
Tu, v teh podatkih, običajne spremenljivke opisujejo lastnosti živali: je kosmata, pernata, vali jajca, daje mleko, leti in tako naprej. Meta spremenljivka je ime živali: medved, merjasec, bivol... Spremenljivka "Vrsta" pa je ciljna spremenljivka. Ciljna spremenljivka je spremenljivka, katere vrednost bi radi napovedali iz ostalih, običajnih spremenljivk. Z "napovedati" ne mislimo nujno napovedovanja nečesa, kar se ima zgoditi v prihodnosti (v smislu vremenske napovedi), temveč v smislu izračunavanja, določanja njene trenutno neznane vrednosti. V tem konkretnem primeru so živali razdeljene v različne "razrede", kot bi se izrazili v strojnem učenju, in naloga je iz lastnosti živali "napovedati", v kateri razred sodi. Za vse živali v tej tabeli je razred že znan; model potrebujemo zato, da bi z njim znali pravilno uvrstiti živali, na katere bi naleteli v prihodnosti. Če je primerne oblike, nam model lahko razodeva tudi vzorce v podatkih, recimo, kaj je tipično za sesalce in kaj za dvoživke.
Takšnim modelom rečemo napovedni modeli. Z njimi se ukvarjajo v statistiki in strojnem učenju. Spoznali jih bomo več, z različnimi nameni uporabe in lastnostmi. Ti modeli predstavljajo velik del tega, čemur danes rečemo umetna inteligenca. Uporabljamo jih lahko za napovedovanje učinkovitosti zdravil, prepoznavanje obrazov, športnih rezultatov, ... pravzaprav vsega.
Sestavljanju napovednih modelov rečemo "nadzorovano učenje" (supervised learning). Primer "nenadzorovanega učenja" (unsupervised learning), kjer nimamo vnaprej predpisane ciljne spremenljivke, pa je gručenje.
Napovedne modele lahko sestavljamo ročno, recimo s sklepanjem od splošnega h konkretnemu. Vremenoslovci poznajo fiziko in vedo povedati, da bo nižji pritisk navadno prinesel padavine. Lahko pa jih sestavljamo z opazovanjem, kakor stori postojnski kmet, ki se je naučil (ali pa so se naučili njegovi predniki), kaj običajno sledi, če ima Nanos kapo. V slednjem primeru gre za sestavljanje modela na podlagi podatkov. Kadar to počne stroj, računalnik, temu rečemo strojno učenje.
Začnimo torej z živalmi. Naložite jih v Porazdelitve.
Katere živalske vrste nimajo hrbtenice?
Obljubili smo strojno učenje. Računalnikova naloga je sestaviti model, s katerim uvrsti žival v enega od sedmih razredov. Lahko bi preveril vseh 16 lastnosti in ugotovil, da mu podatek o tem, ali ima žival hrbtenico ali ne, loči žuželke in nevretenčarje od ostalih.
A delo s tem ni končano. Takšen model lahko pove le, ali gre za žuželko-ali-vretenčarja ali pa za kaj drugega. Vsako od teh skupin mora še razdelati. Recimo, da se najprej posveti prvim.
V Porazdelitve s klikom na ustrezen stolpec (oz. skupino stolpcev) izberi živali brez hrbtenice. Podatke pošlji v nov gradnik porazdelitve. Katera izmed spremenljivk - razen števila nog - skoraj brez napake (torej: le z dvema napakama) loči žuželke od nevretenčarjev?
Enako lahko seveda stori računalnik. Sprehodivši se prek spremenljivk odkrije, tako kot smo odkrili zgoraj, s katero bo kolikor toliko ločil med tema razredoma. Takšen model bo torej ločil žuželke od vretenčarjev in od ostalih. Le pri dve žuželkah, ki ne znata letati, se bo zmotil. To napako lahko odpravi tako, da poišče spremenljivko, po kateri se tidve žuželki razlikujeta od nevretančarjev. Lahko pa predpostavi, da gre za napako v podatkih ali kako posebnost, s katero se nima smisla ukvarjati.
Nato se posveti preostalim, se pravi sesalcem, ribam, dvoživkam, plazilcem in mehkužcem. Lahko bi jih razdelil, recimo, glede na to, ali dihajo (ribe) ali ne (ostali). Ali pa glede na to, ali imajo perje (ptice) ali ne...
Zdaj pa dovolj ugibanje. Prepustimo računalniku, da zares sestavi celoten model, od začetka do konca.
Modelu, kakršnega smo (vsaj miselno) sestavljali zgoraj, rečemo klasifikacijsko drevo (classification tree). Klasifikacijsko zato, ker klasificira, deli v razrede. Drevo pa zaradi oblike, saj začetno skupino z novimi in novimi pogoji delimo v vedno manjše skupine.
Gradnik, ki sestavi drevo, se imenuje Drevo. Vendar ga le sestavi in ponudi na izhodu. Da bi si drevo ogledali, potrebujemo še Drevogled.
Gradnik Drevo pustimo za zdaj pri miru. Odprimo raje Drevogled.
Že začetek je drugačen kot prej. Takole pravi: najprej preveri, ali dotična žival daje mleko. Če, potem gre za sesalca. Sicer pa preverimo, ali ima perje. Potem je ptica. Sicer pa jih bomo ločili glede na to, ali imajo hrbtenico ali ne. Pri tistih z njo, preverimo, ali imajo plavuti. Če jih imajo, so ribe, sicer pa nas zanima še, ali so vodne (dvoživke) ali ne (plazilci). Živalim brez hrbtenice pa je potrebno prešteti noge. Tiste z dvema ali šestimi so žuželke ali nevretenčarji - odvisno od tega, ali gre za vodno žival ali ne. Tiste s kakim drugim številom nog pa so nevretenčarji.
Tako smo spoznali prvi primer strojnega učenja in prvi klasifikacijski model. V osnovi razumemo tudi, kako ga računalnik sestavi: s postopnim izbiranjem spremenljivk, ki nam kaj povedo. V naslednjem poglavju pa malo tehnikalij.
Poglavje 8: Računalnik sestavi drevo
... ko zares razložimo algoritem gradnje klasifikacijskih dreves.
Primer iz prejšnjega poglavja je nekoliko zavajajoč: v njem dodajamo primere živali in računalnik jim, domnevno, sproti prilagaja drevo. Postopek gradnje smo torej predstavili kot, nekako, inkrementalen.
V resnici ne gre tako. Algoritem za gradnjo klasifikacijskih dreves dobi vse podatke naenkrat. V našem primeru torej 100 živali, ki spadajo v enega od sedmih razredov. Zmeda, torej. Nekaj plazilcev, nekaj žuželk, nekaj sesalcev ... Algoritem med vsemi spremenljivkami poišče tisto, ki razdeli podatke v skupine, ki so čim manj mešane. V prvem koraku gradnje živalskega drevesa torej vzame podatek o tem, ali žival daje mleko ali ne, saj to postavi na eno stran sesalce (hura, popolnoma čista skupina), na drugo vse ostale. Za prvo skupino je s tem poskrbljeno, z drugo se ukvarja naprej: spet poišče najbolj uporabno spremenljivko in razdeli na dve (ali, načelno, če ima spremenljivka več različnih vrednosti, na več) skupin, ki so "čistejše" od prvotne. Nekatere skupine morda že vsebujejo le primere iz enega samega razreda; tiste, ki jih ne, deli naprej.
Celoten algoritem je torej takšen:
Če je skupina premajhna za nadaljnjo delitev ali pa je
že (primerno) čista, smo končali.
Sicer:
- Poišči najuporabnejšo spremenljivko.
Če ni primerne spremenljivke, smo končali.
- Sicer razdeli skupino glede na vrednost te spremenljivke.
- Ponovi ta postopek za vsako skupino posebej.
Najtežavnejša reč je "najuporabnejša spremenljivka". Kako izmeriti "uporabnost spremenljivke"? Spomniti se moramo, kaj je naš cilj: sestaviti takšno drevo, ki bo s čim manj vprašanji (spremenljivkami) razdelil podatke v čim bolj enotne skupine. Ena možna definicija "uporabnosti spremenljivk" bi bila takšna: če naključno izžrebamo dva primera in se zgodi, da imata isto vrednost te spremenljivke, želimo, da sta čim bolj verjetno tudi v istem razredu. Kot primer lahko vzamemo spremenljivko "daje mleko". Če naključno izžrebamo dve živali in obe dajeta mleko, sta gotovo tudi v isti skupini (sesalec), če pa obe ne dajeta mleka, no, potem je verjetnost, da sta v isti skupini pač manjša. Če namesto mlekodajanja izberemo kako drugo, manj uporabno spremenljivko, pa to, da imata živali isto vrednost te spremenljivke, ne bo bistveno povečalo verjetnosti, da gre za živali iste vrste.
Mera, ki smo jo opisali, je Ginijeva nečistoča (včasih ji rečemo tudi Ginijev indeks, vendar se to ime običajneje uporablja za neko drugo reč). Ginijeva nečistoča je le ena od mnogih mer uporabnih za izbor spremenljivk. Včasih je boljša ena, včasih druga; Orange uporablja delež informacijskega prispevka.
Če gradnjo drevesa ustavimo, še preden razdelimo vse, kar je možno razdeliti, je drevo manjše. Ustavljanju gradnje zato rečemo rezanje (pruning).
Kaj pa ostale komponente algoritma? Te so namenjene njegovemu ustavljanju: napisali smo če je skupina premajhna ali primerno čista ali če ni primerne spremenljivke. Ostale nastavitve so povezane z ustavljanjem gradnje. Postopek, kot smo ga opisali v prejšnjem poglavju, bi delil skupine, vse dokler ne bi prišel do čistih skupin. Predstavljajmo si primer iz medicine, kjer zdravnik nekomu pove, da je zdrav in naj gre domov popit kakšne kamilice. Pa človeka zanima, kako in zakaj zdravnik to ve in ta mu potrpežljivo razloži, da je uporabil klasifikacijsko drevo. "*Da, gospod, moj model pravi, da ste zdravi, ker nimate holesterola, ker je vaš največji utrip med 150 in 155, imate rahlo povečan sladkor, rdeče lase in ste stari med 50 in 52 let. Ter ste doma iz okolice Bistrice ob Sotli." Tako nagovorjen gospod bi zdravnika upravičeno vprašal, koliko takih oseb je pravzaprav videl. Zdravnik bi pojasnil celoten postopek gradnje dreves; postopek deli v vedno manjše skupine, dokler niso le-te čiste. "Že, že," bi gospod tečnaril še naprej, "ampak mene zanima, koliko oseb je bilo v tej skupini." Zdravnik bi pojasnil, da ena sama. "Vendar je bila zdrava."
Takšne odločitve bi bile očitno nezanesljive. Zato skupin, ki so že dovolj majhne, ne delimo naprej. Orange privzeto ne deli skupin z manj kot pet primeri. A četudi ima skupina, recimo, dvajset primerov, se lahko zgodi, da jo bo neka spremenljivka razdelila v dve skupini, od katerih bo ena vsebovala 19 primerov, druga pa enega. Tudi tega nočemo, zato določimo tudi minimalno velikost skupine. Privzeta vrednost v Orangeu je 2.
Napakam v podatkih rečemo šum (noise), prilagajanju šumu pa "pretirano prilaganje podatkom" (overfitting).
Kaj pa tole: imamo skupino s 50 primeri. Deliti jo, torej smemo. Med njimi pripada 48 primerov enemu razredu in le dva ostalemu. Nadaljujemo gradnjo? Gvišno ne. Bogve, kaj je narobe s tema dvema. Morda so jima pač narobe določili razred. Gre za ptiča, vendar se je nekdo zmotil in napisal žuželka. Ali pa je napaka v podatkih kje drugje. Morda imata perje, otroci pa so zmotno zapisali, da gre za dlake, pa sta se reveža znašla med tujci. Ne le, da nima smisla zahtevati, da postopek gradnje drevesa upošteva tudi tadva primera: to bi bilo celo narobe. Tadva primera sta preprosto napačna in drevo, ki bi poskrbelo zanju, bi bilo napačno. Zato je smiselno postaviti neko mejo čistoče skupin. Če (kakor je privzeta vrednost v Orangeu) že 95 % primerov pripada istemu razredu, gradnjo ustavimo.
Še ena omejitev nam je ostala. Za večino mer je bilo poskusno ugotovljeno - in za mnoge teoretično razloženo -, da imajo raje spremenljivke z več možnimi vrednostmi, tudi kadar v resnici nosijo enako ali celo manj informacij kot spremenljivke z manj vrednostmi. Če imamo, na primer, podatek o barvi las osebe (svetla, temna, črna, rdeča, siva) bo večina mer raje izbrala to spremenljivko, tudi kadar so podatki umetno sestavljeni tako, da nosi enako ali manj informacij kot kaka binarna spremenljivka, na primer, ali oseba nosi očala. To je še posebej nerodno, ker na ta način razpršimo podatke v pet podskupin, zato postanejo skupine kmalu premajhne za nadaljnjo delitev, čeprav so nemara še vedno mešane.
Od postopka gradnje zato navadno zahtevamo, da sestavi binarno drevo. Če ima spremenljivka več vrednosti, naj jih pač smiselno združi. Če gre za barvo las, bo mora dal v eno vejo temnolasce in sivolasce, v drugo pa ostale. "Smiselna združitev" bo pač tista, ki bo dala najbolj čiste podskupine. Takšna drevesa so pogosto tudi bolj razumljiva in smiselna. Če sestavljamo drevo za prepoznavanje Ircev, bo pač smiselno dati rdečelasce na en kup in ostalolasce na drugega.
V gradniku v Orangeu najdemo, vse, kar smo našteli zgoraj. Privzete nastavitve običajno dobro delujejo, pri pouku pa jih bomo včasih spremenili.
Če podatki ne vsebujejo napak, klasifikacijski problem pa omogoča čisto klasifikacijo (takšen primer je aktivnost Štirikotniki, kjer ločimo štirikotnike na rombe, paralelograme, deltoide in tako naprej glede na to, kakšni so koti, dolžine stranic idp), lahko rezanje izključimo.
Kadar podatki vsebujejo veliko napak, na primer zato, ker so jih zbirali učenci in so bodisi napačno določali razrede ali pa narobe beležili vrednosti spremenljivk, bomo kriterije za rezanje morda poostrili. Enako bomo storili tudi, kadar je klasifikacijski problem takšen, da je natančna klasifikacija pretežka in bi se model zgolj prilagajal naključnim zvezam v podatkih. V tem primeru bi brez rezanja dobili ogromna drevesa. Običajno zadošča zaostriti enega od kriterijev; v praksi dobro deluje kar povečevanje minimalnega števila primerov v listih.