top of page

Machine Learning Produkter

Opdateret: 20. maj



Første landkort over ML, udfra kurset som er i skammekrogen på litteraturlisten:


Step-By-Step

  • Beskrivelse af hvordan man gennemgår et supervised ML projekt.


Implementation af K-nearest neighbor "Guessing gender app"

  • train_model, træner modellen baseret på antal neighbors fra User.

  • make_prediction, predicter udfra den trænede model og User inputs (højde, vægt)

  • X = træningsdata y= label på træningsdata

  • Samme princip har jeg lavet for henholdvis:

    • Linear Regression: Gætter hus pris baseret på kvadrameter - baseret på alder og indtægt

    • Decision Tree: Gætter om et lån-søger er highrisk/lowrisk

    • Support Vector Machine: Klassiferer håndtegne tal (0-9), udfra et datasæt med tal


Model example til projekt (tager udgangspunkt i empty & not_empty parking spots)

Inddelt i 3 faser henholdvis: prepare data, train/splitdata og test performance

På sigt skal data ændres til at være "water & not_water"

Koden er udelukkende til at træne en model og gemme den, så senere kan loades og bruges

Formattere til 15x15 og laver billeder og labels til numpy arrays til videre arbejde.
Formattere til 15x15 og laver billeder og labels til numpy arrays til videre arbejde.

Splitter data, og trainer en Support Vector Machine model. Træner 12 forskellige classificers.
Splitter data, og trainer en Support Vector Machine model. Træner 12 forskellige classificers.
Vælger bedste classifier og predicter udfra test data. Beregner accuracy og printer til konsollen.
Vælger bedste classifier og predicter udfra test data. Beregner accuracy og printer til konsollen.



Linear Regression husleje prediction med multiple features:


Indsamlet data fra boligportalen omkring 100 lejligheder
Indsamlet data fra boligportalen omkring 100 lejligheder

Tilføjet dependices til projektet
Tilføjet dependices til projektet


Loader datasættet, X = features og y = Target. Splitter datasættet, og træner en model udfra training data
Loader datasættet, X = features og y = Target. Splitter datasættet, og træner en model udfra training data

Tester hvor godt fittet modellen er udfra training data
Tester hvor godt fittet modellen er udfra training data

Tester udfra test data, for at få en mere præcis vurdering af modellen
Tester udfra test data, for at få en mere præcis vurdering af modellen

Lidt input, så user kan indtaste ny unseen data
Lidt input, så user kan indtaste ny unseen data


Et terminal eksempel hvor en bruger har angivet nogle features.
Et terminal eksempel hvor en bruger har angivet nogle features.

Som konklusion:

R² (R-squared) på træningsdata viser, hvor godt modellen passer til de data, den er blevet trænet på. En R²-værdi på f.eks. 0,81 betyder, at 81 % af variationen i målvariablen kan forklares af modellen. Det indikerer et godt fit.

Når man beregner R² på testdata (som modellen ikke har set før), får man ofte en lavere værdi, fordi modellen kan have tilpasset sig træningsdataene lidt for godt (overfitting). En lavere R² på testdata betyder, at modellen generaliserer lidt dårligere til nye data, men det er forventeligt.

  • Dog er der nogle outliers, f.eks. er der ikke meget data på meget store lejligheder og lejligheder med mange værelser, som gør de højere predictions mere upræcise.




Gradient Descent:

For at skabe en bedre forståelse hvad der egentlig sker når man bruger en linear regression model fra scikitlearn, så har jeg udarbejdet et google cobal, som gennemgår gradient descent og hvordan man bruger den algoritme til at optimere parametrene til en linje.









Som konklusion til projektet, har det givet mig en god forståelse for hvordan gradient descent iterativt kan forbedre parametrene w og b, og man kan tracke denne proces med en loss function som f.eks. MSE:
Som konklusion til projektet, har det givet mig en god forståelse for hvordan gradient descent iterativt kan forbedre parametrene w og b, og man kan tracke denne proces med en loss function som f.eks. MSE:



Jeg har lavet nogle step by step guides, med screenshots og lidt text fra nogle guides til k-means, fuzzy c-means og hierarchical clustering (mangler upload)



Jeg har lavet noter til hvordan man helt lavpraktisk kan bruge naive bayes til spam filter:


Chancen for en mail er normal er 0.67 (67%) da 8/12 = 0.67. Modsat er chancen for spam 0.33 4/12.


For at finde ud af om en mail er spam bruger man formlen er som er vist midt på billedet, her kan man tilføje flere ord

Derefter sammenligner med svaret med samme formlen dog med værdierne fra spam mails, det højeste svar er den type mail den har størst chance for at være.



Jeg har lavet noter til hvad overfitting og underfitting samt sammenhængene til bias og variance.


I billedet kan man se den lineære linje er bedre på det testing datasættet, fordi den har lav variance i forhold til den sjove til højre som har high variance fordi den har meget høj bias på training data.
I billedet kan man se den lineære linje er bedre på det testing datasættet, fordi den har lav variance i forhold til den sjove til højre som har high variance fordi den har meget høj bias på training data.


Decision Tree:


Data:


Målet med "projektet" er at finde ud af om en Person kan lide filmen "Love Cool As Ice" udfra nogle features.

Begrebsliste:

  • Root Node = Toppen af træ'et

  • Internal Nodes (Branches) = Alle underspørgmål

  • Leaf Nodes (Leaves) = Pile der peger ind og ingen der peger ud.



