• Ei tuloksia

Käytetyt teknologiat .1 Python

Toteutin insinöörityön Python-ohjelmointikieltä käyttäen. Python on syntaksil-taan yksinkertainen kieli, ja se tarjoaa mahdollisuuksia moneen erilaiseen tar-koitukseen. Kolme yleistä ohjelmoinnin kohdetta, joissa Python-kieli on käy-tössä, ovat web-kehitys, tietojenkäsittelytieteet sekä skriptien luominen eli tehtä-vien automatisoiminen [16]. Pythonin ero moniin muihin ohjelmointikieliin verrat-tuna on esimerkiksi se, että siinä ei välimerkkinä käytetä puolipistettä vaan koo-dirivit erotetaan toisistaan rivivaihdoilla. Pythonin funktioiden kutsut ovat usein lähellä luonnollista kieltä ja näin ollen intuitiivisesti helpommin pääteltävissä kuin esimerkiksi usein on Java-kielessä.

Nykyaikana Python-kielen yksi suosituista käyttötarkoituksista on tietojenkäsitte-lytieteen (engl. Data Science) parissa työskennellessä. Python soveltuu hyvin tietoaineistojen käsittelyyn, analysoimiseen sekä koneoppimisen ongelmien rat-kaisuun.

Python ohjelmointikielellä voidaan ohjelmoida usean eri ohjelmointiparadigman mukaan. Ohjelmointiparadigmalla tarkoitetaan ajattelutapaa ja tyyliä käsitellä ohjelmaa ja lähestyä ratkaistavia ohjelmoinnin tehtäviä. Ohjelmointiparadigmat

eivät ole toisiaan poissulkevia vaan ohjelmointikieli voi toimia usean paradig-man mukaan saparadig-manaikaisesti. Python-ohjelmointikieltä voidaan käyttää olio-oh-jelmoinnissa, funktionaalisessa ohjelmoinnissa sekä proseduraalisessa ohjel-moinnissa. [17; 18.]

Olio-ohjelmoinnissa ohjelma jakautuu erilaisiin luokkiin, ja luokkiin määritellään niille tarvittavat metodit, jotka määrittelevät, mihin kaikkeen ohjelman toimintaan luokka voi osallistua. Proseduraalisessa ohjelmoinnissa ohjelma rakentuu lopul-lisen tavoitteen perusteella. Tämä tavoite pyritään saavuttamaan pieni askel kerrallaan. Funktionaalisessa ohjelmoinnissa pyritään ohjelman toimintaa to-teuttamaan matemaattisten funktioiden avulla. [19; 20.]

5.2 Python-kirjastot

Insinöörityön toteutuksessa hyödynnettyjen Python-kirjastojen käyttötarkoitus ja keskinäinen suhde on havainnollistettu seuraavassa kuvassa 8.

Kuva 8. Insinöörityössä käytetyt Python-kirjastot.

5.2.1 Pandas

Pandas on Python-kielelle tehty kirjasto, joka tarjoaa monipuolisesti työkaluja tiedonkäsittelyyn. Usein Pandas-kirjastoa käytettäessä tietoaineistosta tehdään DataFrame-objekti, jossa tieto on taulukon muodossa. DataFrame-objekti voi-daan pandasin avulla tehdä esimerkiksi CSV-tiedostosta tai lukemalla JSON-dataa. Pandas-raaka-aineiston lukemista ja DataFrame-objektiksi muuttamista varten metodit read_csv() ja read_json(). Pandasin avulla on myös mahdollista esimerkiksi tarkastella käsiteltävänä olevaa tietoaineistoa ja selvittää tärkeitä ar-voja, kuten keskiarvo, moodi, mediaani, minimi tai maksimi. Pandas myös tar-joaa tapoja käsitellä puuttuvaa tietoa tietoaineistossa, tiedon korvaamisen tai tietorivien pudottamisen avulla. [21.]

Insinöörityössä käyttämäni tietoaineisto on CSV-tiedosto ja pandasin avulla tein siitä DataFrame-objektin, jonka jälkeen kirjastoa hyödyntämällä oli mahdollista

