Maskinlæring: Del 1 - Teori
Maskinlæring har de siste tiårene bare blitt mer og mer tilstede i hverdagen. OpenAIs nye chatbot, ChatGPT, har tatt verden med storm og ført til en rekke interessante diskusjoner om hvordan den potensielt kan senke etterspørselen etter både teknologer og andre yrkesgrupper betraktelig. Å ha en liten anelse om hva maskinlæring er, og hvordan det kan løse diverse problemer ser jeg derfor på som en lur investering, og denne investeringen skal jeg hjelpe deg med i denne serien på to innlegg.
Hva er maskinlæring?
Maskinlæring er et omfattende tema, men i korte trekk går maskinlæring ut på å programmere en datamaskin til å kunne lære eller generalisere utifra eksisterende data. Maskinen skal da kunne gi nyttig informasjon når den får ny og ukjent data som input.
Informasjonen maskinen gir kan i prinsippet være nesten alt, men et veldig vanlig og mye brukt eksempel på output er en prediksjon eller en klassifisering. Et praktisk eksempel på dette kan være: "Gitt at du vet en persons alder, sykehistorie, BMI, treningsvaner og alkoholinntak, gi et estimat (eller prediksjon) på denne personens sannsynlighet for å utvikle diabetes."
For at maskinen skal kunne si noe om dette, må den mates med mange rader med eksisterende data, inkludert en fasit på sannsynligheten for hver rad. Denne dataen tolkes av en maskinlæringsalgoritme, eller maskinlæringsmodell. Tolkningsprosessen kalles ofte for trening av modellen, og dataen brukt til dette blir derfor refert til som treningsdata.
En vanlig utfordring når man jobber med maskinlæring er å samle nok treningsdata. Dataen må være både omfattende og representativ for at modellen skal være nyttig. Det finnes flere grener innen maskinlæring hvor du ikke bruker treningsdata, men i mange bruksområder og for best mulig resultat trenger modellen en fasit for hver rad i datasettet under treningen. Underkategorien av maskinlæring hvor man bruker treningsdata med fasit (labeled data) kalles supervised learning.
Maskinlæringsalgoritmer kan inkludere alt fra ganske enkle statistiske metoder til svært store matematiske systemer bestående av millionervis av små komponenter (kalt nevroner i kunstige nevrale nettverk). I resten av innlegget vil jeg gå gjennom tre kjente algoritmer innenfor supervised learning.
KNN
KNN står for "K-nearest neighbors" og er en algoritme brukt for klassifisering. Navnet forklarer det meste, da alt algoritmen gjør for å klassifisere et nytt datapunkt, x, er å finne de k nærmeste datapunktene, sjekke hvilken klasse de tilhører, og til slutt tildele x den klassen det ble funnet flest av. Det er da utvikleren sin rolle å bestemme et passende tall k kan være for best mulig resultat. Bildet under viser godt hvordan ulik verdi av k påvirker resultatet.
Bildet illustrerer KNN med to klasser, A og B, hvor hvert datapunkt inneholder to numeriske variabler, x1 og x2. For k=3 vil det nye datapunktet (stjernen) tildeles klasse B. For k=6 blir det klasse A. En utfordring med KNN er at alle variablene må representeres numerisk, altså som tall, for å kunne beregne den euklidiske distansen mellom to datapunkter. Går vi tilbake til eksempler fra helsedomenet vil variabler som alder, vekt og høyde ha numeriske verdier, mens ting som kosthold og treningsvaner ikke har noen åpenbare numeriske representasjoner. Trikset er da å transformere dataen til noe numerisk. Kosthold kan f. eks scores en verdi mellom 0 og 1 (hvor 0 er elendig og 1 er perfekt), eller splittes til flere numeriske variabler hvor hver fanger opp hver sin del av kostholdet.
For best mulig resultat må også alle variablene normaliseres, altså transformeres slik at alle faller innenfor samme intervall, ofte mellom 0 og 1. Hopper man over dette steget vil variabler med større verdispenn få mye større betydning enn variabler med lavere verdispenn. Høyde målt i cm kan f. eks variere mellom 125-205 i et gitt datasett, mens "kostholdsscoren" kun varierer fra 0-1. I et datasett som ikke er normalisert vil høyden få mye mer betydning for resultatet enn kosthold siden vi bruker euklidisk distanse.
Naive Bayes
Naive Bayes er en annen ganske simpel klassifiseringsalgoritme. Antakelsen i Bayes teorem er at verdien av hver variabel er uavhengig av verdien til de andre variablene. Et objekt kan f. eks regnes som et eple dersom det er grønt, rundt og ca 10cm i diameter, og hver av disse variablene bidrar til å avgjøre sannsynligheten helt uavhengig av de andre variablene. Matematisk kan Naive Bayes uttrykkes slik
hvor c er klassen og x er verdien til én av variablene i datasettet. Den beste måten å få en intuisjon for dette er med et eksempel:
I tabellen har vi en oversikt over når en gruppe venner drar ut for å spille golf, gitt diverse variabler om været. Med et nytt datapunkt kan vi bruke datagrunnlaget vi har for å regne ut sannsynligheten for at gjengen drar ut for å spille.
I det siste steget normaliserers sannsynligheten slik at summen av P(Yes) og P(No) blir 1 (siden svaret må være et av de to alternativene).
I motsetning til i KNN må hver variabel i Naive Bayes være kategorisk eller diskret. I tabellen over er f. eks temperaturen kategorisert til "Hot", "Mild" og "Cool", selv om temperatur typisk representeres numerisk ellers.
Eksempelet brukt er hentet her. Anbefaler også et av avsnittene fra Wikipedia om du vil ha en dypere forståelse av metoden.
Logistisk regresjon
Den siste metoden vi skal se på er logistisk regresjon (logistic regression). Logistisk regresjon er en regresjonsteknikk typisk brukt til binære klassifiseringsproblemer. Metoden bruker en ganske enkel matematisk formel for å beregne sannsynligeten for et utfall gitt et datasett med numeriske punkter. Formelen er angitt under:
For et gitt datasett skal man finne parameterne ß0 og ß1 for å best tilpasse (fit) datasettet. I eksempelet under ser vi en kurve som skal tilpasse punktene som viser sammenhengen mellom Hours studying og Probability of passing exam.
I dette eksempelet er det kun én variabel for hvert datapunkt, men metoden kan generaliseres for datasett med flere variabler. Outputen på funksjonen blir en sannsynlighet, og utvikleren må finne et threshold for sannsynligheten for å klassifisere det nye punktet. Et threshold på 0.5 kan ofte være lurt for binære klassifiseringer.
Konklusjon
Noe bemerekelsesverdig med alle disse metodene er at de kun baserer seg på relativt enkel matematikk og statistikk. Utenforstående som hører ordet "Maskinlæring" vil kanskje anta at maskinlæring er ensbetydende med svært kompliserte og dataintensive metoder og prosesser, men i veldig mange praktiske problemer kommer man langt med ganske fordøyelig matematikk og statistikk.
Som du vil se i Del 2 trenger du ikke forstå "the inner workings" av disse metodene for å ta dem i bruk i praksis, men etter min mening er det alltid nyttig å ha en intuisjon for hvordan de funker når du støter på problemer i den virkelige verden. Da er du bedre rustet til å bestemme hva slags algoritme som skal brukes på forskjellige type problemer.
Det var det. Håper du lærte noe!