Step 1. Find Root Node

  • Lav et simpelt Tree til hvert feature (Popcorn, Soda og Age) med relation til outputtet Loves Cool As Ice



Her er træerne opstillet med svarene udfra Cool As Ice.
Her er træerne opstillet med svarene udfra Cool As Ice.

  • Beregn Gini Impurity for hvert Leaf (de grønne kasser)


Her får vi gini impurity for Loves popcorn og loves Cool As Ice, dette skal gentages for de 4 grønne kasser på tidligere billede
Her får vi gini impurity for Loves popcorn og loves Cool As Ice, dette skal gentages for de 4 grønne kasser på tidligere billede

Når man har udregnet Gini Impurity for Leaves, kan man udregne total gini impurity som er det tal man kan sammenligne med senere.


Man følger formlen som bruger gini impurity for de to leaves, og får total impurity som er 0.405. Her kan man konkludere at hvis popcorn skal være Root Node har den impurity på 0.405
Man følger formlen som bruger gini impurity for de to leaves, og får total impurity som er 0.405. Her kan man konkludere at hvis popcorn skal være Root Node har den impurity på 0.405

Denne proces gentager man for anden feature (Soda)

Her får man total impurity til at være 0.214.


Den sidste feature er Age, og det er lidt anderledes fordi Age er numerisk værdi.

  • Sorter data, så det går fra laveste age til højeste

  • Beregn gennemsnit af alle adjacent Ages.


Venstre har en Impurity på 0, fordi der kun er et svar. Højre har på 0.5 da den er 50/50 - Efter total impurity formlen har Age < 9.5 en total impurity på 0.429
Venstre har en Impurity på 0, fordi der kun er et svar. Højre har på 0.5 da den er 50/50 - Efter total impurity formlen har Age < 9.5 en total impurity på 0.429
  • Denne proces gentages for alle gennemsnitterne.


Vælg den laveste Gini Impurity og sammenlign den med tidligere Features
Vælg den laveste Gini Impurity og sammenlign den med tidligere Features

Så vi har:

Age = 0.343

Popcorn = 0.405

Soda = 0.214


Så her får vores Root Node som er Soda.





Step 2. Find næste Branch, der bedst muligt splitter dataen op



Her gælder samme princip om at finde den lavete total impurity. Ved popcorn blev den beregnet til 0.25 og ved Age < 12.5 blev den beregnet til 0, da alle svarene enten er i Yes eller No i hvert leaf.
Her gælder samme princip om at finde den lavete total impurity. Ved popcorn blev den beregnet til 0.25 og ved Age < 12.5 blev den beregnet til 0, da alle svarene enten er i Yes eller No i hvert leaf.

Derfer er næste Branch Age < 12.5.


Fordi vi har 0 impurity, ville det ikke give mening at splitte det yderligere op.

Derfor bliver de sidste Branches til Leaves.


Step 3. Lav outputs til Leaves

Fordi er flest svar i Yes, vil outputtet være Loves Cool As Ice. Samme princip gælder for dem som ikke Loves Cool As Ice
Fordi er flest svar i Yes, vil outputtet være Loves Cool As Ice. Samme princip gælder for dem som ikke Loves Cool As Ice


Et typisk problem der kan opstå med Decsision Trees er overfitting, fordi algoritmen nemt kan tilpasse sig støj i datasættet

  • Lav bias meget fleksible og kan modellere komplekse sammenhænge (lærer godt på træningsdataerne)

  • Høj variance fordi de er så fleksible er de følsomme overfor små ændringer i dataerne derfor overfittes de nemt.

  • Kan ende med at have et Node for hver enkelt datapoint, som gør fit utroligt godt, men rigtig dårligt på usete og nye data.


Undgå overfitting:

Max Depth: Sætte en grænse på hvor dybt træ'et skal gå ned.

Minimum Samples: Sætte en grænse på et minium af antal eksempler der skal være før det oprettes en ny Branch.

F.eks. at 1 svarer Ja og ingen har svaret nej, giver en lav impurity, lav bias men meget høj variance, da reelt kun er et svar.





Support Vector Machine:



MSE

En vigtig detalje, er at MSE er en cost function når man beregner for et bestemt datapoint, og en loss function når man opsamler i mean squared error til sidst.
En vigtig detalje, er at MSE er en cost function når man beregner for et bestemt datapoint, og en loss function når man opsamler i mean squared error til sidst.



R2 (Scoring Metric)








Fundamentals:

Overfitting, underfitting, bias og variance.


Modsat er underfititng, når modellen er fittet så dårligt at forudsigelerne er meget forkert på både trænings og test sættet.
Modsat er underfititng, når modellen er fittet så dårligt at forudsigelerne er meget forkert på både trænings og test sættet.

Cross Validation:






Use When Scheme

Dette skema er en meget kort opsamling af supervised algoritmer, der indgår hvilken type der, hvad de ofte bruges til, fordele og ulemper.



Jeg har lavet det for at opfylde læringsmålet, om at kunne vurdere hvornår man bør anvende hvilken algortime, samt for at give mig selv et overblik over dem.

 
 
 

Seneste blogindlæg

Se alle
Læringsplan uge 21-22

I sidste uge konkludere jeg at jeg manglede disse for at nå i mål med mine læringsmål: I supervised: SVM, og decision tree, logistic...

 
 
 

Comentarios


Rasmus Rosengaard Nielsen Portfolio 2025

bottom of page