tarkastella tietoaineistoa ja tehdä tarvittavia toimenpiteitä puuttuvan tiedon kanssa. Tietoaineisto oli alun perin järjestyksessä, jossa kaikki positiivisen koh-demuuttujan sisältävät rivit olivat alkupäässä ja näiden jälkeen vasta kaikki ne-gatiiviset tapaukset. Ongelmien välttämiseksi myöhemmissä vaiheissa, kuten tietoaineiston jakamisessa koulutus- ja testaamisaineistoihin sekä mallin koulut-tamisessa, hyödynsin sample()-metodia, joka palauttaa tietoaineiston rivejä en-nalta määrätyn määrän satunnaisessa järjestyksessä. Tällä tavoin toimimalla saatiin varmistettua positiivisten tapausten esiintymisen satunnaisuus tietoai-neistossa.

Aluksi yritin puuttuvia arvoja sisältävien rivien pudottamista hyödyntäen

dropna()-metodia. Kuten aiemmin jo raportissa totesin, havaitsin, että tiedon pu-dottamisella oli negatiivinen vaikutus myöhemmin neuroverkkomallia koulutetta-essa, sillä pudottamalla menetettiin paljon positiivisen kohdemuuttujan arvon si-sältäviä rivejä. Toinen lähestymistapa käsitellä puuttuvia arvoja oli siis näiden arvojen täyttäminen. Puuttuvien arvojen täyttämisen toteutin käyttämällä fillna()-metodia parametrin arvolla ”0”. Näin puuttuvien arvojen tilalle tietoaineistoon saatiin arvo ”0”.

5.2.2 Matplotlib

Matplotlib on Python-kirjasto, joka tarjoaa työkalut datan visualisoimista varten erilaisten kuvaajien muodossa. Hyödynsin matplotlib-kirjastoa insinöörityössäni muun muassa havainnollistamaan tietoaineiston eri arvojen jakautumista sekä esittämään neuroverkkomallin oppimisen etenemistä. Erilaisia kuvaajia, joita matplotlibin avulla voi tehdä, ovat esimerkiksi erilaiset pylväs- ja ympyrädia-grammit, viivakaaviot sekä funktioiden kuvaajien esitykset.

Kuvaajien tekeminen matplotlib-kirjaston avulla tapahtuu käyttämällä plot()-me-todia. Metodille annetaan parametriksi muuttuja/muuttujat, joista kuvaaja halu-taan tehdä. Metodille voidaan myös kertoa, minkä tyylinen kuvaaja haluhalu-taan saada aikaan tai määritellä kuvaajan ominaisuuksia tarkemmin. Kuvaajan kokoa on myös mahdollista säädellä muuttamalla figsize-parametrin arvoa.

5.2.3 Scikit-learn

Scikit-learn on Python-kielelle tehty kirjasto, joka on tarkoitettu tiedonkäsittelyyn erityisesti koneoppimisen näkökulmasta. Scikit-learn-kirjastoa on mahdollista hyödyntää esimerkiksi monissa eri tyylisissä koneoppimisen ongelmissa ja sillä voidaan luoda eri ongelmatyyppien vaatimia malleja ennustamaan lopputulosta.

Scikit-learn-kirjastoa voidaan hyödyntää esimerkiksi luokittelu-, regressio- sekä klusterointiongelmissa. Kirjastosta löytyy myös monipuolisesti työkalut tiedon esikäsittelemiseen ja tarkastelemiseen. [22.]

Insinöörityössä hyödynsin scikit-learn-kirjastoa tietoaineiston esikäsittelyssä sekä tietoaineiston jakamisessa koulutus- ja validointiaineistoon. Tietoaineiston esikäsittelyssä hyödynsin train_test_split()-metodia sekä preprocessing.scale()-metodia.

Train_test_split()-metodilla tietoaineisto saadaan jaettua koulutus- ja validointi-aineistoon. Koulutusaineistoa hyödynnetään neuroverkkomallin kouluttamisessa ja validointiaineistolla testataan mallin suoriutumista ennustamisen tarkkuuden osalta koulutuskierrosten välillä. Train_test_split()-metodille annetaan paramet-reinä tietoaineisto, joka halutaan jakaa, sekä haluttu suhde jakamiseen. Jakami-sen suhteen määrittely tapahtuu antamalla arvo joko parametrille ”test_size” tai

