Lensa ML

Naive Bayes Classifier

Langkah 1 dari 6: Likelihood Kelas

Cara x menentukan P(x|kelas)

x yang diamati1.00
-4.0-1.80.52.85.00.00.10.30.40.6densitasP(x|spam)P(x|ham)x = 1.0
P(x|spam)
0.2283
P(x|ham)
0.0375
Mean spam
2.0
Mean ham
-1.0

Pada x=1.0, kurva spam memberi densitas 0,228, sedangkan ham 0,038, jadi P(x|spam) > P(x|ham). Likelihood ini masuk ke aturan Bayes di langkah berikutnya.

Geser slider x yang diamati dari −4 ke 5. Setiap kurva adalah Gaussian yang di-fit ke satu kelas: spam punya mean 2 dan standard deviation 0,8, sedangkan ham punya mean −1 dan standard deviation 0,9. Gaussian naive Bayes mempelajari persis dua angka ini per feature per kelas, jadi training cukup satu kali lewat pada data. Kedua kurva berpotongan di dekat x = 0.6. Densitas bukan probabilitas, dan untuk kurva yang cukup sempit nilainya bisa lebih dari 1. Hanya rasionya antarkelas yang memengaruhi keputusan.

Langkah 2 dari 6: Aturan Bayes

Prior × likelihood ÷ evidence = posterior

x yang diamati1.00
Prior P(spam)0.40
P(spam|x) = P(x|spam) × P(spam) / P(x)0.400P(spam)0.228P(x|spam)0.114P(x)0.802P(spam|x)×÷=
P(x|spam)
0.228
P(x|ham)
0.038
P(spam|x)
0.802
P(ham|x)
0.198
Cara menghitung P(x)
P(x) = P(x|spam)·P(spam) + P(x|ham)·P(ham)
= 0.228 × 0.40 + 0.038 × 0.60
= 0.1138

Dengan prior spam 40% dan x=1.0, posterior condong ke spam dengan 80,2%. Geser x mendekati mean spam (2) untuk menaikkan P(x|spam), atau mendekati mean ham (-1) untuk menaikkan P(x|ham).

Geser slider x yang diamati dan prior P(spam). Pada default x = 1 dengan prior 40%, likelihood-nya 0,228 untuk spam dan 0,038 untuk ham, jadi posterior-nya 0.228 × 0.4 / (0.228 × 0.4 + 0.038 × 0.6) ≈ 80% spam. P(x) sama untuk setiap kelas, jadi classifier bisa melewatinya dan langsung membandingkan pembilangnya. Dalam praktik, prior adalah frekuensi kelas di data training, yang berpengaruh saat kelas tidak seimbang, seperti pada deteksi penipuan atau skrining penyakit langka.

Langkah 3 dari 6: Asumsi Naive

Feature saling independen

Korelasi sebenarnya antar-feature0.60
-3.5-1.80.01.83.5-3.5-1.80.01.83.5Feature 1Feature 2Asumsi NBSebenarnya
Korelasi asli
0.60
Asumsi NB
0.00
Info diabaikan
0.32 bit
Model
Gaussian NB

Korelasi tinggi melanggar asumsi naive. NB masih bisa mengklasifikasi dengan baik karena ia hanya perlu memberi skor tertinggi pada kelas yang benar, bukan probabilitas yang terkalibrasi.

Geser slider korelasi antara −0,9 dan 0,9. Asumsi naive menyatakan feature saling independen di dalam tiap kelas, jadi P(x_1, x_2 | kelas) = P(x_1 | kelas) · P(x_2 | kelas). Feature yang berkorelasi melanggar ini, dan model lalu menghitung evidence yang sama dua kali, sehingga probabilitasnya terdorong ke 0 atau 1. Kartu info diabaikan mengukur apa yang hilang dari perkalian marginal: untuk dua feature Gaussian dengan korelasi ρ, mutual information adalah −½ log₂(1 − ρ²), yaitu 0,32 bit pada ρ = 0.6 dan 1,20 bit pada ρ = 0.9. Domingos dan Pazzani menunjukkan pada 1997 bahwa naive Bayes masih bisa menjadi classifier optimal pada banyak pelanggaran seperti ini.

