CMD + K

Kapittel 2Begreper & formler · Lineær regresjon og tapsfunksjoner
Referanseside · Kapittel 2

Begreper & referanser

Alle nøkkelbegrepene, formlene og referansene fra Lineær regresjon og tapsfunksjoner, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.

Øv med flashcards23 kort fra dette kapittelet

Begreper

Sentrale begreper fra kapittelet med korte definisjoner.

01Lineær modell

En modell som beregner prediksjonen som en vektet sum av inputvariablene og et biasledd.

02Modellparameter

En verdi, som en vekt eller et biasledd, som lærealgoritmen tilpasser fra treningsdata.

03Biasledd

Et konstantledd som lar den lineære prediksjonen forskyves uten at inputverdiene endres.

04Residual

Forskjellen mellom observert målverdi og modellens prediksjon.

05Tapsfunksjon

En funksjon som gir et tall på hvor dårlige modellens prediksjoner er for et datasett eller eksempel.

06Maksimum likelihood

Prinsippet om å velge parameterne som gjør de observerte dataene mest sannsynlige under en antatt sannsynlighetsmodell. Med uavhengig gaussisk støy gir det samme vekter som å minimere MSE, og med Laplace-støy samme vekter som å minimere MAE.

07Gaussisk støy

Antakelsen om at avviket er normalfordelt med snitt 0 og fast varians , uavhengig for hvert punkt. Det er denne antakelsen som gjør MSE til det naturlige tapet.

08Interaksjonsledd

En feature laget som produktet av to andre, . Den lar effekten av avhenge av , noe en ren lineær modell ikke kan uttrykke. Modellen forblir lineær i vektene.

09Polynomiske features

Nye features som er potenser og produkter av de opprinnelige, for eksempel , og . De lar en lineær modell tilpasse krumme sammenhenger, fordi modellen fortsatt er lineær i vektene.

Formler

Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.

lineaer-regresjon

Lineær regresjonsmodell

Modellen predikerer en vektet sum av featureverdiene pluss et konstantledd.

xfeaturevektor
wvektor av lærte vekter
bbiasledd
ŷprediksjon
mse

Mean squared error

MSE straffer store residualer ekstra fordi hvert avvik kvadreres.

nantall observasjoner
y_iobservert målverdi
ŷ_imodellens prediksjon
mae

Mean absolute error

MAE gir lineær straff for residualer og er derfor mindre følsom for ekstreme feil enn MSE.

y_i-ŷ_iresidual for observasjon i
nantall observasjoner
r-kvadrat

Forklart varians

sammenligner modellen med en baseline som alltid predikerer gjennomsnittet.

R²score relativt til gjennomsnittsbaselinen
ȳgjennomsnittlig målverdi
gaussisk-log-likelihood

Gaussisk log-likelihood

Med uavhengig normalfordelt støy er log-likelihooden en konstant minus summen av kvadrerte residualer delt på . Å maksimere den er det samme som å minimere MSE.

nantall observasjoner
σ²støyvariansen (påvirker ikke hvilke vekter som er best)
y_i − ŷ_iresidual for observasjon i
laplace-log-likelihood

Laplace-log-likelihood

Med Laplace-fordelt støy med skala er log-likelihooden en konstant minus summen av absoluttfeil delt på . Maksimum likelihood blir da det samme som å minimere MAE.

sskalaparameter i Laplace-fordelingen
|y_i − ŷ_i|absolutt residual for observasjon i
interaksjonsmodell

Modell med samspillsledd

Produktleddet gjør at effekten av én enhet blir og dermed avhenger av . Modellen er fortsatt lineær i vektene.

w_3vekten til samspillsleddet
x_1·x_2produktfeaturen
normallikning

Normallikningen

Lukket løsning for vektene som minimerer MSE, når har en enerkolonne for konstantleddet og er inverterbar.

Xdatamatrise med enerkolonne
yvektor med målverdier
w*vektene med minst MSE

Kodesnutter

Kodesnutter fra kapittelet, vist literal.