”train_size”. Parametrin arvon tulee olla välillä 0–1. Arvo ”0” tarkoittaa 0 % ai-neistosta ja arvo ”1” tarkoittaa 100 % aiai-neistosta. Insinöörityön toteutuksessa annoin metodin parametrille ”test_size” arvon 0,3 jolloin siis 30 % aineistosta on varattu validointiin ja 70 % jää neuroverkkomallin kouluttamista varten. Tietoai-neiston sekoittaminen olisi myös ollut mahdollista toteuttaa tässä vaiheessa an-tamalla parametrille ”shuffle” arvo ”True”, mutta olin sekoittanut tietoaineiston jo aiemmin. [23.]

Tietoaineiston jakamisen jälkeen hyödynsin tietoaineiston standardoimista var-ten preprocessing.scale()-metodia. Tietoaineiston muuttujien skaalaaminen on tärkeää, sillä ilman tätä eri muuttujien vaihteluvälit saattavat erota toisistaan huomattavasti. Esimerkiksi muuttujan ”work-type” arvot ovat välillä 0–4, kun

taas muuttujan ”avg_glucose_level” arvot ovat välillä 55,12–271,74. Muuttujien skaalaamatta jättäminen vaikuttaa negatiivisesti neuroverkkomallin kouluttami-seen joko hidastaen oppimista tai tehden etenemisestä epävakaata [24]. Insi-nöörityötä tehdessäni tein aluksi virheen ja skaalasin koko tietoaineiston ennen kuin se oli jaettu erikseen kouluttamista ja validointia varten. Tämä johti niin kut-suttuun tiedon vuotamiseen (engl. data leak), joka tarkoittaa, että mallin koulut-tamiseen ei vaikuta pelkästään koulutusaineisto vaan vaikutteita tulee myös muualta [25]. Tämä johtui käytännössä siitä, että aineistoa skaalatessa uusien arvojen laskemiseen hyödynnetään kaikkia aineiston arvoja ja näin ollen, jos ai-neistoa ei ole vielä jaettu, tulevat validointiaineiston arvot vaikuttavat siihen, mil-laisia uusia arvoja koulutusaineistoon tulee. Tämän virheen korjatakseni jaoin aineiston ensin, jonka jälkeen skaalasin erikseen koulutus- ja validointiaineiston.

5.2.4 TensorFlow.keras

TensorFlow-kirjasto on tehty hyödynnettäväksi monipuolisesti erityyppisissä ko-neoppimisen ongelmissa. TensorFlow on käytettävissä usealla ohjelmointikie-lellä. Siitä löytyvät toteutukset Java-, Python-, C++- sekä JavaScript-kielille.

TensorFlow pitää sisällään moduulin, joka on toteutus erillisestä Keras-kirjastosta [26]. Keras on tehty erityisesti neuroverkkojen parissa työskentelyyn ja se on toteutettu Python-ohjelmointikielellä [27]. Kirjaston avulla voidaan luoda, kouluttaa ja arvioida neuroverkkomalleja. Kirjasto tarjoaa myös työkaluja tietoaineiston esikäsittelyyn esimerkiksi luonnollisen kielen ja kuvien parissa työskentelyyn.

Insinöörityön toteutuksessa hyödynsin Keras-moduulia neuroverkkomallien luo-miseen, kouluttamiseen ja sekä ennustustarkkuuden arviointiin. Ennustustark-kuutta arvioin objektin ”history” avulla. Objektiin tallentuu mallin ennustamisen tarkkuus koulutus- sekä validointiaineiston suhteen ja ennustusten virhe jokai-sella koulutuskierrokjokai-sella.

Neuroverkkomallien luominen tapahtuu joko käyttämällä mallin konstruktoria, eli mallista olion luovaa metodia, jolle määritellään malliin haluttavat kerrokset, tai

luomalla ensin tyhjä malli, jolle voidaan myöhemmin lisätä kerroksia add()-meto-dia käyttäen. Mallia luodessa tulee myös päättää, millainen malli halutaan luoda. Insinöörityön toteutuksessa käytetyt mallit on tehty käyttäen Sequential()-metodia. Sequential()-metodilla luoduissa malleissa tieto kulkee mallin läpi ede-ten kerroksesta toiseen järjestelmällisesti.

5.3 Jupyter Notebook