Langkah 4 dari 6: Menggabungkan Feature

Mengalikan likelihood yang independen

Feature 1 (x₁): spam μ=2, ham μ=-11.00
Feature 2 (x₂): spam μ=1.5, ham μ=-0.50.80
Feature 1 (x₁=1.0)Feature 2 (x₂=0.8)0.228spam0.038ham0.346spam0.133ham×
Naive Bayes: kalikan likelihood yang independen
P(x₁|spam)·P(x₂|spam) = 0.228 × 0.346 = 0.0789
P(x₁|ham)·P(x₂|ham) = 0.038 × 0.133 = 0.0050
Dari joint likelihood ke posterior (prior sama)
P(spam|x) = P(x|spam)·P(spam) / P(x)
= 0.0789 × 0.50 / (0.0395 + 0.0025)
= 0.940
Joint spam
0.0789
Joint ham
0.0050
P(spam|x)
0.940
Putusan
Spam

Kedua feature bersama-sama condong ke spam (94,0%). Asumsi naive membuat model bisa mengalikan P(x₁|spam) × P(x₂|spam) tanpa memodelkan joint distribution. Geser x₂ mendekati mean ham (-0,5) supaya kedua feature berbeda arah.

Geser slider Feature 1 dan Feature 2, lalu lihat joint likelihood-nya. Dengan ratusan feature, mengalikan probabilitas kecil membuat angka floating-point mengalami underflow, jadi implementasi menjumlahkan log: log P(kelas) + Σ log P(x_i | kelas). Setiap feature lalu menambahkan skornya sendiri ke tiap kelas. Itu sebabnya satu feature yang sangat informatif bisa mengalahkan beberapa feature lemah. Untuk feature jumlah kata dan biner, penjumlahan ini membuat naive Bayes menjadi classifier linear di ruang log. Versi Gaussian di sini hanya butuh 2 parameter per feature per kelas.

Langkah 5 dari 6: Decision Boundary

Tempat posterior bernilai sama

Prior P(kelas A / spam)0.50
-4.0-1.80.52.85.0-3.0-1.30.52.34.0Feature 1Feature 2SpamHamgaris batas
Rasio prior
1.00
Geseran batas
0.00
Akurasi
99%
Log prior
0.00

Dengan prior yang sama, garis batas hanya bergantung pada likelihood. Letaknya di tempat P(A|x) = P(B|x).

Geser slider prior P(kelas A / spam) dari 0,1 ke 0,9 dan lihat garis batas putus-putus bergerak. Garis batas ada di tempat log P(x | A) + log P(A) sama dengan log P(x | B) + log P(B). Mengubah prior menambahkan konstanta log(P(A)/P(B)) ke satu sisi, yang menggeser garis batas tanpa mengubah bentuknya. Karena kedua kelas di sini punya variance berbeda, garis batasnya berupa kurva; dengan variance yang sama, garis batasnya akan lurus. Mengatur prior adalah salah satu cara menukar false positive dengan false negative.

Langkah 6 dari 6: Spam atau Ham?

Contoh klasifikasi teks

P(free|spam)0.80
P(money|spam)0.70
P(meeting|spam)0.10
P(hello|spam)0.30
P(prize|spam)0.75
Likelihood Kata: Spam vs Hamfree0.800.05money0.700.08meeting0.100.60hello0.300.55prize0.750.03P(kata|spam)P(kata|ham)
P(spam|kata)
0.995
P(ham|kata)
0.005
Kata teratas
prize
Putusan
SPAM

Likelihood kata bersama-sama condong ke spam (99,5%). Sinyal spam terkuat adalah "prize", dengan rasio spam/ham 25,0. Turunkan slider P(kata|spam) untuk membalik putusannya.

