Dette indlæg er egentlig en note til et kursus på Kadenze. En introduktion til Machine Learning. Med et kunstnerisk sigte lærer man om hvordan algoritmer kan lære fra data – data såsom gestik, tale og bevægelse omformet til 0’er og 1’taller.
Bær altså over med underholdningsværdien i første omgang – eller prøv at følg kurset selv – det er helt fantastisk..
Når man designer med Machine Learning målrettet kreative formål, tænker man anderledes end hvis man skulle designe et system til – fx – diagnosticering eller fabriksstyring. Du bliver mere opmærksom på hvordan et system opleves og måske mindre opmærksom på, hvordan det virker på en eller anden praktisk virkelighed.
Og det synes jeg er et godt udgangspunkt for læring.
Vi skal bl.a se på:
- Hvordan algoritmer lærer fra data
- Fokus på Machine Learning som et design værktøj
- Til interaktive og kreative formål
- Hands-on tilgang
3 tilgange
- Klassifikation (vælg mellem forskellige muligheder eller kategorier)
- Regression (brug et input til at påvirke normaliserede variable gradvist)
- Temporær analyse (fx hvordan stemmen ændrer sig over tid – talegenkendelse)
The Machine Learning Pipeline
- Input (mikrofon, kamera, GPS, Twitter feed)
- Processering: Model – beslutning (supervised learning algorithm)
- Output

https://www.kadenze.com/courses/machine-learning-for-musicians-and-artists-v/sessions/introduction
Wekinator
Rebecca Fiebrink har skrevet koden til Wekinator, for at følge kursusversionen skal man downloade den her
Øvrige instruktioner: Machine_Learning_Assignment_1_Instructions
OSC
Netværks lydkontrol.
Open Sound Control (OSC) is a protocol for networking sound synthesizers, computers, and other multimedia devices for purposes such as musical performance or show control. OSC’s advantages include interoperability, accuracy, flexibility and enhanced organization and documentation.

Og husk: Der må ikke væer to programmer der lytter på samme port!
Klassifikation
- Klassifikation (vælg mellem forskellige muligheder eller kategorier)
- Jvf eksemplet med webcam input. Som for eksempel har tre “kategorier” eller konfigurationer, som bliver sammenlignet.
Åbn eksemplet “Classifier explorer”
Man kan forestille sig, at man vil opsnappe hvor et menneske befinder sig i et kamerainput. Eller endnu simplere: om noget, f.eks et museklik, er til højre eller venstre på skærmen.
Med en simpel funktion, der modtager et kliks position fra musen, kan man let afgøre om klikket er til højre eller venstre for midten af skærmen: if(x > width/2) return 2 etc.
Lad os så overføre det eksempel til en machine learning algoritme. Vi bruger funktionen til at returnere en række logiske venstre-højre positioner – det bruges nu som træning for machine learning algoritmen:

Og det virker jvf eksemplet i koden. Men hvorfor egentlig? Hvad er det Machine Learning algoritmen gør, som den simple funktion ikke gør? Eller med andre ord – hvordan gætter ML algoritmen hvad der er midterlinjen når den ikke er hardkodet?
Klassifikationsalgoritmer: Nearest neighbour classifier
Lad os forestille os at vi selv er classifier algoritmen. Vi modtager nu en række x-y-værdier, og det eneste vi får at vide er, at det er klasse 1. Dernæst modtager vi en anden række værdier, som vi får at vide er klasse 2.
En måde at afgøre et kliks klasse kunne være at se på klikkets nærmeste nabo. Hvem er tættest på mht klasse? Fint, så må det nye klik også have den klasse.
Klassifikationsalgoritmer: Decision stump
Draw a line
En anden strategi kunne være at prøve at dele klasserne i to grupper på hver sin side af en linje (lodret såvel som vandret). Denne algoritme kaldes en Decision Stump.
Den lærer egentlig på baggrund af en lige så simpel logisk betingelse, som den første stump kode: hvis x er mindre end dette: klasse 1 – ellers: klasse 2
Men for at gøre sådan, må den selvfølgelig kunne lave et rimeligt gæt på en split-linje ud fra træningsdata. Og hvordan får den så det?
Stay tuned…

Fundamentale udfordringer
- Hvilken klassifikations algoritme vil du bruge?
Hvad er egentlig forskellen på de to måder algoritmerne sondrer på?


