Faza 01 · lecția 07
Teorema lui Bayes
Scopul lecției: Probabilitatea descrie ceea ce vă așteptați să se întâmple. Teorema lui Bayes descrie ceea ce aflați.
Versiunea curentă AlexBred.com: primele 100 de lecții ale programului în limba română.
Cuprinsul lecției
- Obiective de învățare
- Problema
- Conceptul
- De la probabilitatea comună la teorema lui Bayes
- Cele patru componente
- Exemplul testului medical
- Exemplul filtrului de spam
- Naive Bayes: ipoteza independenței
- Estimarea prin verosimilitate maximă (MLE)
- Estimarea prin maxim a posteriori (MAP)
- Abordarea bayesiană și cea frecventistă: diferența practică
- De ce contează gândirea bayesiană în învățarea automată
- Construirea implementării
- Pasul 1: funcția pentru teorema lui Bayes
- Pasul 2: clasificatorul Naive Bayes
- Pasul 3: antrenarea pe date de spam
- Pasul 4: examinarea probabilităților învățate
- Utilizarea implementării
- Livrarea rezultatului
- Distribuții a priori conjugate
- Actualizarea bayesiană secvențială
- Legătura cu testarea A/B
- Exerciții
- Termeni-cheie
- Lecturi suplimentare
Probabilitatea descrie ceea ce vă așteptați să se întâmple. Teorema lui Bayes descrie ceea ce aflați.
Tip: Construire Limbaj: Python Cerințe preliminare: Faza 1, lecția 06 (Probabilități și distribuții) Durată: ~75 de minute
Obiective de învățare
- Aplicarea teoremei lui Bayes pentru calcularea probabilităților a posteriori pe baza probabilităților a priori, a verosimilităților și a evidenței
- Construirea de la zero a unui clasificator de text Naive Bayes cu netezire Laplace și calcule în spațiul logaritmic
- Compararea estimărilor MLE și MAP și explicarea corespondenței dintre MAP și regularizarea L2
- Implementarea actualizării bayesiene secvențiale folosind distribuții a priori conjugate Beta–Binomial pentru testarea A/B
Problema
Un test medical are o acuratețe de 99%. Rezultatul testului dvs. este pozitiv. Care este probabilitatea să aveți într-adevăr boala?
Majoritatea oamenilor răspund 99%. Răspunsul real depinde de raritatea bolii. Dacă o persoană din 10.000 are boala, un rezultat pozitiv înseamnă doar o probabilitate de aproximativ 1% să fiți bolnavi. Celelalte 99% dintre rezultatele pozitive sunt alarme false provenite de la persoane sănătoase.
Nu este o întrebare-capcană. Este teorema lui Bayes. Orice filtru de spam, orice diagnostic medical și orice model de învățare automată care cuantifică incertitudinea folosesc exact acest raționament. Porniți de la o convingere. Observați o dovadă. Apoi vă actualizați convingerea.
Dacă construiți sisteme de învățare automată fără să înțelegeți acest mecanism, veți interpreta greșit ieșirile modelelor, veți stabili praguri necorespunzătoare și veți lansa predicții excesiv de sigure.
Conceptul
De la probabilitatea comună la teorema lui Bayes
Din lecția 06 știți deja că probabilitatea condiționată este:
P(A|B) = P(A și B) / P(B)
Iar prin simetrie:
P(B|A) = P(A și B) / P(A)
Ambele expresii au același numărător: P(A și B). Egalați-le și rearanjați termenii:
P(A și B) = P(A|B) * P(B) = P(B|A) * P(A)
Prin urmare:
P(A|B) = P(B|A) * P(A) / P(B)
Aceasta este teorema lui Bayes: patru mărimi și o singură ecuație.
Cele patru componente
| Componentă | Denumire | Semnificație |
|---|---|---|
| P(A|B) | Probabilitate a posteriori | Convingerea actualizată despre A după observarea evidenței B |
| P(B|A) | Verosimilitate | Cât de probabilă este evidența B dacă A este adevărată |
| P(A) | Probabilitate a priori | Convingerea despre A înainte de observarea oricărei evidențe |
| P(B) | Evidență | Probabilitatea totală de a observa B în toate situațiile posibile |
Termenul de evidență P(B) are rol de normalizare. Îl puteți dezvolta folosind formula probabilității totale:
P(B) = P(B|A) * P(A) + P(B|nu A) * P(nu A)
Exemplul testului medical
O boală afectează o persoană din 10.000. Testul are o acuratețe de 99%: detectează 99% dintre persoanele bolnave și produce rezultate fals pozitive în 1% dintre cazuri.
P(bolnav) = 0.0001 (a priori: boala este rară)
P(pozitiv|bolnav) = 0.99 (verosimilitate: testul detectează boala)
P(pozitiv|sănătos) = 0.01 (rata rezultatelor fals pozitive)
P(pozitiv) = P(pozitiv|bolnav) * P(bolnav) + P(pozitiv|sănătos) * P(sănătos)
= 0.99 * 0.0001 + 0.01 * 0.9999
= 0.000099 + 0.009999
= 0.010098
P(bolnav|pozitiv) = P(pozitiv|bolnav) * P(bolnav) / P(pozitiv)
= 0.99 * 0.0001 / 0.010098
= 0.0098
= 0.98%
Mai puțin de 1%. Probabilitatea a priori domină. Când o afecțiune este rară, chiar și testele performante produc în majoritate rezultate fals pozitive. Din acest motiv, medicii solicită teste de confirmare.
Exemplul filtrului de spam
Primiți un e-mail care conține cuvântul „lottery”. Este spam?
P(spam) = 0.3 (30% dintre e-mailuri sunt spam)
P("lottery"|spam) = 0.05 (5% dintre mesajele spam conțin „lottery”)
P("lottery"|nu spam) = 0.001 (0.1% dintre mesajele legitime conțin „lottery”)
P("lottery") = 0.05 * 0.3 + 0.001 * 0.7
= 0.015 + 0.0007
= 0.0157
P(spam|"lottery") = 0.05 * 0.3 / 0.0157
= 0.955
= 95.5%
Un singur cuvânt modifică probabilitatea de la 30% la 95,5%. Un filtru de spam real aplică teorema lui Bayes simultan asupra a sute de cuvinte.
Naive Bayes: ipoteza independenței
Naive Bayes extinde mecanismul la mai multe caracteristici, presupunând că toate caracteristicile sunt independente condiționat de clasă:
P(clasă | caracteristică_1, caracteristică_2, ..., caracteristică_n)
= P(clasă) * P(caracteristică_1|clasă) * P(caracteristică_2|clasă) * ... * P(caracteristică_n|clasă)
/ P(caracteristică_1, caracteristică_2, ..., caracteristică_n)
Caracterul „naiv” provine din ipoteza independenței. Într-un text, aparițiile cuvintelor nu sunt independente: „New” și „York” sunt corelate. Totuși, ipoteza funcționează surprinzător de bine în practică, deoarece clasificatorul trebuie doar să ordoneze clasele, nu să producă probabilități calibrate.
Deoarece numitorul este același pentru toate clasele, îl puteți omite și puteți compara doar numărătorii:
scor(clasă) = P(clasă) * produsul valorilor P(caracteristică_i | clasă)
Alegeți clasa cu scorul cel mai mare.
Estimarea prin verosimilitate maximă (MLE)
Cum obțineți P(caracteristică|clasă) din datele de antrenare? Prin numărare.
P("free"|spam) = (numărul mesajelor spam care conțin „free”) / (numărul total al mesajelor spam)
Aceasta este estimarea prin verosimilitate maximă (maximum likelihood estimation, MLE): alegeți valorile parametrilor care fac ca datele observate să fie cât mai verosimile. Maximizați funcția de verosimilitate, care, în cazul numărărilor discrete, se reduce la frecvența relativă.
Problema este că, dacă un cuvânt nu apare niciodată în mesajele spam din datele de antrenare, MLE îi atribuie probabilitatea zero. Un singur cuvânt nevăzut anulează întregul produs. Remediați această problemă prin netezire Laplace:
P(cuvânt|clasă) = (număr(cuvânt, clasă) + 1) / (total_cuvinte_din_clasă + dimensiunea_vocabularului)
Adăugarea valorii 1 la fiecare numărătoare garantează că nicio probabilitate estimată pentru un cuvânt din vocabular nu va fi zero.
Notă tehnică a traducerii: În sens strict, netezirea Laplace adaugă exact 1 fiecărei numărători. Forma generalizată care adaugă o constantă pozitivă
alphase numește netezire Lidstone; parametrulsmoothingal implementării de mai jos permite această generalizare.
Estimarea prin maxim a posteriori (MAP)
MLE întreabă: ce parametri maximizează P(date|parametri)?
MAP întreabă: ce parametri maximizează P(parametri|date)?
Conform teoremei lui Bayes:
P(parametri|date) este proporțională cu P(date|parametri) * P(parametri)
MAP adaugă o distribuție a priori asupra parametrilor. Dacă presupuneți că parametrii trebuie să aibă valori mici, exprimați această convingere printr-o distribuție a priori care penalizează valorile mari. Forma regularizării rezultate depinde de distribuția a priori: o distribuție gaussiană conduce la o penalizare L2, iar o distribuție Laplace conduce la o penalizare L1. Penalizarea „ridge” din regresia ridge corespunde unei distribuții gaussiene a priori asupra ponderilor.
| Estimare | Optimizează | Echivalent în învățarea automată |
|---|---|---|
| MLE | P(date|parametri) | Antrenare fără regularizare |
| MAP | P(date|parametri) * P(parametri) | Regularizare determinată de distribuția a priori, de exemplu L2 pentru o distribuție gaussiană sau L1 pentru una Laplace |
Notă tehnică a traducerii: MAP nu este echivalentă în mod necondiționat cu regularizarea L1 sau L2. Echivalența se obține după aplicarea logaritmului negativ și depinde de forma și scara distribuției a priori, precum și de modelul de verosimilitate.
Abordarea bayesiană și cea frecventistă: diferența practică
Frecventiștii tratează parametrii ca valori fixe necunoscute. Ei întreabă: „Ce s-ar întâmpla dacă aș repeta acest experiment de multe ori?”
Bayesienii tratează parametrii ca distribuții. Ei întreabă: „Ținând cont de ceea ce am observat, ce cred despre parametri?”
Pentru construirea sistemelor de învățare automată, diferența practică este:
| Aspect | Frecventist | Bayesian |
|---|---|---|
| Rezultat | Estimare punctuală | Distribuție asupra valorilor |
| Incertitudine | Intervale de încredere (despre procedură) | Intervale de credibilitate (despre parametru) |
| Volum mic de date | Poate produce supraînvățare | Distribuția a priori are rol de regularizare |
| Calcul | De obicei mai rapid | Necesită adesea eșantionare (MCMC) |
Majoritatea sistemelor de învățare automată din producție folosesc abordarea frecventistă: SGD și estimări punctuale. Metodele bayesiene excelează când aveți nevoie de o incertitudine calibrată, de exemplu în decizii medicale și sisteme critice pentru siguranță, sau când datele sunt puține, ca în învățarea cu puține exemple (few-shot learning) și pornirea la rece (cold start).
De ce contează gândirea bayesiană în învățarea automată
Legătura este mai profundă decât o simplă analogie:
Distribuțiile a priori pot induce regularizare. O distribuție gaussiană a priori asupra ponderilor corespunde regularizării L2. O distribuție Laplace a priori corespunde regularizării L1. Mai general, un termen de regularizare poate fi interpretat drept logaritmul negativ al unei distribuții a priori numai dacă definește o distribuție validă după normalizare.
Distribuțiile a posteriori exprimă incertitudinea. O singură probabilitate prezisă nu indică gradul de siguranță al modelului în estimarea respectivă. Metodele bayesiene oferă o distribuție: „Cred că P(spam) se află între 0,8 și 0,95”.
Actualizările bayesiene reprezintă învățare online. Distribuția a posteriori de astăzi devine distribuția a priori de mâine. Când modelul observă date noi, își actualizează treptat convingerile, în loc să fie reantrenat de la zero.
Compararea modelelor este bayesiană. Criteriul informațional bayesian (BIC), verosimilitatea marginală și factorii Bayes folosesc raționamentul bayesian pentru a alege între modele fără supraînvățare.
bayes-update
Construirea implementării
Pasul 1: funcția pentru teorema lui Bayes
def bayes(prior, likelihood, false_positive_rate):
evidence = likelihood * prior + false_positive_rate * (1 - prior)
posterior = likelihood * prior / evidence
return posterior
result = bayes(prior=0.0001, likelihood=0.99, false_positive_rate=0.01)
print(f"P(sick|positive) = {result:.4f}")
Pasul 2: clasificatorul Naive Bayes
import math
from collections import defaultdict
class NaiveBayes:
def __init__(self, smoothing=1.0):
self.smoothing = smoothing
self.class_counts = defaultdict(int)
self.word_counts = defaultdict(lambda: defaultdict(int))
self.class_word_totals = defaultdict(int)
self.vocab = set()
def train(self, documents, labels):
for doc, label in zip(documents, labels):
self.class_counts[label] += 1
words = doc.lower().split()
for word in words:
self.word_counts[label][word] += 1
self.class_word_totals[label] += 1
self.vocab.add(word)
def predict(self, document):
words = document.lower().split()
total_docs = sum(self.class_counts.values())
vocab_size = len(self.vocab)
best_class = None
best_score = float("-inf")
for cls in self.class_counts:
score = math.log(self.class_counts[cls] / total_docs)
for word in words:
count = self.word_counts[cls].get(word, 0)
total = self.class_word_totals[cls]
score += math.log((count + self.smoothing) / (total + self.smoothing * vocab_size))
if score > best_score:
best_score = score
best_class = cls
return best_class
Log-probabilitățile previn subdepășirea numerică (underflow). Înmulțirea multor probabilități mici produce numere prea mici pentru reprezentarea în virgulă mobilă. Adunarea log-probabilităților este stabilă numeric și echivalentă matematic.
Notă tehnică a traducerii: Implementarea didactică atribuie o probabilitate și cuvintelor care nu apar în vocabularul de antrenare, deși numitorul nu include o categorie pentru acestea. Pentru o distribuție normalizată și un comportament comparabil cu
CountVectorizer, cuvintele necunoscute trebuie fie ignorate, fie mapate la un token special<UNK>inclus în vocabular și în numitor.
Pasul 3: antrenarea pe date de spam
train_docs = [
"win free money now",
"free lottery ticket winner",
"claim your prize today free",
"urgent offer free cash",
"congratulations you won free",
"meeting tomorrow at noon",
"project update attached",
"can we schedule a call",
"quarterly report review",
"lunch on thursday sounds good",
"team standup notes attached",
"please review the pull request",
]
train_labels = [
"spam", "spam", "spam", "spam", "spam",
"ham", "ham", "ham", "ham", "ham", "ham", "ham",
]
classifier = NaiveBayes()
classifier.train(train_docs, train_labels)
test_messages = [
"free money waiting for you",
"meeting rescheduled to friday",
"you won a free prize",
"please review the attached report",
]
for msg in test_messages:
print(f" '{msg}' -> {classifier.predict(msg)}")
Pasul 4: examinarea probabilităților învățate
def show_top_words(classifier, cls, n=5):
vocab_size = len(classifier.vocab)
total = classifier.class_word_totals[cls]
probs = {}
for word in classifier.vocab:
count = classifier.word_counts[cls].get(word, 0)
probs[word] = (count + classifier.smoothing) / (total + classifier.smoothing * vocab_size)
sorted_words = sorted(probs.items(), key=lambda x: x[1], reverse=True)
for word, prob in sorted_words[:n]:
print(f" {word}: {prob:.4f}")
print("\nTop spam words:")
show_top_words(classifier, "spam")
print("\nTop ham words:")
show_top_words(classifier, "ham")
Utilizarea implementării
Scikit-learn oferă implementări Naive Bayes pregătite pentru producție:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(train_docs)
clf = MultinomialNB()
clf.fit(X_train, train_labels)
X_test = vectorizer.transform(test_messages)
predictions = clf.predict(X_test)
for msg, pred in zip(test_messages, predictions):
print(f" '{msg}' -> {pred}")
Același principiu de clasificare. CountVectorizer gestionează tokenizarea, construirea vocabularului și ignorarea cuvintelor necunoscute, iar MultinomialNB gestionează intern netezirea și log-probabilitățile. Versiunea construită de la zero ilustrează mecanismul de bază în 40 de linii, cu limitarea privind cuvintele din afara vocabularului menționată mai sus.
Livrarea rezultatului
Clasa NaiveBayes construită aici demonstrează întregul flux de procesare (pipeline): tokenizare, estimarea probabilităților cu netezire Laplace și predicție în spațiul logaritmic. Codul din code/bayes.py rulează integral, fără alte dependențe decât biblioteca standard Python.
Distribuții a priori conjugate
Când distribuția a priori și cea a posteriori aparțin aceleiași familii de distribuții, distribuția a priori se numește „conjugată”. Astfel, actualizarea bayesiană devine simplă din punct de vedere algebric: obțineți o distribuție a posteriori în formă închisă, fără integrare numerică.
| Verosimilitate | Distribuție a priori conjugată | Distribuție a posteriori | Exemplu |
|---|---|---|---|
| Bernoulli | Beta(a, b) | Beta(a + succese, b + eșecuri) | Estimarea probabilității rezultatului „cap” la aruncarea unei monede |
| Normală (varianță cunoscută) | Normală(mu_0, sigma_0) | Normală(medie ponderată, varianță mai mică) | Calibrarea senzorilor |
| Poisson | Gamma(a, b) | Gamma(a + suma numărărilor, b + n), când b este parametrul de rată | Modelarea ratelor de sosire |
| Multinomială | Dirichlet(alpha) | Dirichlet(alpha + numărători) | Modelarea temelor, modele lingvistice |
De ce este important: fără distribuții a priori conjugate, aveți adesea nevoie de integrare numerică, eșantionare Monte Carlo sau inferență variațională pentru a aproxima distribuția a posteriori. Cu distribuții conjugate, actualizați direct parametrii familiei respective.
Notă tehnică a traducerii: Actualizarea Gamma(a + suma numărărilor, b + n) presupune parametrizarea distribuției Gamma prin formă și rată; pentru parametrizarea prin scară, formula diferă. Numărul parametrilor actualizați depinde de familie: Beta–Binomial folosește două valori, în timp ce o distribuție Dirichlet actualizează un vector întreg de parametri.
Distribuția Beta este cea mai frecventă distribuție a priori conjugată în practică. Beta(a, b) reprezintă convingerea despre un parametru de probabilitate. Media este a/(a+b). Cu cât a+b este mai mare, cu atât distribuția este mai concentrată, deci exprimă o siguranță mai mare.
Cazuri speciale ale distribuției Beta a priori:
- Beta(1, 1) = uniformă. Nu aveți nicio convingere inițială despre parametru.
- Beta(10, 10) = concentrată în jurul valorii 0,5. Aveți convingerea fermă că parametrul este apropiat de 0,5.
- Beta(1, 10) = asimetrică spre 0. Considerați că parametrul are o valoare mică.
Regula de actualizare este extrem de simplă:
A priori: Beta(a, b)
Date: s succese, f eșecuri
A posteriori: Beta(a + s, b + f)
Fără integrale. Fără eșantionare. Doar adunare.
Actualizarea bayesiană secvențială
Inferența bayesiană este în mod natural secvențială. Distribuția a posteriori de astăzi devine distribuția a priori de mâine. În modelele care admit statistici suficiente actualizabile, precum Beta–Binomial, sistemele pot învăța incremental fără să reproceseze toate datele istorice.
Exemplu concret: estimarea probabilității ca o monedă să cadă cu fața „cap”.
Ziua 1: nu există încă date. Porniți de la Beta(1, 1), o distribuție a priori uniformă. Nu aveți nicio convingere inițială.
- Media a priori: 0,5
- Distribuția a priori este uniformă pe [0, 1]
Ziua 2: observați 7 rezultate „cap” și 3 rezultate „pajură”. Distribuția a posteriori = Beta(1 + 7, 1 + 3) = Beta(8, 4)
- Media a posteriori: 8/12 = 0,667
- Evidența sugerează că moneda favorizează rezultatul „cap”
Ziua 3: observați încă 5 rezultate „cap” și 5 rezultate „pajură”. Folosiți distribuția a posteriori de ieri ca distribuție a priori pentru astăzi. Distribuția a posteriori = Beta(8 + 5, 4 + 5) = Beta(13, 9)
- Media a posteriori: 13/22 = 0,591
- Noile date echilibrate au readus estimarea spre 0,5
Ordinea observațiilor nu contează. Actualizarea Beta(1,1) cu toate cele 12 rezultate „cap” și 8 rezultate „pajură” deodată produce Beta(13, 9), adică același rezultat. În modelul Beta–Binomial, actualizarea secvențială și actualizarea pe loturi sunt echivalente matematic, iar distribuția a posteriori este rezumată de numărul cumulat de succese și eșecuri. Astfel, puteți lua decizii în fiecare etapă fără să stocați datele brute.
Notă tehnică a traducerii: Posibilitatea de a renunța la datele istorice se bazează aici pe existența unor statistici suficiente finite. Inferența bayesiană secvențială este generală, dar modelele fără asemenea statistici pot necesita păstrarea datelor, aproximări sau o reprezentare mai complexă a distribuției a posteriori.
Acesta este fundamentul învățării online în sistemele de învățare automată aflate în producție. Eșantionarea Thompson pentru probleme de tip bandit, sistemele de recomandare incrementale și detectoarele de anomalii în flux folosesc toate acest tipar.
Legătura cu testarea A/B
Testarea A/B poate fi formulată ca o problemă de inferență bayesiană, dar există și metode frecventiste de testare A/B.
Notă tehnică a traducerii: Secțiunea următoare descrie o abordare bayesiană a testării A/B. Alegerea cadrului bayesian sau frecventist depinde de întrebarea urmărită, de regula de decizie și de garanțiile statistice necesare.
Configurație: testați două culori pentru un buton. Varianta A este albastră, iar varianta B este verde. Doriți să aflați care dintre ele obține mai multe clicuri.
Testul A/B bayesian:
- Distribuții a priori. Porniți de la Beta(1, 1) pentru ambele variante. Nu favorizați inițial niciuna.
- Date. Varianta A: 50 de clicuri din 1.000 de afișări. Varianta B: 65 de clicuri din 1.000 de afișări.
- Distribuții a posteriori.
- A: Beta(1 + 50, 1 + 950) = Beta(51, 951). Media = 0,051
- B: Beta(1 + 65, 1 + 935) = Beta(66, 936). Media = 0,066
- Decizie. Calculați P(B > A), probabilitatea ca rata reală de conversie pentru B să fie mai mare decât cea pentru A.
Calcularea analitică a P(B > A) este dificilă. Însă metoda Monte Carlo o face foarte simplă:
1. Extrageți 100.000 de eșantioane din Beta(51, 951) -> samples_A
2. Extrageți 100.000 de eșantioane din Beta(66, 936) -> samples_B
3. P(B > A) = proporția eșantioanelor pentru care B > A
Dacă P(B > A) > 0,95, lansați varianta B. Dacă valoarea este între 0,05 și 0,95, continuați colectarea datelor. Dacă P(B > A) < 0,05, lansați varianta A.
Avantajele față de testarea A/B frecventistă:
- Obțineți o afirmație probabilistică directă: „există o probabilitate de 97% ca B să fie mai bună”
- Fără confuzia valorii p și fără formulări evazive precum „nu putem respinge ipoteza nulă”
- Puteți monitoriza distribuția a posteriori pe parcurs, însă o regulă de oprire bazată pe un prag posterior trebuie calibrată separat dacă doriți garanții frecventiste asupra ratei rezultatelor fals pozitive
- Puteți include cunoștințe a priori, de exemplu faptul că testele anterioare sugerează de obicei rate de conversie între 3% și 8%
| Aspect | Test A/B frecventist | Test A/B bayesian |
|---|---|---|
| Rezultat | Valoare p | P(B > A) |
| Interpretare | „Cât de surprinzătoare sunt aceste date dacă A=B?” | „Cât de probabil este ca B să fie mai bună decât A?” |
| Oprire anticipată | Verificarea repetată necorectată poate crește rata rezultatelor fals pozitive | Posteriorul rămâne interpretabil în cadrul modelului, dar rata frecventistă a rezultatelor fals pozitive nu este garantată automat |
| Cunoștințe a priori | Nu sunt folosite | Codificate ca distribuție Beta a priori |
| Regula de decizie | p < 0,05 | P(B > A) > prag |
Notă tehnică a traducerii: Oprirea opțională nu invalidează automat inferența bayesiană atunci când modelul și distribuția a priori sunt specificate coerent, dar nici nu păstrează automat o rată frecventistă prestabilită a rezultatelor fals pozitive. Pentru o asemenea garanție, regula de monitorizare și oprire trebuie evaluată sau calibrată explicit.
Exerciții
-
Teste multiple. Un pacient obține de două ori un rezultat pozitiv la teste independente, ambele având o acuratețe de 99%, iar prevalența bolii fiind de o persoană din 10.000. Care este P(bolnav) după ambele teste? Folosiți probabilitatea a posteriori de la primul test ca probabilitate a priori pentru al doilea.
-
Efectul netezirii. Rulați clasificatorul de spam cu valorile de netezire 0,01, 0,1, 1,0 și 10,0. Cum se modifică probabilitățile celor mai relevante cuvinte? Ce se întâmplă când
smoothing=0și un cuvânt apare numai în mesajele ham? -
Adăugați caracteristici. Extindeți clasa NaiveBayes astfel încât să folosească și lungimea mesajului (scurt/lung) drept caracteristică, pe lângă numărătoarea cuvintelor. Estimați P(scurt|spam) și P(scurt|ham) din datele de antrenare și includeți rezultatul în scorul predicției.
-
Calculați MAP manual. Pentru datele observate (7 rezultate „cap” în 10 aruncări ale monedei), calculați estimarea MAP a probabilității de apariție a rezultatului „cap”, folosind o distribuție a priori Beta(2,2). Comparați-o cu estimarea MLE (7/10).
Termeni-cheie
| Termen | Cum îi spune lumea | Ce înseamnă de fapt |
|---|---|---|
| Probabilitate a priori | „Estimarea mea inițială” | P(ipoteză) înainte de observarea evidenței. În anumite modele, logaritmul său negativ induce un termen de regularizare. |
| Verosimilitate | „Cât de bine se potrivesc datele” | P(evidență|ipoteză). Cât de probabile sunt datele observate în condițiile unei anumite ipoteze. |
| Probabilitate a posteriori | „Convingerea mea actualizată” | P(ipoteză|evidență). Probabilitatea a priori înmulțită cu verosimilitatea, apoi normalizată. |
| Evidență | „Constanta de normalizare” | P(date) pentru toate ipotezele. Garantează că suma probabilităților a posteriori este 1. |
| Naive Bayes | „Acel clasificator de text simplu” | Un clasificator care presupune că toate caracteristicile sunt independente condiționat de clasă. Funcționează bine, deși ipoteza este falsă. |
| Netezire Laplace | „Netezire prin adăugarea valorii unu” | Adăugarea exactă a valorii 1 la numărătoarea fiecărei caracteristici, pentru a preveni probabilitățile zero asociate datelor nevăzute. Adăugarea unei alte constante pozitive este netezire Lidstone. |
| MLE | „Folosiți direct frecvențele” | Alegerea parametrilor care maximizează P(date|parametri). Nu folosește o distribuție a priori și poate produce supraînvățare când datele sunt puține. |
| MAP | „MLE cu o distribuție a priori” | Alegerea parametrilor care maximizează P(date|parametri) * P(parametri). Poate fi interpretată ca MLE regularizată, forma regularizării fiind determinată de distribuția a priori. |
| Log-probabilitate | „Lucrați în spațiul logaritmic” | Folosirea log(P) în loc de P pentru a evita subdepășirea în virgulă mobilă atunci când se înmulțesc multe numere mici. |
| Rezultat fals pozitiv | „O alarmă greșită” | Testul indică un rezultat pozitiv, deși starea reală este negativă. Contribuie la eroarea neglijării ratei de bază. |
Lecturi suplimentare
- 3Blue1Brown: Bayes’ theorem - explicație vizuală bazată pe exemplul testului medical
- Stanford CS229: Generative Learning Algorithms - Naive Bayes și legătura sa cu modelele discriminative
- Think Bayes - carte gratuită despre statistica bayesiană, cu cod Python
- scikit-learn Naive Bayes - implementări pentru producție și situațiile potrivite fiecărei variante
Sursă: Bayes’ Theorem — original
Navigare: înapoi: 01.06 — Probabilități și distribuții · Faza 1 — Fundamente matematice · Catalog complet · în continuare: 01.08 — Optimizare.