Lineær regression med maskinlæring

Gode pædagogiske introduktioner til maskinlæring søges, her lineær regression. Der er bedre måder, at lave lineær regression end maskinlæring, fx. mindste kvadraters metode (jeg tør ikke sige, at MK-metode løser problemet eksakt). Så dette er en introduktion til at gradvist tilpasse sine parametre ud fra kendte data.

Jeg mindes at en lignende metode var med i den formelsamling, jeg selv blev præsenteret for i Mat A i 1993. Måske var det ikke regression, men tilnærmet bestemmelse af rødder den beskrev(?). Under alle omstændigheder er metoden mere aktuel i dag end dengang.

Her har jeg fremstillede nogle data i Excel, som næsten ligger på en ret linje, og gemt dem som en .csv fil:

Udfordringen var samtidig en træning i at skrive python-kode. Jeg har brugt miljøet Jupyter, men en simplere editor vil være en fordel.

Jeg bøvler stadig lidt med lokale og globale variable. Men koden behøver ikke være længere end som vist herunder. genfromtxt omdanner to søjler i Excel til en liste af lister. Hver liste indeholder et datapunkt (x,y). Variablen “points [j][1]” henviser til en y-værdi i datapar nr. j.

Det mest interessante sker nok i opdateringen af a og b, hvor d(error)/d(a)=x og d(error)/d(b)=1 anvendes.

Min maskinlærings-algoritme giver:

y=2,08x+3,72

Excel giver:

y=2,05x+3,8

Det er da ret godt gået, de få punkter taget i betragtning.

Jeg ville også lave nogle grafiske repræsentationer af processen. Så blev koden noget længere.

Summen af (error)^2 for hver gang datasættet løbes igennem (1 epoch), falder i løbet af de første ca. 10 epochs (figur t.h.).

Summen af errors^2 dækker over nogle udsving mellem positive og negative error-værdier, som jeg kan se når jeg printer alle error-værdierne. Det er måske forklaringen på, at jeg ikke kommer nærmere Excel’s løsning.

For 50 iterationer og startværdier på a=1 og b=0 (blå linje), ses herunder hvordan linjen drejes opad og b løfter sig med hver gentagelse. Mest i starten, derefter finjustering:

Hvis learning rate hæves for meget, her 0,1, fås nonsens (herunder). Algoritmen springer mellem over- og undershoot?

Hvordan skal eleverne arbejde med forstå algoritmen? ”De [eleverne] taster noget ind på lommeregneren eller computeren, men har ikke forståelsen af, hvad de gør.” Leslie Christensen, CBS, Gymnasieskolen 29.april 2016. En bedre grafisk animation af linjerne, ville være rart.

For sjov ville jeg også se, om jeg kunne kode algoritmen i Scratch. Det tog ikke lang tid:

Scratch kan mig bekendt ikke importere data, og kan ikke tegne grafer. Men viser alligevel, hvordan værdierne ændres med tiden:

Dette indlæg blev udgivet i Digital Dannelse, Maskinlæring, Programmering. Bogmærk permalinket.