İçerikler
🗺️ Haritam
☕ Destek OlGiriş YapKayıt Ol
Ana sayfainteraktif

Naive Bayes: spam filtresi kendi kendine nasıl öğrenir?

2026 · makine öğrenmesi · olasılık · 12 dakika

E-posta kutuna düşen her spam, bir olasılık hesabının sonucudur. Naive Bayes, kelimelerin geçmiş örüntülerine bakarak "bu mesaj spam mı?" sorusuna saniyeler içinde cevap üretir. Aşağıda sen de kendi mesajını oluştur — algoritma gerçek zamanlı hesaplasın.

Bayes teoremi nedir?

Temel fikir: bir gözlem yaptığında, önceki bilgini bu gözlemle güncelle. E-posta örneğinde:

P(spam | kelimeler)P(spam) × P(kelime₁|spam) × P(kelime₂|spam) × ···
  • P(spam) — prior: eğitim setindeki spam oranı
  • P(kelime | spam) — likelihood: bu kelime spam e-postalarda ne sıklıkta geçiyor?
  • P(spam | kelimeler) — posterior: bu kelimeleri görünce spam olasılığı nedir?

"Naive" (saf) ismini şuradan alır: her kelimenin birbirinden bağımsız olduğunu varsayar. Gerçekte "acele et" ve "bedava" birlikte daha anlamlı olsa da, model bunu görmezden gelir — ve yine de놀랄 derecede iyi çalışır.

Eğitim verisi

Model, 120 e-postadan öğrendi. Her kelime için spam ve normal e-postalardaki geçme sıklıkları hesaplandı.

120
e-posta
eğitim seti
48
spam
%40 oranında
72
normal
%60 oranında
⚡ Spam Filtresi — Mesaj OluşturKelimelere tıklayarak mesaja ekle
KELİME HAVUZU
kırmızı = spam yanlı kelime yeşil = normal e-posta kelimesi
Yukarıdan kelime seç…
Normal %60
🤔 NÖTR
Spam %40

Formülü açalım

Birden fazla kelime seçtiğinde model bunların olasılıklarını çarpar. "bedava" ve "kazandınız" aynı mesajda görünüyorsa:

P(spam) = 0.40
× P("bedava" | spam) = 0.84
× P("kazandınız" | spam) = 0.91
= 0.306 → normalize → %98 spam

Aynı şeyi normal e-posta için de hesaplar, ikisini toplar ve normalize eder (oranlarının toplama bölünmesi). Sonuç her zaman 0-1 arasında bir olasılık.

Neden "Naive"?

Model kelimelerin birbirinden bağımsız olduğunu varsayar — oysa gerçekte değiller. "Para" ve "kazan" birlikte geldiğinde spam sinyali çok daha güçlü olur, ama Naive Bayes her birini ayrı ayrı değerlendirir.

Bu varsayım teknik olarak yanlış, ama pratikte iyi çalışır. 1990'larda spam filtrelerinde ilk kez büyük ölçekte kullanıldı ve onlarca yıl standart yöntem olarak kaldı.

Güçlü yönleri

  • Hızlı — eğitimi ve tahmini O(n) zaman alır
  • Az veri — binlerce örnek olmadan da çalışır
  • Kategorik veri — metin sınıflandırma için doğal uyum
  • Yorumlanabilir — her kelimenin katkısını görebilirsin

Zayıf yönleri

  • Bağımsızlık varsayımı — kelimeler arasındaki ilişkileri görmez
  • Sıfır frekans — eğitimde hiç görülmemiş kelime olasılığı sıfırlar her şeyi (Laplace düzeltmesi gerekir)
  • Sürekli özellikler — sayısal veriler için Gaussian NB kullanmak gerekir

Python'da 10 satırda

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

# Eğitim verisi
emailler = ["bedava kazan", "toplantı raporu", "ücretsiz tıkla", "proje analiz"]
etiketler = [1, 0, 1, 0]  # 1=spam, 0=normal

# Metin → sayı matrisi
vek = CountVectorizer()
X = vek.fit_transform(emailler)

# Model eğit
model = MultinomialNB()
model.fit(X, etiketler)

# Yeni e-postayı sınıflandır
yeni = vek.transform(["bedava fırsat"])
print(model.predict(yeni))          # [1] → spam
print(model.predict_proba(yeni))    # [[0.03, 0.97]] → %97 spam

Özet

  • Naive Bayes, Bayes teoremini koşullu bağımsızlık varsayımıyla uygular
  • Her kelimenin spam/normal e-postalardaki olasılığını çarparak sınıflandırır
  • Hızlı, yorumlanabilir ve az veriyle iyi çalışır
  • Metin sınıflandırma, duygu analizi ve dil tespitinde hâlâ aktif kullanılır

Sonraki: Decision tree: ağacı sen büyüt →

Bu içerik: