Hoppa till innehållet
AI-grafen
E· Universitetstatistik-sannolikhet· ca 60 min· utvecklande· verifierad 2026-09-20

Maximum likelihood

Kunna härleda ML-skattningar och förklara att minimera cross-entropy är att maximera likelihood.

Förkunskaper

Intuition

Maximum likelihood svarar på frågan: vilka parametervärden gör den data jag faktiskt observerade mest sannolik?

Du singlar slant 10 gånger och får 7 krona. Vilket pp är mest troligt?

ppSannolikheten för just 7 av 10
0,30,009
0,50,117
0,70,267
0,90,057

Svaret är 0,7 — andelen i datan. Det känns självklart, men det följer av principen snarare än att antas.

Och principen är allmän. Nästan varje förlustfunktion i maskininlärning är en maximum likelihood-skattning under något antagande om bruset. Det är inte en samling knep — det är en princip med olika specialfall.

Härledning

Likelihood är sannolikheten för datan, sedd som en funktion av parametrarna:

L(θ)=∏i=1np(xi∣θ)L(\theta) = \prod_{i=1}^{n} p(x_i \mid \theta)

Vi maximerar i stället log-likelihood, av två skäl: produkten blir en summa (deriverbar term för term), och underflödet försvinner. Logaritmen är växande, så maximum ligger på samma ställe.

Exempel 1 — myntet. Med kk krona av nn:

ℓ(p)=klog⁡p+(n−k)log⁡(1−p)\ell(p) = k\log p + (n-k)\log(1-p) dℓdp=kp−n−k1−p=0  ⟹  p^=kn\frac{d\ell}{dp} = \frac{k}{p} - \frac{n-k}{1-p} = 0 \;\Longrightarrow\; \hat{p} = \frac{k}{n}

Exempel 2 — normalfördelningens medelvärde.

ℓ(μ)=−12σ2∑i(xi−μ)2+konstant\ell(\mu) = -\frac{1}{2\sigma^2}\sum_i (x_i - \mu)^2 + \text{konstant}

Att maximera detta är att minimera summan av kvadrerade avvikelser. Alltså:

Minsta kvadratmetoden är maximum likelihood under antagandet att bruset är normalfördelat.

Deriverar man får man μ^=xˉ\hat{\mu} = \bar{x} — stickprovsmedelvärdet.

Exempel 3 — klassificering. Med yi∈{0,1}y_i \in \{0,1\} och modellen p^i\hat{p}_i:

ℓ=∑i[yilog⁡p^i+(1−yi)log⁡(1−p^i)]\ell = \sum_i \left[y_i\log\hat{p}_i + (1-y_i)\log(1-\hat{p}_i)\right]

Det negativa av detta är binär korsentropi. Alltså:

Att minimera korsentropi är att maximera likelihood under en Bernoulli-modell.

Tabellen som knyter ihop allt:

Antagande om brusetML ger förlusten
NormalfördelatMSE
Laplace-fördelatMAE (absolut fel)
Bernoullibinär korsentropi
Kategorisktkorsentropi
PoissonPoisson-deviance

Och regularisering har samma ursprung. Lägger man till en prior och maximerar posteriorn i stället (MAP) blir en gaussisk prior exakt L2-regularisering, och en Laplace-prior exakt L1. De är alltså inte påklistrade straff utan följden av en antagen fördelning på parametrarna.

ML:s egenskaper: konsistent (konvergerar mot sanningen med mer data) och asymptotiskt effektiv (ingen skattare är bättre i gränsen). Men inte alltid väntevärdesriktig — ML-skattningen av normalfördelningens varians delar med nn, inte n−1n-1, och underskattar därför systematiskt.

Kod

import numpy as np
from scipy.optimize import minimize_scalar

# 1. Myntet: log-likelihood och dess maximum
k, n = 7, 10

def neg_ll(p):
    if not 0 < p < 1:
        return np.inf
    return -(k * np.log(p) + (n - k) * np.log(1 - p))

for p in (0.3, 0.5, 0.7, 0.9):
    print(f"  p={p}  L={np.exp(-neg_ll(p)):.4f}")
print("ML-skattning:", round(minimize_scalar(neg_ll, bounds=(1e-6, 1-1e-6),
                                             method="bounded").x, 4))   # 0.7

# 2. Normalfördelning: ML ger medelvärdet, och variansen med n (inte n-1)
rng = np.random.default_rng(0)
x = rng.normal(loc=5.0, scale=2.0, size=50)
print(round(x.mean(), 4), round(float(x.var(ddof=0)), 4), round(float(x.var(ddof=1)), 4))
#            ML-medel      ML-varians (/n)        väntevärdesriktig (/n-1)

# ML-variansen underskattar systematiskt — visa med upprepning
bias = [rng.normal(5, 2, 20).var(ddof=0) for _ in range(20000)]
print(round(float(np.mean(bias)), 3), "mot sant värde 4.0")     # ~3.80

# 3. Minsta kvadrat ÄR maximum likelihood under normalt brus
xs = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
ys = np.array([2.1, 3.9, 6.2, 7.8, 10.1])

def neg_ll_linjar(params, sigma=1.0):
    k_, m_ = params
    res = ys - (k_ * xs + m_)
    return 0.5 * np.sum(res**2) / sigma**2 + len(xs) * np.log(sigma)

from scipy.optimize import minimize
ml = minimize(neg_ll_linjar, [0.0, 0.0]).x
mk = np.polyfit(xs, ys, 1)
print(np.round(ml, 4), np.round(mk, 4))    # [1.99 0.03] [1.99 0.03] — identiska

# 4. Korsentropi ÄR negativ log-likelihood
y = np.array([1, 0, 1, 1])
phat = np.array([0.9, 0.2, 0.8, 0.6])
bce = -np.mean(y * np.log(phat) + (1 - y) * np.log(1 - phat))
ll = np.sum(y * np.log(phat) + (1 - y) * np.log(1 - phat))
print(round(float(bce), 4), round(float(-ll / len(y)), 4))     # samma tal

Behärskning innebär

  • Härleder en ML-skattning
  • Använder log-likelihood och vet varför
  • Kopplar ML till korsentropi och MSE

Logga in för att göra övningarna och bygga upp din behärskning.

Källor

Alla källor och licenser