Regression er en type af Supervised Learning, hvor algoritmen forsøger at forudsige en numerisk værdi for et givent input baseret på tidligere observationer. For eksempel kan en algoritme trænes på tidligere data om boligpriser for at forudsige prisen på en ny bolig baseret på dens egenskaber som størrelse og placering. Et eksempel kunne være at træne en algoritme på tidligere data om vejret for at forudsige temperaturen i morgen baseret på tidligere observationer.
Hyperparametre i forhold til regression i machine learning (ML) er parametre, som ikke læres eller tilpasses under træning, men som bruges til at styre træningsprocessen og optimere modellens præstationer. Disse parametre kan have stor indflydelse på modellens præstation, men kræver ofte eksperimentering og tuning for at finde de bedste værdier. Nogle eksempler på hyperparametre kan være Learning Rate, Epochs og Batch Size.
Learning Rate (læringshastighed): Learning rate er et hyperparameter, der bestemmer, hvor meget vægterne i en maskinlæringsmodel opdateres under træningsprocessen. Det er en lille positiv værdi, der styrer skridtene, som optimeringsalgoritmen tager for at minimere fejlen (f.eks., gradient descent). En for høj learning rate kan føre til, at træningsprocessen divergerer, mens en for lav learning rate kan gøre træningen meget langsom eller få den til at sidde fast i en lokal minimum.
Epochs (epoker): Epoker er det antal gange, hele træningsdatasættet bruges til at opdatere vægterne i en maskinlæringsmodel. En enkelt epoke består af at sende hele datasættet gennem modellen én gang. Antallet af epoker er en anden hyperparameter, der skal justeres. For mange epoker kan føre til overfitting (modellen præsterer godt på træningsdata, men dårligt på ukendte data), mens for få epoker kan resultere i underfitting (modellen mangler generaliseringsevne). Vi kigger både på over- og underfitting senere på forløbet!
Epoker er ikke de samme som iterationer og man skal passe på med at blande dem! Fx ved et datasæt på 1000 med en Batch size på 50, ville det se ud på følgende måde!
$$ 1\ epoker = (N/batch\ size)= (1000/50) = 20\ iterationer $$
Batch Size (partistørrelse): Batch size refererer til det antal datapunkter, der bruges i hver iteration af træningen. I stedet for at opdatere vægterne for hvert enkelt datapunkt, arbejder man ofte med mindre portioner eller partier af data på samme tid. Dette hjælper med at gøre træningsprocessen mere effektiv og kan have indflydelse på konvergenshastighed og hukommelsesforbrug. Partistørrelsen er også en hyperparameter, der skal justeres, og dens optimale værdi afhænger af den specifikke opgave og datasæt.
De følgende er populære strategier for batch-størrelse:
Så for at træne en maskinlæringsmodel skal vi eksperimentere med disse hyperparametre for at finde de optimale værdier, der giver den bedste præstation for din specifikke opgave.
Træningsdata er de data, som en model bruger til at lære og tilpasse sig. Det er det datasæt, som modellen trænes på, og som den bruger til at finde mønstre og sammenhænge mellem input og output. Træningsdata skal være repræsentative for den virkelige verden, som modellen skal anvendes i, og det er vigtigt, at der er tilstrækkeligt med data til at træne modellen korrekt.
Testdata er derimod de data, som modellen ikke har set før, og som den bruges til at evaluere modellens præstation på. Testdata bruges til at vurdere, hvor godt modellen generaliserer til nye data, som den ikke har trænet på. Testdata skal også være repræsentative for den virkelige verden og helst adskilt fra træningsdata for at undgå overfitting, hvor modellen bliver for specialiseret til træningsdataene og dermed ikke kan generalisere til nye data.
I forecasting bruges trænings- og testdata på samme måde som i machine learning. Træningsdata bruges til at træne modellen på historiske data, mens testdata bruges til at evaluere modellens præstation på fremtidige data. Det er vigtigt, at trænings- og testdata er adskilt i tid, så modellen ikke træner på data, som den senere skal forudsige.
<aside> <img src="notion://custom_emoji/78111fd7-5d55-4196-af1c-1918b8dd24a0/15fdab5c-a237-8088-ac4f-007a63203c57" alt="notion://custom_emoji/78111fd7-5d55-4196-af1c-1918b8dd24a0/15fdab5c-a237-8088-ac4f-007a63203c57" width="40px" />
Der findes en rigtig god visuel artikel på GitHub omkring Lineær Regression, den kan man læse her - https://mlu-explain.github.io/linear-regression/ | Den bliver også gennemgået på klassen!
</aside>
Lineær regression er en type af Supervised læringsalgoritme, der bruges til regressionsopgaver. Den bruges til at modellere forholdet mellem en afhængig variabel og en eller flere uafhængige variable ved at tilpasse en lineær ligning til dataene. Målet med lineær regression er at finde den bedste passende linje gennem dataene, der minimerer summen af de kvadrerede fejl mellem de forudsagte og faktiske værdier.
Den mest simple, lineær regression model er følgende.
Y som er vores output også kaldet vores afhængige variable. En konstant $\alpha$ som bestemmer vores skæring på Y.
$\beta_1$ som er vores første og eneste parametre som her bestemmer hældningen. Til sidst har vi $X_t$ som er vores uafhængige variable.
$$ \begin{align*} \mathrm{Y}{t} = \alpha &+ \beta{1} \mathrm{X}_{t}\end{align*} $$
Den minder meget om vores klassiske
$$ f(x)=ax+b $$
Ofte er vores 2 dimensionale (X,Y) ikke helt nok til at forklare vores situation. Her kommer formellen til højre ind. Vi har 8 dimensioner.
$$ \begin{align*} \mathrm{Y}{t} = \alpha &+ \beta{1} \mathrm{X}{t} \\ &+ \beta{2} \mathrm{X}{t} \\ &+ \beta{3} \mathrm{X}{t} \\ &+ \beta{4} \mathrm{X}{t} \\ &+ \beta{5} \mathrm{X}{t} \\ &+ \beta{6} \mathrm{X}{t} \\ &+ \beta{7} \mathrm{X}_{t} + \epsilon \end{align*} $$
Her er vores simple model udvidet til at have flere hældningsparametre samt uafhængige variabler!
Vi kan lave en simpel lineær regressionsmodel med Keras og TensorFlow. Vi bruger standarter i frameworket, som kan læses om her TF-Keras.
De 2 hovedele vi bruger er her
class Model
: A model grouping layers into an object with training/inference features.
class Sequential
: Sequential
groups a linear stack of layers into a tf.keras.Model.
Vi giver den 1 lag, altså med units=1
- det er altså den mest simple model som vi også kender fra eksemplet over. $Y_t = \alpha
+ \beta_{1} \mathrm{X}_{t}$. Vi beskriver selv hvordan vores input skal se ud med input_shape=(1,))
. Her siger vi at det skal være en vektor som er vores input.
Den sidste del er hvor vi faktisk bygger vores model. Vi bygger modellen med RMSprop som er variant af Stokastisk Gradient Descent (SGD). Vi definere læringsraten som er en hyperparameter som vi selv styre samt hvilken model den skal bruge til loss. Her bruger vi MSE, som er beskrevet nedenunder.
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(units=1,
input_shape=(1,)))
model.compile(optimizer=tf.keras.optimizers.experimental.RMSprop(
learning_rate=my_learning_rate),
loss="mean_squared_error",
metrics=[tf.keras.metrics.RootMeanSquaredError()])
Vi kan se mere omkring Dense delen her: https://wandb.ai/ayush-thakur/keras-dense/reports/Keras-Dense-Layer-How-to-Use-It-Correctly--Vmlldzo0MjAzNDY1
Meget af vores arbejde ligger i at træne en model til at vælge den rigtige mængde til hvert $\beta$. Samt at udvælge hvilke som skal med. Det kan godt være at vi har 7 datapunkter i vores datasæt, men måske er det ikke alle som er relevante.
Vi ser blandt andet i opgave 2 under Opgaver til Regression, at vi har 9 parametre i datasættet fra Auto MPG. Vi bruger 8 af dem, men måske det ikke altid er nødvendigt?
Generelle lineære modeller (GLM) er en bred klasse af modeller, der inkluderer lineær regression som et specielt tilfælde. De bruges til at modellere forholdet mellem en afhængig variabel og en eller flere uafhængige variable. Men i modsætning til lineær regression kan de håndtere ikke-normalfordelinger og ikke-konstant variation af fejltermerne. GLM'er har tre komponenter: en sandsynlighedsfordeling, en lineær predictor og en link-funktion. Link-funktionen transformerer den lineære predictor til den passende skala for sandsynlighedsfordelingen. Eksempler på GLM'er inkluderer logistisk regression, Poisson regression og gamma regression.
Vil man grave lidt dybere i specielt Lineær regression, men også de andre kan man se kilden her
Linear Regression in Machine learning - GeeksforGeeks
Tabskurve eller loss curve er en graf, der viser, hvordan vores model præsterer på træningssættet og testsættet over tid. Loss/tab er en funktion, der måler, hvor godt vores model præsterer, og curve viser, hvordan denne funktion ændrer sig over tid, efterhånden som modellen trænes.
I Regression analyse bruges Loss curve til at evaluere, hvor godt modellen præsterer på den ønskede opgave, såsom at forudsige boligpriser baseret på tidligere observationer. Loss kan måles på forskellige måder, afhængigt af opgaven og typen af data, men i Regression bruges ofte Mean Squared Error (MSE) til at måle forskellen mellem den faktiske pris og den forudsagte pris.
$$ MSE =\sum_{i=1}^{N}(x_i-y_i)^2
$$
#Vi kan også lave den simpelt i Python.
#Ofte er det ikke så svært at oversætte matematik til kode!
from sklearn.metrics import mean_squared_error
>>> X_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> mean_squared_error(y_true, y_pred)
#Eller manuelt
summation = 0
n = len(y)
for i in range (0,n):
difference = X_true[i] - y_pred[i]
summation = summation + difference**2
MSE = summation/n
print "The Mean Square Error is: " , MSE
Mean Absolute Error (MAE) bliver også brugt, specielt hvis man har et datasæt, hvor der er mange spredning (outliers)
$$ MAE = \sum_{i=1}^{N}|x_i-y_i| $$
En god Loss curve viser en gradvis reduktion i tab over tid, hvilket betyder, at vores model bliver bedre og bedre til at forudsige de ønskede output. Hvis Loss curve stagnerer eller stiger over tid, kan det indikere, at vores model ikke er i stand til at lære de ønskede mønstre eller er overtilpasset til træningssættet.
Loss curve er en vigtig del af evalueringen af en model i Regression analyse og Machine Learning generelt, da det viser, hvordan vores model præsterer over tid, og hjælper os med at identificere eventuelle problemer eller udfordringer i træningsprocessen.
Hvordan vurdere vi på en tabskurve? Google
Maskinlæring ville være en leg, hvis alle vores tab-kurve så sådan ud første gang, vi trænede vores model:
Men i virkeligheden kan tabskurver være ret udfordrende at tolke. Man kan bruge følgende eksempler til at forstå hvordan en losscurve virker samt som et opslagsværk, hvis man for en af mønstrene
1. Min model vil ikke træne!
Her er din første tabskurve.
Modellen konvergerer ikke. Prøv disse fejlfindingstrin:
2. Mit tab eksploderede!
Her ser I en anden kurve. Hvad går galt her, og hvordan kan hun løse det?
Et vigtig trin inden man kan gå i gang med regressions arbejde er at have noget data som er blevet rengjort