Machine Learning Produkter
- Rasmus Rosengaard Nielsen
- 11. mar.
- 5 min læsning
Opdateret: 20. maj
Påbegyndt nu forbedret landkort udfra kursus: https://app.diagrams.net/#G13zjiC8nP-wV931nglZsAcvGK5gWYSY75#%7B%22pageId%22%3A%22JTNURR1EKl1ZEGOczXpR%22%7D

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



Linear Regression husleje prediction med multiple 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.



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.

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

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

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

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.

Denne proces gentages for alle gennemsnitterne.

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

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

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

R2 (Scoring Metric)

Fundamentals:
Overfitting, underfitting, bias og variance.

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.
Comentarios