Kode

Residualer, MSE og MAE

Python
import numpy as np X = np.array([[1.0], [2.0], [3.0], [4.0], [5.0]])y = np.array([2.8, 5.1, 7.2, 8.9, 11.1])w = np.array([2.0])b = 1.0malefeil = 0.0  # @param 0..10 0.5 def tap(y):    r = y - (X @ w + b)    return np.mean(r ** 2), np.mean(np.abs(r)) y_feil = y.copy()y_feil[-1] += malefeil                    # den siste målingen blir feilmse0, mae0 = tap(y)mse, mae = tap(y_feil)print(f"uten feil: MSE = {mse0:.3f}, MAE = {mae0:.3f}")print(f"med feil:  MSE = {mse:.3f}, MAE = {mae:.3f}, RMSE = {np.sqrt(mse):.3f}")print(f"MSE ble {mse / mse0:.1f} ganger større, MAE {mae / mae0:.1f} ganger")

Prøv: Dra malefeil opp og se på siste linje hvor mange ganger større «MSE» blir enn «MAE» når én måling blir feil.

Kode

Prediksjon og residualer med flere features

Python
import numpy as np # Features: areal (10 m²), antall soverom, avstand til sentrum (km)X = np.array([[6.0, 2.0, 3.0],              [8.5, 3.0, 7.5],              [4.0, 1.0, 1.0]])y = np.array([4.1, 4.6, 3.3])            # salgspris i millioner kronerw = np.array([0.35, 0.20, -0.12])b = 1.0  # @param 0..3 0.05 y_hat = X @ w + bprint(f"prediksjoner:   {np.round(y_hat, 3)}")print(f"residualer y-ŷ: {np.round(y - y_hat, 3)}") x_ny = X[0].copy()x_ny[0] += 1                              # én enhet (10 m²) mer areal, alt annet liktprint(f"endring i ŷ for 10 m² mer: {(x_ny @ w + b) - y_hat[0]:.3f}")

Prøv: Dra b til «residualer y-ŷ» blir nesten null, og se at «endring i ŷ for 10 m² mer» står stille.

Kode

R² mot snittbaselinen

Python
import numpy as np y = np.array([12.0, 15.0, 11.0, 18.0, 14.0])          # sanne verdierforskyvning = 0.0  # @param 0..10 0.5modell = np.array([12.5, 14.0, 11.5, 17.0, 15.0]) + forskyvning   # god modell, ev. forskjøvetbaseline = np.full_like(y, y.mean())                   # predikerer alltid snittetdaarlig = np.array([17.0, 11.0, 16.0, 12.0, 13.0])     # verre enn snittet def r2(y, y_hat):    return 1 - np.sum((y - y_hat) ** 2) / np.sum((y - y.mean()) ** 2) for navn, p in [("modell", modell), ("baseline", baseline), ("dårlig", daarlig)]:    print(f"{navn:9s} R² = {r2(y, p):7.3f}")

Prøv: Dra forskyvning opp og se R² på linja «modell» falle under «baseline» og under null, selv om prediksjonene følger formen.

Kode

MSE, gaussisk likelihood og MAE på samme data

Python
import numpy as np rng = np.random.default_rng(3)x = np.linspace(0, 4, 20)y = 1.5 * x + rng.normal(0, 0.5, size=20)avvik = 8.0  # @param 0..10 0.5sigma = 0.5  # @param 0.2..3 0.1y[-1] += avvik                              # ett grovt avvik (målefeil) ws = np.linspace(0.5, 3.0, 2501)            # kandidater for stigningen wres = y[None, :] - ws[:, None] * x[None, :] # residualer for hver kandidatmse = np.mean(res ** 2, axis=1)loglik = np.sum(-0.5 * np.log(2 * np.pi * sigma ** 2) - res ** 2 / (2 * sigma ** 2), axis=1)mae = np.mean(np.abs(res), axis=1) print(f"w som minimerer MSE:           {ws[mse.argmin()]:.3f}")print(f"w som maksimerer gauss-loglik: {ws[loglik.argmax()]:.3f}")print(f"w som minimerer MAE (Laplace): {ws[mae.argmin()]:.3f}   (sann stigning 1,5)")