Jupyter Notebook on avoimen lähdekoodin web-sovellus, joka on tarkoitettu monipuolisten, koodia sisältävien, dokumenttien tekemiseen. Jupyter Notebook -sovellusta ei ole tehty niinkään perinteiseen ohjelmointiin, vaan enemmänkin tiedon käsittelyyn ja koneoppimisen ongelmien ratkaisemiseen. Jupyter No-tebookilla tehtyihin tiedostoihin on mahdollista sisällyttää koodia, datan visuali-sointia kuvaajien tai taulukoiden muodossa sekä ohjelman toimintaa tai ratkais-tavaa ongelmaa selittäviä tekstipätkiä. Jupyterin verkkosivuilla kerrotaan ter Notebookin olevan yhteensopiva Chrome-, Safari- ja Firefox-selaimilla. Jupy-ter Notebookin kerrotaan myös tukevan yli 40 ohjelmointikieltä. [28.]

Jupyter Notebookilla tehtyjen ohjelmien toteutukset verrattuna perinteisellä teks-tieditorilla tehtyihin toteutuksiin eroavat siten, että ohjelman koodi voi olla jaet-tuna lohkoihin ja koodin ajaminen tapahtuu lohko kerrallaan (kuva 9).

Kuva 9. Esimerkki koodilohkoista.

Lohkojen vasemmassa yläkulmassa oleva numero kertoo, monentenako lohko suoritetaan ajon aikana. Esimerkkikuvan tapauksessa (kuva 8) lohko 1 suorite-taan siis kolmantenatoista. Lohkon 1 suorittamisen jälkeen seuraavat järjestyk-sessä lohkot 2 ja 3. Lohkossa 1 tietoaineisto jaetaan kouluttamis- ja validointiai-neistoihin sekä skaalataan aineistot. Lohkossa 2 täsmennetään validointiaineis-ton tapausten määrä sekä selvitetään positiivisten tapausten osuus validointiai-neistossa. Lohkossa 3 lasketaan ja tulostetaan prosenttimuotoinen esitys posi-tiivisten tapausten määrästä.

Ohjelman lohkoissa ajamisen etuna on muun muassa se, että ohjelmaan voi-daan tehdä muutoksia ja kokeilla uuden tavan toimintaa ilman, että koko ohjel-maa tarvitsee ajaa uudestaan alusta loppuun. Näin voidaan helposti vaikkapa muuttaa jonkin yksittäisen tulostamisen formaattia tai verrata erilaisten arvojen vaikuttamista neuroverkkomallien suoriutumiseen.

Lohkojen väliin on mahdollista lisätä myöhemmin uusia lohkoja tarpeen mu-kaan. Näin voidaan esimerkiksi tehdä ensin toimiva ohjelma ja lisätä lohkojen

väliin tekstipätkiä kuvaamaan ohjelman toiminnallisuuksia tai kertomaan tar-peellista tietoa vaikkapa ohjelmassa käytetyistä muuttujista. Uudet lohkot voivat myös sisältää ohjelmakoodia ja lisätä jotakin toiminnallisuutta tai niiden avulla voidaan tehdä tarkistuksia vaikkapa tietoaineistoon liittyen, kuten insinöörityön toteutuksessa on tehty. Koodia sisältävien lohkojen välissä olevia tekstilohkoja ei tarvitse suorittaa joka kerta ohjelmaa ajaessa vaan niiden yli hypätään (kuva 10).

Kuva 10. Esimerkki tekstilohkosta.

Tekstilohkojen tekstiä voidaan muotoilla käyttämällä ”Markdown”-merkintäkieltä.

Leipätekstiä voi kirjoittaa lohkoon suoraan tai muotoilla sitä jakamalla tekstiä kappale elementteihin (engl. paragraph). Otsikoita voi tehdä käyttämällä ”#”-merkkiä. Otsikoita voi tehdä usean tasoisia ja taso määräytyy ”#”-merkkien määrästä. Ensimmäisen tason otsikoilla on yksi ”#”-merkki, toisen tason kaksi ja niin edelleen. Kuvassa 10 otsikko ”Attributes” on kolmannen tason otsikko, sen

raaka kirjoitusasu on siis muotoa ”### Attributes”. Markdownilla on myös mah-dollista tehdä esimerkiksi järjestettyjä- (engl. ordered list) ja järjestämättömiä lis-toja (engl. unordered list), taulukoita sekä linkkejä tekstin sekaan lisättäväksi.

[29.]

6 Neuroverkkomallit

