CMD + K

Kapittel 5Begreper & formler · Bayes-klassifikasjon og Naive Bayes
Referanseside · Kapittel 5

Begreper & referanser

Alle nøkkelbegrepene, formlene og referansene fra Bayes-klassifikasjon og Naive Bayes, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.

Øv med flashcards16 kort fra dette kapittelet

Begreper

Sentrale begreper fra kapittelet med korte definisjoner.

01Bayes' regel

Regelen , som snur en betinget sannsynlighet. I klassifikasjon gir den sannsynligheten for en klasse gitt observasjonen, ut fra hvor vanlig klassen er og hvor godt den forklarer observasjonen.

02Prior

Sannsynligheten for en klasse før vi ser på observasjonen, typisk andelen av treningsdataene som tilhører klassen.

03Likelihood

Sannsynligheten for observasjonen hvis klassen er sann. Den sier hvor typisk er for klassen, ikke hvor sannsynlig klassen er.

04Posterior

Sannsynligheten for klassen etter at observasjonen er tatt med. Bayes-klassifikatoren velger klassen med størst posterior.

05Evidens

Normaliseringsleddet . Det er likt for alle klassene, så det endrer ikke hvilken klasse som vinner, men det får posteriorene til å summere til 1.

06Naive Bayes-antakelsen

Antakelsen om at featurene er betinget uavhengige gitt klassen: . Den brukes også når den er brutt. Da blir posteriorene for ekstreme, men klassevalget er ofte fortsatt godt.

07Laplace-glatting

Å legge en pseudotelling , ofte 1, til hver telling og til nevneren, slik at ingen verdi får sannsynlighet 0 bare fordi den mangler i treningsdataene for en klasse.

08Generativ modell

En modell som lærer hvordan dataene fordeler seg i hver klasse, og , og finner med Bayes' regel. Naive Bayes er generativ, mens logistisk regresjon er diskriminativ og modellerer direkte.

Formler

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

bayes-klassifikasjon

Bayes' regel for klassifikasjon

Posterioren er likelihood ganger prior, delt på evidensen .

p(C|x)posterior
p(x|C)likelihood
p(C)prior
p(x)evidens (normaliseringsledd)
evidens-sum

Evidens som sum over klassene

Summen av tellerne for alle klassene. Den er lik for alle klassene, så den påvirker ikke argmax, men den gjør at posteriorene summerer til 1.

p(x)total sannsynlighet for observasjonen
C_kklasse k
naive-bayes-beslutning

Naive Bayes-beslutning

Velg klassen med størst prior ganger produktet av feature-likelihoodene. I kode summeres logaritmene i stedet for å gange sannsynlighetene.

Ĉvalgt klasse
dantall features
p(x_j|C)likelihood for feature j
laplace-estimat

Laplace-glattet estimat

Glattet andel av klassens eksempler med verdien . For ordmodeller er størrelsen på vokabularet og antall ordforekomster i klassen.

N(j,v,C)antall eksempler i klassen med x_j = v
n_Cantall eksempler i klassen
αpseudotelling, ofte 1
K_jantall mulige verdier for feature j
gaussisk-likelihood

Gaussisk likelihood

Normaltettheten med middelverdi og varians estimert fra klassens treningsdata. En tetthet kan være større enn 1.

μmiddelverdi for featuren i klassen
σ²varians for featuren i klassen

Kodesnutter

Kodesnutter fra kapittelet, vist literal.

Kode

Naive Bayes for hånd og med CategoricalNB

Python
import numpy as npfrom sklearn.naive_bayes import CategoricalNB # vind: 0 = svak, 1 = moderat, 2 = sterk      sikt: 0 = god, 1 = dårligX = np.array([[2, 1], [2, 0], [1, 1], [2, 1], [0, 0],              [1, 0], [0, 1], [1, 0], [0, 0], [1, 1]])y = np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0])   # 1 = ferja innstiltx_ny = [0, 1]                                  # svak vind, dårlig siktalfa = 1.0  # @param 0..2 0.1K = [3, 2]                                     # antall verdier per feature uskalert = []for c in [0, 1]:    Xc = X[y == c]    s = len(Xc) / len(X)                       # prior p(c)    for j, v in enumerate(x_ny):               # likelihood per feature        s *= (np.sum(Xc[:, j] == v) + alfa) / (len(Xc) + alfa * K[j])    uskalert.append(s)print(f"P(innstilt) for hånd: {uskalert[1] / sum(uskalert):.4f}")nb = CategoricalNB(alpha=alfa).fit(X, y)print(f"P(innstilt) sklearn:  {nb.predict_proba([x_ny])[0, 1]:.4f}")

