1. Konsep Dasar
Naïve Bayes adalah algoritma klasifikasi berbasis probabilitas yang menggunakan Teorema Bayes untuk menghitung kemungkinan sebuah data termasuk ke dalam kelas tertentu. Disebut “Naïve” (naif) karena algoritma ini mengasumsikan independensi antar fitur — artinya setiap fitur dianggap berdiri sendiri dan tidak saling memengaruhi. Walaupun asumsi ini sering tidak realistis, dalam praktiknya algoritma ini tetap sangat efektif.
2. Teorema Bayes
Teorema Bayes menyatakan:
P(H∣X)=P(X∣H)⋅P(H)P(X)P(H|X) = \frac{P(X|H) \cdot P(H)}{P(X)}
-
HH = hipotesis (kelas yang ingin diprediksi, misalnya spam atau ham)
-
XX = bukti (fitur input)
-
P(H)P(H) = probabilitas awal (prior) hipotesis
-
P(X∣H)P(X|H) = likelihood (probabilitas fitur muncul jika hipotesis benar)
-
P(H∣X)P(H|X) = probabilitas posterior (kelas yang diprediksi berdasarkan data)
3. Prinsip Klasifikasi
Untuk suatu data X=(x1,x2,…,xn)X = (x_1, x_2, …, x_n), probabilitas bahwa XX termasuk kelas CC adalah:
P(C∣X)∝P(C)∏i=1nP(xi∣C)P(C|X) \propto P(C) \prod_{i=1}^n P(x_i | C)
-
P(C)P(C) = prior probability (seberapa sering kelas CC muncul dalam data)
-
P(xi∣C)P(x_i|C) = likelihood setiap fitur xix_i terhadap kelas CC
-
Asumsi independensi fitur membuat perkalian sederhana ini mungkin.
-
Hasil akhir: pilih kelas dengan probabilitas tertinggi (MAP = Maximum A Posteriori).
4. Varian Naïve Bayes
Ada beberapa versi yang digunakan sesuai tipe data:
-
Gaussian Naïve Bayes
-
Untuk data kontinu (real-valued).
-
Asumsi distribusi normal (Gaussian).
-
Contoh: klasifikasi nilai ujian, data sensor.
-
-
Multinomial Naïve Bayes
-
Untuk data berupa frekuensi atau hitungan.
-
Banyak dipakai di text mining / NLP (contoh: spam filtering, sentiment analysis).
-
-
Bernoulli Naïve Bayes
-
Untuk data biner (0/1, ada/tidak ada).
-
Contoh: ada/tidaknya kata dalam dokumen.
-
5. Kelebihan
✅ Cepat & efisien, cocok untuk dataset besar.
✅ Mudah diimplementasikan dan hasilnya cukup baik.
✅ Performa bagus untuk klasifikasi teks (spam detection, analisis sentimen).
✅ Tidak butuh banyak data untuk mulai bekerja.
6. Kekurangan
❌ Asumsi independensi fitur sering tidak realistis.
❌ Tidak selalu akurat untuk data dengan fitur yang saling berkorelasi.
❌ Sulit menangani nilai nol pada probabilitas (bisa diatasi dengan Laplace Smoothing).
❌ Performa bisa kalah dari model kompleks seperti Random Forest atau Gradient Boosting.
7. Contoh Ilustrasi (Sederhana)
Misalkan kita ingin menentukan apakah email adalah Spam atau Ham berdasarkan kata yang muncul.
-
P(Spam)=0.4P(Spam) = 0.4, P(Ham)=0.6P(Ham) = 0.6
-
Kata “promo” muncul pada 80% email spam dan 10% email ham
Jika sebuah email berisi kata “promo”, maka:
P(Spam∣promo)∝P(Spam)⋅P(promo∣Spam)=0.4×0.8=0.32P(Spam|promo) \propto P(Spam) \cdot P(promo|Spam) = 0.4 \times 0.8 = 0.32 P(Ham∣promo)∝P(Ham)⋅P(promo∣Ham)=0.6×0.1=0.06P(Ham|promo) \propto P(Ham) \cdot P(promo|Ham) = 0.6 \times 0.1 = 0.06
Karena 0.32>0.060.32 > 0.06, email diprediksi sebagai Spam.
Contoh implementasi Naïve Bayes di Python menggunakan scikit-learn untuk kasus sederhana klasifikasi teks (spam filtering).
Contoh: Klasifikasi Email Spam / Ham
# Import library
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
# Dataset sederhana (contoh)
emails = [
“dapatkan promo gratis sekarang”,
“diskon besar belanja online”,
“ayo main bareng besok”,
“makan malam di rumah”,
“pinjaman uang cepat cair”,
“nonton film bareng yuk”
]
labels = [“spam”, “spam”, “ham”, “ham”, “spam”, “ham”] # spam / ham
# 1. Ubah teks menjadi fitur numerik (Bag of Words)
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
# 2. Split data untuk training & testing
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.3, random_state=42)
# 3. Buat model Naïve Bayes
model = MultinomialNB()
model.fit(X_train, y_train)
# 4. Prediksi
y_pred = model.predict(X_test)
# 5. Evaluasi
print(“Akurasi:”, accuracy_score(y_test, y_pred))
print(“\nLaporan Klasifikasi:\n”, classification_report(y_test, y_pred))
Penjelasan
-
CountVectorizer → mengubah teks jadi representasi numerik (frekuensi kata).
-
MultinomialNB → varian Naïve Bayes yang cocok untuk data teks.
-
Train-Test Split → pisahkan data untuk melatih & menguji model.
-
Evaluasi → cek akurasi & laporan klasifikasi.
Contoh visualisasi decision boundary Naïve Bayes dengan dataset sederhana 2D, supaya lebih mudah dipahami bagaimana algoritma ini mengklasifikasikan data.
Contoh: Gaussian Naïve Bayes pada Data 2D
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.naive_bayes import GaussianNB
# 1. Buat dataset 2D sederhana
X, y = make_classification(
n_samples=200, n_features=2, n_classes=2,
n_redundant=0, n_clusters_per_class=1, random_state=42
)
# 2. Latih model Naïve Bayes
model = GaussianNB()
model.fit(X, y)
# 3. Buat grid untuk visualisasi boundary
x_min, x_max = X[:, 0].min() – 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() – 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 200),
np.linspace(y_min, y_max, 200))
# Prediksi di seluruh grid
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 4. Plot decision boundary
plt.contourf(xx, yy, Z, alpha=0.4, cmap=plt.cm.RdYlBu)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor=”k”, cmap=plt.cm.RdYlBu)
plt.title(“Decision Boundary – Gaussian Naïve Bayes”)
plt.xlabel(“Fitur 1”)
plt.ylabel(“Fitur 2”)
plt.show()
Penjelasan
-
make_classification → membuat dataset 2D sederhana dengan 2 kelas.
-
GaussianNB → varian Naïve Bayes untuk data kontinu.
-
Decision boundary digambar dengan contourf, menunjukkan area prediksi tiap kelas.
-
Titik data asli ditampilkan dengan warna sesuai label.

Naïve Bayes adalah salah satu algoritma machine learning yang paling sederhana namun tetap efektif. Dengan memanfaatkan Teorema Bayes dan asumsi independensi antar fitur, algoritma ini mampu melakukan klasifikasi dengan cepat, bahkan pada dataset berukuran besar. Meskipun memiliki keterbatasan (seperti asumsi fitur yang sering tidak realistis), Naïve Bayes tetap menjadi pilihan utama untuk:
-
Klasifikasi teks (spam filtering, analisis sentimen, rekomendasi).
-
Aplikasi real-time karena efisien.
-
Kasus baseline sebelum mencoba model yang lebih kompleks.
Singkatnya:
Naïve Bayes = sederhana, cepat, efektif untuk banyak kasus praktis.
