Materi
Naive Bayes memilih kelas dengan peluang terbesar setelah atribut sebuah data diketahui, memakai teorema Bayes. User Guide scikit-learn menyebut asumsi "naif"-nya: setiap pasang atribut dianggap saling bebas bila kelasnya diketahui. Dengan asumsi itu, skor kelas c untuk data bernilai x₁, x₂, … adalah P(c) × P(x₁ | c) × P(x₂ | c) × …, dan kelas dengan skor terbesar menjadi tebakan.
Semua peluang itu dihitung dari tabel frekuensi. P(c) adalah porsi baris berkelas c. P(x | c) adalah porsi baris berkelas c yang atributnya bernilai x. Skor belum berupa peluang; untuk mendapatkan peluang akhir (posterior), setiap skor dibagi jumlah semua skor.
Contoh: 20 pesan, 8 penipuan dan 12 biasa. Kata "hadiah" muncul di 6 pesan penipuan dan 2 pesan biasa. Untuk pesan baru yang memuat "hadiah": skor penipuan = 8/20 × 6/8 = 0,30 dan skor biasa = 12/20 × 2/12 = 0,10. Peluang akhir penipuan = 0,30 ÷ (0,30 + 0,10) = 0,75. pandas.crosstab dengan normalize="index" menyusun tabel P(x | c) sekaligus, satu baris per kelas.
import pandas as pd
pesan = pd.DataFrame({
"hadiah": ["ya"] * 6 + ["tidak"] * 2 + ["ya"] * 2 + ["tidak"] * 10,
"kelas": ["tipu"] * 8 + ["biasa"] * 12,
})
print(pd.crosstab(pesan["kelas"], pesan["hadiah"], normalize="index"))
# hadiah=ya: biasa 0.1667, tipu 0.75