Prøv: Dra alfa ned mot 0 og se «P(innstilt)» kollapse fordi svak vind aldri er sett på en innstilt dag.

Kode

Underflyt og log-sannsynligheter

Python
import numpy as np rng = np.random.default_rng(5)n_ord = 400  # @param 10..600 10lik_a = rng.uniform(0.001, 0.02, n_ord)         # p(ord | A)lik_b = lik_a * rng.uniform(0.8, 1.2, n_ord)    # p(ord | B), litt annerledesprior = np.array([0.5, 0.5]) produkt = prior * np.array([np.prod(lik_a), np.prod(lik_b)])print(f"rett produkt: {produkt}") logscore = np.log(prior) + np.array([np.log(lik_a).sum(), np.log(lik_b).sum()])vekter = np.exp(logscore - logscore.max())      # trekk fra maks før expprint(f"log-score:    {np.round(logscore, 1)}")print(f"posterior:    {np.round(vekter / vekter.sum(), 4)}")

Prøv: Dra n_ord og finn lengden der «rett produkt» blir 0, mens «log-score» fortsatt gir en «posterior».

Kode

Gaussisk Naive Bayes mot logistisk regresjon

Python
import numpy as npfrom sklearn.linear_model import LogisticRegressionfrom sklearn.naive_bayes import GaussianNB rng = np.random.default_rng(11)temp = np.concatenate([rng.normal(36.5, 0.5, 40), rng.normal(35.0, 1.0, 160)])y = np.concatenate([np.ones(40), np.zeros(160)])      # 1 = svermingkopi = 0  # @param 0..1X = temp[:, None]if kopi:   # legg til en nesten-kopi av temperaturen som feature nummer to    X = np.column_stack([temp, temp + rng.normal(0, 0.05, 200)]) def gauss(x, mu, var):    return np.exp(-(x - mu) ** 2 / (2 * var)) / np.sqrt(2 * np.pi * var) x_ny = np.full(X.shape[1], 36.0)                      # ny måling: 36,0 °Cuskalert = [np.mean(y == c) * np.prod(gauss(x_ny, X[y == c].mean(0), X[y == c].var(0)))            for c in [0, 1]]print(f"{X.shape[1]} feature(r), P(sverming) for en måling på 36,0 °C:")print(f"Naive Bayes for hånd: {uskalert[1] / sum(uskalert):.3f}")print(f"GaussianNB:           {GaussianNB().fit(X, y).predict_proba([x_ny])[0, 1]:.3f}")print(f"logistisk regresjon:  {LogisticRegression().fit(X, y).predict_proba([x_ny])[0, 1]:.3f}")

Prøv: Sett kopi til 1 og se «GaussianNB» flytte seg over 0,5 når temperaturen telles to ganger, mens «logistisk regresjon» står omtrent stille.

Læringsmål

Hva du skal kunne etter å ha lest kapittelet.

  1. 01Regn ut posterioren med Bayes' regel fra prior og likelihood, og velg klasse
  2. 02Forklar hvorfor normaliserer posteriorene uten å endre hvilken klasse som vinner
  3. 03Formuler Naive Bayes-antakelsen som betinget uavhengighet gitt klassen, og forklar hva som skjer når den brytes
  4. 04Regn ut Laplace-glattede sannsynligheter, og forklar problemet med nullsannsynligheter
  5. 05Forklar hvorfor Naive Bayes regner med log-sannsynligheter, og normaliser log-scorer til posteriorer
  6. 06Regn ut en Gaussisk likelihood for en kontinuerlig feature
  7. 07Skill generative modeller som Naive Bayes fra diskriminative som logistisk regresjon