Prøv: Dra sigma og se «w som minimerer MSE» og «w som maksimerer gauss-loglik» alltid være like; dra avvik til 0 og se «MAE» møte dem nær 1,5.

Kode

Lineær modell med og uten samspillsledd

Python
import numpy as npfrom sklearn.linear_model import LinearRegression rng = np.random.default_rng(5)n = 200vann = rng.uniform(0, 10, n)                # liter per ukegjodsel = rng.uniform(0, 10, n)             # gram per ukesamspill = 0.08  # @param 0..0.15 0.01vekst = 2 + 0.3 * vann + 0.02 * gjodsel + samspill * vann * gjodsel + rng.normal(0, 0.5, n) X_lin = np.column_stack([vann, gjodsel])X_int = np.column_stack([vann, gjodsel, vann * gjodsel])   # ny kolonne x1·x2for navn, X in [("uten x1·x2", X_lin), ("med x1·x2", X_int)]:    m = LinearRegression().fit(X, vekst)    print(f"{navn:10s} vekter = {np.round(m.coef_, 3)}, R² = {m.score(X, vekst):.3f}") # m er nå modellen med x1·x2: effekten av +1 g gjødsel er w2 + w12 · vannfor v in [0, 8]:    print(f"effekt av +1 g gjødsel når vann = {v}: {m.coef_[1] + m.coef_[2] * v:.2f}")

Prøv: Dra samspill mot 0 og se siste vekt på «med x1·x2» forsvinne og de to R²-verdiene bli like.

Kode

Polynomfeatures gir kurver med en lineær modell

Python
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import PolynomialFeatures x = np.array([[0.0], [1.0], [2.0], [3.0], [4.0]])y = np.array([1.0, 0.2, 1.1, 4.2, 8.8])      # krummer oppovergrad = 2  # @param 1..4 poly = PolynomialFeatures(degree=grad, include_bias=False)m = LinearRegression().fit(poly.fit_transform(x), y)mse = np.mean((y - m.predict(poly.transform(x))) ** 2)print(f"grad {grad}: {poly.n_output_features_} features av x, MSE {mse:.3f}")navn = PolynomialFeatures(degree=grad, include_bias=False).fit([[1.0, 2.0]]).get_feature_names_out(["a", "b"])print(f"med to features a og b: {len(navn)} kolonner, samspillsledd {[n for n in navn if ' ' in n]}") xs = np.linspace(-0.2, 4.2, 200).reshape(-1, 1)plt.figure()plt.scatter(x, y, label="data")plt.plot(xs, m.predict(poly.transform(xs)), label=f"lineær modell på grad {grad}-features", color="C1")plt.xlabel("x")plt.ylabel("y")plt.legend()plt.tight_layout()plt.show()

Prøv: Dra grad og se «MSE» synke mot null når kurven følger punktene (grad 4 treffer alle fem), mens antall «features av x» vokser.

Læringsmål

Hva du skal kunne etter å ha lest kapittelet.

  1. 01Regn ut prediksjon, residual, MSE, MAE og R² for en lineær regresjonsmodell fra en liten tabell
  2. 02Forklar hvorfor minimering av MSE er maksimum likelihood under uavhengig gaussisk støy, og hvilket tap Laplace-støy gir
  3. 03Velg mellom MSE og MAE ut fra hvor følsom metrikken skal være for uteliggere
  4. 04Forklar hvorfor en lineær modell ikke kan uttrykke vekselvirkninger, og regn ut effekten av en feature når et samspillsledd er lagt til
  5. 05Avgjør om en modell med polynom- eller produktfeatures er lineær i vektene, og løs normallikningen for et lite datasett
  6. 06Tolk R², også negative verdier, som en sammenligning med en baseline som alltid predikerer snittet