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.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
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.
Sannsynligheten for en klasse før vi ser på observasjonen, typisk andelen av treningsdataene som tilhører klassen.
Sannsynligheten for observasjonen hvis klassen er sann. Den sier hvor typisk er for klassen, ikke hvor sannsynlig klassen er.
Sannsynligheten for klassen etter at observasjonen er tatt med. Bayes-klassifikatoren velger klassen med størst posterior.
Normaliseringsleddet . Det er likt for alle klassene, så det endrer ikke hvilken klasse som vinner, men det får posteriorene til å summere til 1.
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.
Å 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.
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' regel for klassifikasjon
Posterioren er likelihood ganger prior, delt på evidensen .
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.
Naive Bayes-beslutning
Velg klassen med størst prior ganger produktet av feature-likelihoodene. I kode summeres logaritmene i stedet for å gange sannsynlighetene.
Laplace-glattet estimat
Glattet andel av klassens eksempler med verdien . For ordmodeller er størrelsen på vokabularet og antall ordforekomster i klassen.
Gaussisk likelihood
Normaltettheten med middelverdi og varians estimert fra klassens treningsdata. En tetthet kan være større enn 1.
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Naive Bayes for hånd og med CategoricalNB
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.
Underflyt og log-sannsynligheter
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».
Gaussisk Naive Bayes mot logistisk regresjon
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.
- 01Regn ut posterioren med Bayes' regel fra prior og likelihood, og velg klasse
- 02Forklar hvorfor normaliserer posteriorene uten å endre hvilken klasse som vinner
- 03Formuler Naive Bayes-antakelsen som betinget uavhengighet gitt klassen, og forklar hva som skjer når den brytes
- 04Regn ut Laplace-glattede sannsynligheter, og forklar problemet med nullsannsynligheter
- 05Forklar hvorfor Naive Bayes regner med log-sannsynligheter, og normaliser log-scorer til posteriorer
- 06Regn ut en Gaussisk likelihood for en kontinuerlig feature
- 07Skill generative modeller som Naive Bayes fra diskriminative som logistisk regresjon