Geser lima slider P(kata|spam) sementara probabilitas ham tetap. Dengan nilai default, posterior-nya sekitar 99,5% spam, dan "prize" menjadi kata teratas dengan rasio 25. Demo ini mengalikan probabilitas kata yang muncul dalam pesan. Model Bernoulli juga mengalikan 1 − P(kata | kelas) untuk setiap kata kosakata yang tidak muncul, dan model multinomial menghitung kata yang berulang. Filter sungguhan memperkirakan probabilitas ini dari jumlah kata di email berlabel, dengan smoothing supaya tidak ada kata yang probabilitasnya nol.

Apa itu naive Bayes classifier?

Naive Bayes adalah keluarga classifier probabilistik yang menerapkan aturan Bayes dengan satu asumsi penyederhana: jika kelasnya diketahui, setiap feature independen dari feature lain. Dengan asumsi itu, likelihood seluruh input adalah hasil kali likelihood tiap feature, dan masing-masing mudah diperkirakan dari jumlah kemunculan atau dari mean dan variance per kelas. Prediksinya adalah kelas dengan posterior probability tertinggi.

Naive Bayes cukup di-train dengan satu kali lewat pada data dan hanya butuh sedikit data, jadi metode ini menjadi baseline standar untuk tugas klasifikasi teks seperti penyaringan spam, sentiment analysis, dan pelabelan topik. Variannya mengikuti jenis feature: Gaussian naive Bayes untuk nilai kontinu, multinomial naive Bayes untuk jumlah kata, dan Bernoulli naive Bayes untuk ada atau tidaknya kata.

Ide utama

  • Naive Bayes memilih kelas dengan posterior tertinggi, P(kelas | x) ∝ P(x | kelas) · P(kelas).
  • Metode ini mengasumsikan feature saling independen jika kelasnya diketahui, jadi likelihood adalah hasil kali suku tiap feature.
  • Training hanya memperkirakan statistik per kelas seperti mean, variance, atau frekuensi kata.
  • Implementasi menjumlahkan log-probabilitas, bukan mengalikan probabilitas, untuk menghindari underflow.
  • Mengubah prior menggeser decision boundary tanpa mengubah bentuknya.
  • Probabilitasnya sering terlalu yakin, bahkan ketika prediksi kelasnya akurat.

Pertanyaan umum

Kenapa naive Bayes disebut naive?

Metode ini mengasumsikan setiap feature independen dari feature lain begitu kelasnya diketahui. Asumsi itu jarang benar: dalam email, "free" dan "prize" cenderung muncul bersama. Asumsi ini adalah penyederhanaan yang disengaja agar model cepat dan hemat data.

Apa itu Laplace smoothing pada naive Bayes?

Jika suatu kata tidak pernah muncul di training set spam, perkiraan P(kata | spam)-nya nol, dan satu kemunculan di email baru akan memaksa probabilitas spam menjadi nol. Laplace smoothing (add-one) menambahkan 1 ke setiap hitungan sebelum membagi, jadi setiap kata tetap punya probabilitas kecil yang bukan nol. Besar tambahannya, yang sering disebut alpha, bisa di-tune.

Apakah naive Bayes termasuk generative atau discriminative?

Generative. Metode ini memodelkan cara tiap kelas menghasilkan feature, P(x | kelas), bersama class prior, lalu mengklasifikasi dengan aturan Bayes. Logistic regression adalah pasangan discriminative-nya. Ng dan Jordan (2001) menemukan bahwa naive Bayes mendekati error terbaiknya dengan lebih sedikit contoh training, sedangkan logistic regression biasanya mencapai error yang lebih rendah saat datanya melimpah.

Apakah probabilitas naive Bayes bisa diandalkan?

Sebagai probabilitas, biasanya tidak. Feature yang berkorelasi dihitung lebih dari sekali, sehingga posterior terdorong ke 0 atau 1. Saat probabilitas yang terkalibrasi diperlukan, Platt scaling atau isotonic regression bisa di-fit pada data held-out untuk mengoreksinya.

Penjelasan terkait

Referensi

  1. Domingos & Pazzani (1997), "On the Optimality of the Simple Bayesian Classifier under Zero-One Loss", Machine Learning
  2. Jurafsky & Martin, "Speech and Language Processing" (3rd ed. draft), chapter on Naive Bayes and Sentiment Classification
  3. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", chapter 4: Classification

Terakhir diperbarui