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) — 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ı.
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:
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 →