Kokeilin insinöörityön toteutuksessa useaa, yli kymmentä, rakenteeltaan eri-laista mallia. Lopullista ennustustulosten vertailua varten jätin kaksi mallia. En-simmäinen malli on erittäin yksinkertainen rakenteeltaan ja toinen malli on en-simmäiseen verrattuna paljon monimutkaisempi. Kummatkin mallit ovat peräk-käismalleja (engl. sequential model), eli mallissa kulkeva tieto etenee aina ker-roksesta seuraavaan ja eteneminen tapahtuu lineaarisesti. Malleissa olevat pii-lokerrokset ovat tiheitä kerroksia (engl. dense layer), eli jokaisesta edellisen ker-roksen neuronista on yhteys (synapsi) jokaiseen seuraavan kerker-roksen neuro-niin.

Kummassakin neuroverkkomallissa on hyödynnetty häipymäkerrosta (engl. dro-pout layer). Häipymäkerros toimii siten, että se ikään kuin sammuttaa ennalta määritellyn määrän neuroneita jokaisella koulutuskierroksella. Näin ollen siis sa-tunnaisesti valitut neuronit eivät ole mukana jokaisella koulutuskierroksella, vaan ne saattavat olla epäaktiivisina. Häipymäkerroksen avulla pyritään vähen-tämään ylisovittamista (engl. over-fitting). Ylisovittaminen on sitä, kun mallin neuronien painojen ja vakioiden arvot optimoituvat ennustamaan koulutusai-neiston tapauksia mahdollisimman hyvin mutta tämän seurauksena muiden ta-pausten, esimerkiksi validointi- tai testiaineiston tapauksessa, heikkenee huo-mattavasti. Tätä selittää muun muassa se, että mallin kouluttamiseen käytetty koulutusaineisto ei välttämättä aina vastaa maailman tilannetta tai mukaile luon-nollisesti esiintyviä jakaumia luotettavasti. Esimerkiksi jos koulutusaineisto sisäl-täisi vain henkilöitä, joiden ikä on tasan 65 vuotta, saattaisi mallin olla hankala

ennustaa luotettavasti henkilöistä, joiden ikä poikkeaisi tästä aineistossa esiinty-västä iästä.

Kummankin neuroverkkomallin syötekerroksen ja piilokerrosten aktivaatiofunk-tiona on käytetty ReLu-askelfunktiota (ReLu ja sigmoidi aktivaatiofunktiot esi-telty kappaleessa 3.2). Ulostulokerroksen aktivaatiofunktiona on käytetty loo-gista funktiota, eli sigmoidia. Ulostulokerroksessa sigmoidin käyttäminen johtuu siitä, että mallin antama lopullinen tulos halutaan numeroarvona nollan ja yhden välillä. Tässä tapauksessa nolla tarkoittaa ”ei aivohalvausta” ja yksi tarkoittaa

”aivohalvaus”. Mallin tuottama desimaaliluku nollan ja yhden välillä ilmaisee siis tavallaan todennäköisyyttä jompaankumpaan tulokseen.

Yksinkertaisen mallin rakenne on seuraavanlainen (kuva 11).

Kuva 11. Yksinkertaisen neuroverkkomallin rakenne.

Yksinkertainen malli siis pitää sisällään syötekerroksen, yhden piilokerroksen, häipymäkerroksen sekä ulostulokerroksen. Piilokerroksella on 64 neuronia. Häi-vekerrokselle on annettu parametriksi arvo 0,2; tämä siis tarkoittaa, että 20 % arvoista ei osallistu meneillään olevaan koulutuskierrokseen. Koulutettavia pa-rametreja, synapsien painoja ja vakiotermejä, on mallilla yhteensä 879 kappa-letta. Koulutettavien parametrien määrä saadaan laskemalla summa kaikkien kerrosten synapsien painojen ja vakiotermien (engl. bias) määrästä. Esimerkiksi

kuvassa 11 olevan mallin syötekerroksessa on 10 neuronia ja piilokerroksessa on 64 neuronia. Tämän tiedon avulla voidaan laskea, että piilokerroksen ja syö-tekerroksen välillä on 10 * 64 synapsia, eli 640 synapsia, ja jokaisella synapsilla on oma paino. Lisäksi jokaisella kerroksen neuronilla on oma vakiotermi, joten vakiotermejä on 64 kappaletta. Näin ollen koulutettavia parametrejä piilokerrok-sella on yhteensä 640 synapsin painoa + 64 vakiotermiä eli 704 kappaletta.

Monimutkaisen neuroverkkomallin rakenne on esitelty kuvassa 12.

Kuva 12. Monimutkaisen neuroverkkomallin rakenne.

