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.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
En modell som beregner prediksjonen som en vektet sum av inputvariablene og et biasledd.
En verdi, som en vekt eller et biasledd, som lærealgoritmen tilpasser fra treningsdata.
Et konstantledd som lar den lineære prediksjonen forskyves uten at inputverdiene endres.
En funksjon som gir et tall på hvor dårlige modellens prediksjoner er for et datasett eller eksempel.
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.
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.
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.
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.
Lineær regresjonsmodell
Modellen predikerer en vektet sum av featureverdiene pluss et konstantledd.
Mean squared error
MSE straffer store residualer ekstra fordi hvert avvik kvadreres.
Mean absolute error
MAE gir lineær straff for residualer og er derfor mindre følsom for ekstreme feil enn MSE.
Forklart varians
sammenligner modellen med en baseline som alltid predikerer gjennomsnittet.
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.
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.
Modell med samspillsledd
Produktleddet gjør at effekten av én enhet blir og dermed avhenger av . Modellen er fortsatt lineær i vektene.
Normallikningen
Lukket løsning for vektene som minimerer MSE, når har en enerkolonne for konstantleddet og er inverterbar.
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Residualer, MSE og MAE
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.
Prediksjon og residualer med flere features
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.
R² mot snittbaselinen
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.
MSE, gaussisk likelihood og MAE på samme data
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.
Lineær modell med og uten samspillsledd
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.
Polynomfeatures gir kurver med en lineær modell
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.
- 01Regn ut prediksjon, residual, MSE, MAE og R² for en lineær regresjonsmodell fra en liten tabell
- 02Forklar hvorfor minimering av MSE er maksimum likelihood under uavhengig gaussisk støy, og hvilket tap Laplace-støy gir
- 03Velg mellom MSE og MAE ut fra hvor følsom metrikken skal være for uteliggere
- 04Forklar hvorfor en lineær modell ikke kan uttrykke vekselvirkninger, og regn ut effekten av en feature når et samspillsledd er lagt til
- 05Avgjør om en modell med polynom- eller produktfeatures er lineær i vektene, og løs normallikningen for et lite datasett
- 06Tolk R², også negative verdier, som en sammenligning med en baseline som alltid predikerer snittet