AI Atlas
Başlangıç· ~2 dk okuma#naive-bayes#probability#text-classification

Naive Bayes

Saf Bayes Sınıflandırıcı

Bayes teoremi ile özellikler arasında bağımsızlık varsayan, basit ama metin sınıflandırma gibi alanlarda etkileyici sonuç veren olasılıksal sınıflandırıcı.

NAİVE BAYESP(C | X) ∝ P(C) · ∏ P(xᵢ | C)Bayes teoremi · özellikler bağımsız varsayılırücretsiz92%kazandın88%toplantı4%rapor6%Spam filtresinde her kelimenin sınıfa ait olma olasılığı çarpılır.
Tanım

Naive Bayes, "verilen özellikler verildiğinde sınıfın olasılığı" sorusunu Bayes teoremiyle çevirir: P(sınıf | özellikler) ∝ P(sınıf) × ∏ P(özellik | sınıf). "Naive" (saf) sıfatı buradan gelir: özelliklerin birbirinden bağımsız olduğu varsayılır. Bu, çoğu zaman gerçeği yansıtmayan ama hesabı muazzam basitleştiren bir varsayımdır.

Üç ana türü vardır. Multinomial Naive Bayes kelime sayıları gibi sayım verisi için uygundur — spam filtresi, dil tespiti, haber kategorize etme. Bernoulli Naive Bayes her özelliğin var/yok olduğu durumlarda iyi çalışır. Gaussian Naive Bayes sayısal özellikleri normal dağılıma uydurur.

Eğitim çok hızlıdır; her sınıf için her özelliğin koşullu olasılığı sayılarak hesaplanır. Tahmin de aynı şekilde hızlıdır. Bu hız ve sadelik, özellikle büyük metin koleksiyonlarında onlarca yıldır standart bir baseline yapmıştır. Modern derin öğrenme modelleri tabii ki daha iyi çalışır, ama Naive Bayes çoğu zaman %1 yerine %5 veriyle aynı sonuca yaklaşır.

Benzetme

Bir doktor "bu hasta gripse hangi semptomları gösterir?" diye düşünmek yerine "ateş, öksürük, yorgunluk varsa grip olasılığı nedir?" diye sorar. Her semptomu ayrı ayrı ele alır, bağımsız sayar — gerçekte ateş ile öksürük ilişkili olabilir ama bu yaklaşım sadeliği yüzünden yine de iyi çalışır. Naive Bayes de tam olarak bu akıl yürütmenin matematik versiyonudur.

Gerçek dünyadan örnek

Bir e-posta servisi yeni gelen mesajı saniye içinde "spam mı?" diye değerlendirmek istiyor. Her e-postanın özelliği, içindeki kelime sayılarıdır (basit yaklaşımla). Eğitim verisi: 2 milyon etiketli e-posta.

Multinomial Naive Bayes eğitildiğinde her kelime için "spam'de olma olasılığı" ile "ham'de olma olasılığı" hesaplanır. "viagra" kelimesi spam'de 200 kat daha olası, "fatura" ham'de 50 kat daha olası gibi. Yeni e-posta geldiğinde içindeki kelimelerin koşullu olasılıkları çarpılır, en yüksek toplam olasılığa sahip sınıf seçilir.

Doğruluk %96+, eğitim 30 saniye, tahmin mikrosaniye. Modern transformer tabanlı bir model %98 ulaşabilir ama 100x maliyet ve gecikme ile. Çoğu üretim sistemi hâlâ Naive Bayes'i ön filtre olarak tutuyor.

Kod örnekleri
scikit-learn · metin sınıflandırmaPython
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report

pipe = Pipeline([
    ("tfidf", TfidfVectorizer(stop_words="english", ngram_range=(1, 2), min_df=2)),
    ("clf", MultinomialNB(alpha=0.1)),  # Laplace smoothing
])

pipe.fit(texts_train, y_train)

preds = pipe.predict(texts_test)
print(classification_report(y_test, preds))

# En "spam'i çağrıştıran" kelimeleri çıkar
feature_names = pipe.named_steps["tfidf"].get_feature_names_out()
log_prob_diff = (
    pipe.named_steps["clf"].feature_log_prob_[1]
    - pipe.named_steps["clf"].feature_log_prob_[0]
)
top_spam = log_prob_diff.argsort()[-20:][::-1]
print("Spam'i en çok çağrıştıran kelimeler:")
for i in top_spam:
    print(f"  {feature_names[i]}: {log_prob_diff[i]:+.3f}")
Ne zaman kullan
  • Metin sınıflandırma (spam, kategori, dil tespiti) — endüstri standardı baseline
  • Çok hızlı eğitim ve tahmin gerekiyorsa
  • Eğitim verisi sınırlı ama özellik (kelime) çeşitliliği yüksekse
  • Olasılık tabanlı yumuşak karar gerekiyorsa
Ne zaman kullanma
  • Özellikler arası ilişkiler kritikse — bağımsızlık varsayımı modeli zayıflatır
  • Sayısal özellikler arasında doğrusal olmayan etkileşimler varsa — gradient boosting daha iyi
  • Olasılık değerleri kesin kalibre olmalıysa — Naive Bayes olasılıkları aşırıya kaçma eğilimindedir
Sık yapılan hatalar

Sıfır olasılık problemi

Eğitimde hiç görülmemiş bir kelime test setinde geçince, o sınıfa ait koşullu olasılık 0 olur ve tüm çarpım 0'a düşer. Laplace smoothing (alpha parametresi) bunu çözer; mutlaka 0'dan büyük olsun.

Olasılıkları gerçekçi sanmak

Naive Bayes %99 spam dediği bir e-postada gerçekten %99 emin değildir; bağımsızlık varsayımı olasılıkları uçlara iter. Sıralama için kullan, mutlak değer için değil.

Bağımsızlık varsayımını ihmal etmek

Çok ilişkili özellikler (örn. 'fiyat' ve 'maliyet') aynı kanıtı iki kez sayar. Mümkünse seçim ya da feature engineering ile bunlardan birini at.