Monimutkainen neuroverkkomalli koostuu syötekerroksesta, kolmesta piiloker-roksesta, häipymäkerroksesta sekä ulostulokerroksesta. Ensimmäisessä piilo-kerroksessa on 256 neuronia, toisessa on 128 neuronia ja kolmannessa on 64 neuronia. Monimutkaisen mallin piilokerroksissa on siis yhteensä 448 neuronia, kun yksinkertaisessa neuroverkkomallissa piilokerroksen neutroneita on vain 64 kappaletta. Monimutkaisen neuroverkkomallin häipymäkerroksen parametrin ar-vona on lukuarvo 0,1; eli jokaisella koulutuskierroksella neuroneista 10 % ei osallistu toimintaan. Koulutettavia parametrejä monimutkaisessa mallissa on yh-teensä 44 143 kappaletta. Koulutettavien parametrien kokonaislukumäärä

moni-mutkaisessa mallissa on noin 5022 % verrattuna yksinkertaiseen malliin. Moni-mutkaisessa mallissa koulutettavia parametreja on siis yli 50-kertaisesti yksin-kertaiseen nähden. Koulutettavien parametrien määrä vaikuttaa esimerkiksi sii-hen, kuinka kauan mallin kouluttamisessa kestää. Mitä enemmän parametreja on, sitä raskaampaa laskeminen on ja sitä kauemmin aikaa se vie. Kun malli on monimutkaisempi ja se sisältää useampia kerroksia ja runsaasti neuroneita, voisi olettaa mallin olevan kykenevä ennustamaan aineiston muuttujien arvojen perusteella paremmin kuin yksinkertainen malli. Näin ei kuitenkaan aina ole juuri ylisovittamisesta johtuen.

Neuroverkkomalleja luodessa niille myös määritellään optimoija (engl. optimi-zer) sekä virhefunktio (engl. loss). TensorFlow.keras-moduuli tarjoaa monia eri optimoijia esimerkiksi RMSpropin, Adamin, Adadeltan ja Ftrl:n [27]. Kummassa-kin insinöörityön toteutuksen neuroverkkomallissa on käytetty RMSprop-opti-moijaa. Optimoijan tehtävänä on laskea mallille uusia arvoja synapsien painoille ja vakioarvoille. Optimoijasta riippuen vaihtelee hieman se, millä tavoin uudet arvot lasketaan. Virhefunktiota valittaessa tulee ottaa huomioon, millaisen on-gelman ratkaisemiseen malli on tehty. Esimerkiksi samaa virhefunktiota ei ole mahdollista hyödyntää regressio- ja luokitteluongelmissa. Kummassakin neuro-verkkomallissa on käytetty ”binary_crossentropy” -virhefunktiota sillä se on tar-koitettu hyödynnettäväksi binäärisen ennustamisen ongelmissa eli tapauksissa, joissa ennustuksella on kaksi mahdollista lopputulemaa. Virhefunktiota hyödyn-netään mallin kouluttamisessa siten, että sen arvoa pyritään minimoimaan mal-lia kouluttamalla. Mitä pienempi on virhefunktion arvo, sitä lähempänä mallin ennustukset ovat oikeita arvoja.

7 Tulokset

Neuroverkkomallien ennustustuloksien arvioimisen ja mallien keskinäisen ver-tailun kannalta oleellisia tarkkailtavia parametreja ovat virhefunktion arvo (engl.

loss) sekä ennustusten tarkkuus suhteessa tietoaineiston todellisiin arvoihin (engl. accuracy). Virhefunktion arvoa ja ennustustarkkuutta arvioidaan erikseen

koulutusaineiston ja validointiaineiston suhteen. Näin toimimalla pyritään simu-loimaan mallin hyödyllisyyttä todellisen aineiston ennustamisessa eikä pelkäs-tään koulutusaineiston tapauksiin mukautumisessa. Usein neuroverkkomallien arvioimisessa hyvä tapa arvioida malleja olisi jakaa tietoaineisto kolmeen osaan: koulutus-, validointi- ja testiaineistoon. Testiaineisto olisi aineisto, joka olisi kokonaan irrallaan mallin kouluttamisen vaiheista. Insinöörityön toteutuksen kannalta tämä ei kuitenkaan ollut mahdollista tietoaineiston puutteista johtuen.