Nearest neighbor klassificerer anderledes end decision stump. Hvornår skal man bruge hvad?
NN er bedst til at håndtere kaos eller spicificitet – man kan sige den er mere ekspressiv
Decision stumps er mere robuste overfor fejl i data! MEN eftersom decision stump er så supersimpel i sit design, at den kun kan beslutte sig for EN enkelt linje uanset hvor mange klasser data der indgår, er den kun brugbar som et læringsmål: et skridt på vejen til at forstå beslutningstræer.
K-nearest neighbor
Brug flere naboer til at klassificere – k flere. Det er klart at denne algoritme kompenserer for nogle af de fejl der kan opstå tilfældigt i data.
Beslutningstræer
Decision stumps er opbygget af et enkelt if else statement. Men hvad hvis vi have flere nedenunder? Så ville vi have et sorterings- eller beslutningstræ. De første to punkter kommer i to separate if else. De næste falder uværgeligt ned gennem deres tragt og danner efterhånden et beslutningstræ, der i princippet kan være uendelig dybt.
Huskeliste
- En classifier er en model der tildeler en label til et input
- Den er kun i stand til at tildele en label på baggrund af træningsdata
- Labels kommer i form af numre – men hvad du vil bruge de numre til, er helt op til dig 🙂
I den virkelige verden
- Det kunne være klassifikationer af medicinske tests: blodprøver f.eks. Er der noget lorent ved denne boldprøve? well, kig i arkiverne og klassificér den på baggrund af træningsdata.
- Har denne domsafsigelse en afvigelse på baggrund af normen for denne forbrydelse?
- Er det sandsynligt at brugere der har klikket “like” på denne side, klikker sig videre på denne annonce?
- Er denne e-mail spam eller ej?
- Er der et ansigt i denne film?
- Er det her en bestemt persons fingeraftryk?
- Er det sandsynligt at du ville købe et bestemt produkt (baseret på din købshistorik)?
- Er du gravid? (baseret på på andre gravides søgninger f.eks)
- http://www.ismir.net/ The foundation for music info retrieval
- Går den her aktie op eller ned?
- Er dette et tegnsprogstegn?
- Står der noget her?
Features
Lad os sige vi bevæger os videre til et tredimensionalt rum, med tre koordinater i stedet for to. I Machine Learning taler vi nu om, at vi har tre features i stedet for to.
Eller det kunne være vi havde en input controller der sender flere input, fx Leap Moti0n Controller, som måler x.y.z koordinater for hver af dine fingerspidser i realtid (!)
I tre dimensioner, virker decision stump ikke ved hjælp af en linje – men af en væg.
Det skal vise sig at matematikken til at udregne afstanden mellem punkter i flere dimensioner, heller ikke er voldsomt mere kompliceret end i to:

Feature selection
Bare fordi du kan bruge flere parametre, er en af de vigtigste ting i Machine Learning at vælge de relevante features. En god øvelse kan være at tænke tilbage på det to-dimensionelle rum, vi arbejdede med først:

Husk
- Dine træningsdata er vigtige for din model – hvis den ikke virker som den skal, kan det være du skal lave træningsdata om.
- Du kan gemme din classifier og genbruge den
- Det er ofte hurtigere at bruge machine learning, end at skrive koden til klassificering selv – nogle gange kan det ikke engang lade sig gøre at programmere det selv..
- Classifier eksemplet virker ikke med de forskellige input/output eksempler – den overtager alle porte..
Regression
Klassifikation beregner et nummer på en klasse ud fra et eller flere input, mens regression…
- Beregner et numerisk output fra et input (ikke som i klassifikation: en klasse, men et faktisk tal)
- Output forandrer sig jævnt, når input forandrer sig (smooth)
- Bruges til at kontrollere parametre, f.eks volumen, farve, position etc
Forskelle mellem Regression og Classification
Classification
- Output is a class/ label category
- Classifier will never output a value not in the training set
- No notion of “in between” categories
Regression
- Output is a (float) number
- Can output values not in training set
- Output might be between or outside values in training set
Lineær regression
Skaber en linje ud fra formelen y = ax + b
Skaber en lige linje mellem træningspunkterne
Smart til fx Volume – eller andre scenarier hvor du vil have en stabil og glidende overgang mellem to yderpunkter
Polynomial Regression
Skaber en kurve ud fra formlen y = ax² + b – eller i højere faktorer
God til at fange kurvede linjer – men ikke til at lave lige linjer
Neural network regression
Neurale netværk danner ikke en enkelt funktion til at beskrive et output, men bruger mange forskellige formler i et netværk til at beregne et output.
Matematikken i regression
Er overordnet forbundet med optimering. Man ønsker at algoritmen skal finde den linje, der afviger mindst muligt fra træningseksemplerne. Ydermere ønsker man hellere at den afviger lidt for alle punkter, end meget for nogle og intet for andre. Derfor udregnes den optimale kurve ved hjælp af rettesnoren “sum of squared distance” – som skal være så lav som muligt, for at give det bedste resultat.
Backprobagation using gradient descent – at man justerer vægtene i neuroner i et Neural Network gradvis vha gradients.
Praktiske tips
- Sæt wekinator til at bruge “hard values”, for at undgå at output rammer udenfor træningssættets range
- Eller sæt den til at outputte integers i stedet for floats
- Spar tid ved at bruge færre features, noder, hidden layers etc
- Vælg en algoritme som modsvarer kompleksiteten af det resultat du vil have