Apa itu Naive Bayes?

Naive Bayes adalah algoritma klasifikasi probabilistik berdasarkan Teorema Bayes dengan asumsi "naive" bahwa setiap fitur independen satu sama lain. Meskipun asumsi ini jarang benar di dunia nyata, Naive Bayes tetap memberikan hasil yang sangat baik.

Teorema Bayes

P(A|B) = P(B|A) × P(A) / P(B)

Dalam konteks klasifikasi:
P(Class|Features) = P(Features|Class) × P(Class) / P(Features)

Jenis Naive Bayes

  • Gaussian NB: Untuk fitur numerik kontinu (asumsi distribusi normal).
  • Multinomial NB: Untuk count data (sering untuk text classification).
  • Bernoulli NB: Untuk fitur binary (ada/tidak ada).

Implementasi Python dengan Scikit-learn

from sklearn.naive_bayes import GaussianNB, MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
import pandas as pd

# Load data
data = pd.read_csv('data.csv')
X = data.drop('target', axis=1)
y = data['target']

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train model
model = GaussianNB()
model.fit(X_train, y_train)

# Predict
y_pred = model.predict(X_test)

# Evaluate
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")
print(classification_report(y_test, y_pred))

Contoh: Klasifikasi Spam Email

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# Data email
emails = ['Selamat! Anda menang hadiah', 'Meeting jam 3 sore', 'Klik link ini gratis!', 'Laporan sudah dikirim']
labels = ['spam', 'ham', 'spam', 'ham']

# Vectorize text
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)

# Train
model = MultinomialNB()
model.fit(X, labels)

# Predict email baru
email_baru = vectorizer.transform(['Anda dapat hadiah gratis'])
print(model.predict(email_baru))  # Output: ['spam']

Kelebihan dan Kekurangan

Kelebihan:

  • Cepat dan efisien.
  • Bekerja baik dengan data berdimensi tinggi.
  • Butuh sedikit data training.
  • Mudah diinterpretasi.

Kekurangan:

  • Asumsi independensi antar fitur jarang terpenuhi.
  • Sensitif terhadap fitur yang tidak relevan.