Mikäli tietoaineisto olisi ollut laajempi tai edes tasaisemmin jakautunut kohde-muuttujan arvojen suhteen, olisi ollut mahdollista jakaa aineisto kolmeen osaan.

Yksinkertaisen neuroverkkomallin virhefunktion arvolla on laskeva trendi (kuva 13). Sen arvo siis pienenee koulutuskierrosten edetessä.

Kuva 13. Kuvaaja yksinkertaisen neuroverkkomallin virhefunktion arvoista.

Kuvaajasta voidaan havaita virhefunktion arvojen pienenevän niin koulutus- kuin validointiaineiston suhteen koulutuskierroksia eteenpäin mentäessä. Tämä

tarkoittaa siis, että mallin ennustusten ja todellisten arvojen välinen virhe vähe-nee koulutusprosessin edetessä.

Monimutkaisen neuroverkkomallin virhefunktion arvojen kuvaajasta (kuva 14), voidaan havaita, että virhefunktion arvo ei ole laskenut yhtä menestyksekkäästi kuin yksinkertaisen mallin tapauksessa.

Kuva 14. Kuvaaja monimutkaisen neuroverkkomallin virhefunktion arvoista.

Monimutkaisen neuroverkkomallin virhefunktion arvo laskee koulutusaineiston suhteen koulutusprosessin aikana, mutta validointiaineiston suhteen virhefunk-tion arvo ei ole koko ajan laskussa, vaan jossain kohtaa se lähtee nousuun ja saa jopa suurempia arvoja kuin alun perin. Tästä voidaan päätellä mallin kärsi-neen ylioppimisesta, neuronien painot ja vakiotermit ovat siis mukautuneet lii-kaa ennustamaan koulutusaineiston arvoja oikein ja tästä seurauksena neuro-verkkomalli ei ennusta koulutusaineiston ulkopuolisia tapauksia, tässä tapauk-sessa validointiaineistoa luotettavasti.

Yksinkertaisen neuroverkkomallin avulla saavutettiin parhaimmillaan 95,63 % tarkkuus ennustustuloksille validointiaineiston suhteen (kuva 15).

Kuva 15. Kuvaaja yksinkertaisen neuroverkkomallin ennustusten tarkkuudesta.

Yksinkertainen malli saavuttaa parhaan ennustustarkkuutensa koulutus- ja vali-dointiaineiston suhteen aikaisin koulutusprosessin aikana eikä tarkkuus vaihtele suuresti koulutuskierrosten edetessä. Voidaan siis melko suurella varmuudella todeta, että koulutuskierrosten lisääminen ei vaikuta positiivisesti ennustustark-kuuteen.

Monimutkaisella neuroverkkomallilla saavutetut ennustustulokset vaihtelevat melko paljon koulutuskierrosten välillä. Tämä on nähtävillä mallin ennustustark-kuutta havainnollistavasta kuvaajasta (kuva 16).

Kuva 16. Kuvaaja monimutkaisen neuroverkkomallin ennustusten tarkkuudesta.

Ennustustarkkuus validointiaineiston suhteen on parhaimmillaan 95,69 %. Joil-lakin koulutuskierroksilla monimutkainen malli siis ennusti yksinkertaista mallia 0,06 % paremmin. Ero ei ole kovinkaan merkittävä ja monimutkaista mallia ei näiden satunnaisten parempien tulosten perusteella voida pitää parempana kuin yksinkertainen malli. Kuvaajia tarkastelemalla (kuva 16) voidaan havaita, että ennustustarkkuus koulutusaineiston myötä paranee pikkuhiljaa koulutus-prosessin edetessä. Validointiaineiston ennustamisen suhteen kuitenkin on ha-vaittavissa, että mallin ennustustarkkuus vaihtelee suuresti koulutuskierroksesta toiseen. Huonoimmillaan ennustustarkkuus on 94 % validointiaineiston suhteen, ennustustarkkuus on siis koulutusprosessin lopussa huonompi kuin koulutus-prosessin ensimmäisten kierrosten aikana.

Kummankin neuroverkkomallin ennustamisen tarkkuus jättää toivomisen varaa.

Vaikka yli 95 % ennustustarkkuus kuulostaa vaikuttavalta, tulee kuitenkin ottaa huomioon, että tietoaineiston kohdemuuttujan arvojen jakauman suhteesta joh-tuen voidaan saavuttaa noin 95 % ennustustarkkuus pelkästään sanomalla, että

kaikkien tapausten kohdemuuttujan arvo on negatiivinen. Yksi suurimmista syistä siihen, miksi malleilla ei pystytty saavuttamaan parempia ennustustulok-sia on muun muassa se, että aineisto sisältää liian vähän kohdemuuttujan posi-tiivia arvoja sisältäviä tapauksia. Toinen hankaloittava tekijä on tietysti se, että vaikka tietoaineistossa on paljon tapauksia, joilla on monia riskitekijöitä aivohal-vaukseen, kuten korkea veren glukoositaso, ylipaino ja tupakointi, eivät tämän-laiset tapaukset olleet kuitenkaan yleisesti aineistossa saaneet aivohalvausta.

Ongelmana mallin kouluttamisen kannalta on myös se, että ei voida ottaa huo-mioon näiden tapausten mahdollisesti sairastuvan aivohalvaukseen myöhem-min, vaikka vielä sellaista ei ole ollut.

8 Yhteenveto

Insinöörityön tarkoituksena oli luoda neuroverkkomalli ennustamaan aivohal-vausta tietoaineistosta aineiston muuttujien arvojen perusteella. Lopullista en-nustamistarkkuuden arvioimista varten hyödynnettiin kahta neuroverkkomallia.

Tässä työssä esiteltiin aivohalvausta, aivohalvauksen suurimpia riskitekijöitä sekä käytössä ollutta tietoaineistoa verraten aineiston muuttujien arvoja riskite-kijöihin. Työssä paneuduttiin myös neuroverkkojen toimintaan sekä nykyaikai-siin teknologioihin, joita hyödynnetään tiedonkäsittelyssä varsinkin koneoppimi-sen näkökulmasta.

Insinöörityö alkoi tietoaineistoon perehtymisellä ja aineiston esikäsittelemisellä.

Aineiston esikäsittelyn jälkeen luotiin neuroverkkomallit, joiden suoriutumista ar-vioitiin tarkkailemalla näiden mallien ennustamisen tarkkuutta ja virhefunktion arvoa. Työssä käytiin myös läpi neuroverkkomalleilla saavutettuja ennustustu-loksia sekä pohdittiin, miten puutteet tietoaineistossa mahdollisesti vaikuttivat malleilla saavutettuihin ennustustuloksiin.

Insinöörityön tuloksena saatiin aikaan kaksi rakenteeltaan erilaista neuroverkko-mallia, toinen yksinkertainen ja toinen huomattavasti monimutkaisempi. Näiden mallien ennustustarkkuutta ja virhefunktion arvoa tutkailtaessa ja vertailtaessa

havaittiin yksinkertaisen mallin ennustavan arvoja monimutkaista mallia luotetta-vammin, sillä monimutkainen malli kärsi ylisovittamisesta. Ylisovittaminen ha-vaittiin tutkailemalla virhefunktion arvon muutoksia koulutus- ja validointiaineis-ton suhteen.

Lähteet

1 Atula, Sari. 2019. Aivohalvaus (aivoinfarkti ja aivoverenvuoto). Verkkoai-neisto. <https://www.terveyskirjasto.fi/dlk00001>. 17.2.2019. Luettu 30.3.2021.

2 Aivohalvaus (stroke). Verkkoaineisto. <https://thl.fi/fi/tutkimus-ja-kehittami-nen/tutkimukset-ja-hankkeet/perfect/osahankkeet/aivohalvaus-stroke>.

Päivitetty 9.2.2017. Luettu 30.3.2021.

3 Suvilehto, Jyry. 2020. Syvät Neuroverkot. Verkkoaineisto.

<https://www.csc.fi/web/blog/post/-/blogs/syvat-neuroverk-1>. Luettu 30.3.2021.

4 Neuroverkot. Verkkoaineisto. <https://fi.wikipedia.org/wiki/Neuroverkot>.

Päivitetty 3.1.2021. Luettu 30.3.2021.

5 Sivarajkumar, Sonish. 2019. ReLu – Most popular Activation Function for Deep Neural Networks. Verkkoaineisto. <https://medium.com/@sonish.si- varajkumar/relu-most-popular-activation-function-for-deep-neural-net-works-10160af37dda>. Luettu 1.4.2021.

6 Tuominen, Heli. Johdatus tekoälyn taustalla olevaan matematiikkaan.

6 Tuominen, Heli. Johdatus tekoälyn taustalla olevaan matematiikkaan.