Bayes Teoremi: Algoritmanın Matematiksel Temeli
Naive Bayes, 18. yüzyılda Thomas Bayes'in formüle ettiği koşullu olasılık teoremine dayanır: P(A|B) = P(B|A) × P(A) / P(B). Sınıflandırma bağlamında bu formül şöyle yorumlanır: bir veri noktasının belirli bir sınıfa ait olma olasılığı, o sınıftaki olasılık ile öncül (prior) olasılığın çarpımıyla orantılıdır. Naive varsayım sayesinde her özelliğin katkısı ayrı ayrı hesaplanabilir: P(sınıf | x₁, x₂, ..., xₙ) ∝ P(sınıf) × P(x₁|sınıf) × P(x₂|sınıf) × ... × P(xₙ|sınıf). Tahmin aşamasında en yüksek sonsal (posterior) olasılığa sahip sınıf seçilir.
Naive Bayes Türleri
- check_circle Gaussian Naive Bayes: Sürekli sayısal özelliklerin normal dağılım izlediğini varsayar. Ortalama ve standart sapma eğitim verisinden tahmin edilir. Tıbbi tanı, sensör verisi ve bilimsel ölçüm veri setleri için uygundur.
- check_circle Multinomial Naive Bayes: Kelime sayım verisi üzerinde çalışır; bir kelimenin belgede kaç kez geçtiğini modeller. E-posta spam tespiti, haber kategorisi sınıflandırma ve döküman sınıflandırma için en yaygın tercih.
- check_circle Bernoulli Naive Bayes: Kelimenin belgede bulunup bulunmadığını ikili özellik (0/1) olarak modeller. Multinomial'dan farklı olarak sıklık yerine varlığı ölçer. Kısa metinler ve ikili özellikli veri setleri için avantajlı.
- check_circle Complement Naive Bayes: Dengesiz veri setleri için geliştirilmiş bir varyant. Her sınıf için diğer sınıfların istatistiklerini kullanarak parametre tahminindeki önyargıyı azaltır. Metin sınıflandırmada Multinomial NB'yi çoğunlukla geçmektedir.
Laplace Düzeltmesi: Sıfır Olasılık Sorunu
Naive Bayes'in kritik bir sorunu, eğitim verisinde hiç görülmemiş bir özellik-sınıf kombinasyonuyla karşılaşıldığında o kombinasyonun olasılığını 0 olarak tahmin etmesidir. Bu durum çarpım zincirinde tüm sonsal olasılığı sıfıra indirir ve modeli tamamen işlevsiz kılar. Laplace düzeltmesi (ya da +1 düzleştirmesi), her sayıma küçük bir α değeri (genellikle 1) ekleyerek bu sorunu çözer: P(x|sınıf) = (sayı(x,sınıf) + α) / (toplam sayı(sınıf) + α × özellik sayısı). Bu düzeltme modelin görülmemiş özellikler için makul olasılıklar üretmesini sağlar.
Performans ve Kullanım Alanları
Naive Bayes'in en önemli pratik avantajı hızıdır: eğitim O(n×d) karmaşıklıkla (n örnek, d özellik), tahmin ise O(d×k) karmaşıklıkla (k sınıf) gerçekleşir ve bu, büyük veri akışlarında gerçek zamanlı sınıflandırmayı mümkün kılar. Metin sınıflandırma literatüründe Multinomial NB, 1998-2010 döneminin e-posta spam filtreleme çözümlerinin omurgası olmuştur. Duygu analizi, dil tespiti (language detection), tıbbi ön-tanı sistemleri ve gerçek zamanlı içerik moderasyonunda hâlâ aktif olarak kullanılmaktadır. scikit-learn'de üç satırla uygulanabilmesi ve yorumlanabilir olasılıksal çıktısı nedeniyle yeni projeler için güçlü bir temel (baseline) modeli olmayı sürdürmektedir.
Sınırlılıklar ve Diğer Algoritmalarla Karşılaştırma
Naive Bayes'in temel zayıflığı koşullu bağımsızlık varsayımıdır. 'Bellek hızlanması' ve 'GPU hesaplama' gibi birlikte geçen ifadeler bağımsız değildir; bu korelasyonları yakalayamayan Naive Bayes bu örnekleri yanlış sınıflandırabilir. Özellik sayısı arttıkça ve özellikler arasındaki bağlantı güçlendikçe Random Forest veya XGBoost gibi ağaç tabanlı yöntemler Naive Bayes'i önemli ölçüde geçmektedir. Lojistik regresyon genellikle sayısal özellikler üzerinde daha iyi kalibrasyon sağlar. Buna karşın Naive Bayes, az veriyle etkili öğrenme, hız gerektiren akış uygulamaları ve yorumlanabilirliğin ön planda olduğu senaryolarda rakipsiz kalmaktadır.
scikit-learn ile Naive Bayes Uygulaması
Python ekosisteminde Naive Bayes, scikit-learn kütüphanesinin sklearn.naive_bayes modülünde yer alır. Metin verisi için tipik kullanım: CountVectorizer veya TfidfVectorizer ile metin özellik matrisine dönüştürülür, ardından MultinomialNB().fit(X_train, y_train) ile model eğitilir. Parametre olarak yalnızca alpha (Laplace düzeltmesi katsayısı) ayarlanması gerekir; bu da hiperparametre optimizasyonunu oldukça basit kılar. Gaussian NB ise sayısal veri için GaussianNB().fit(X, y) ile tek satırda çalışır. Pipeline API'siyle önişleme ve sınıflandırma adımları zincirlenebilir.
Sık Sorulan Sorular
- check_circle Naive Bayes neden 'naive' (saf) olarak adlandırılıyor? Tüm özelliklerin birbirinden bağımsız olduğunu varsaydığı için 'saf' (naive) olarak adlandırılır. Gerçekte kelimeler, pikseller veya sensör okumaları arasında korelasyon olsa da bu basitleştirici varsayım hesaplamayı pratik hale getirir.
- check_circle Naive Bayes hangi durumlarda en iyi sonucu verir? Az etiketli veriyle çalışırken, metin ve kategorik özellik ağırlıklı veri setlerinde, gerçek zamanlı tahmin gerektiğinde ve yorumlanabilir olasılıksal çıktının önemli olduğu durumlarda (tıbbi ön-tanı gibi) Naive Bayes güçlü bir seçimdir.
- check_circle Sıfır frekans (zero-frequency) sorunu nedir ve nasıl çözülür? Eğitim verisinde hiç görülmemiş bir özellik-sınıf kombinasyonu P=0 üretir ve tüm çarpım sıfıra düşer. Laplace düzeltmesi (alpha > 0) tüm sayımlara küçük bir değer ekleyerek bu sorunu ortadan kaldırır.
- check_circle Naive Bayes mi, lojistik regresyon mu seçmeliyim? Eğitim verisi azsa Naive Bayes genellikle üstündür (daha az parametre, daha az overfitting). Veri bollaştıkça lojistik regresyon bağımsızlık varsayımına ihtiyaç duymadığından daha iyi kalibrasyon sağlar. Başlangıç için her ikisini de deneyin.
- check_circle Naive Bayes çıktısı gerçek olasılık mı? Teorik olarak evet; ancak bağımsızlık varsayımı kalibrasyonu bozabilir. predict_proba() değerleri olasılık sıralaması için güvenilirdir, ancak kesin değerler için CalibratedClassifierCV ile kalibrasyon gerekebilir.
- check_circle Naive Bayes ile sınıf dengesizliği nasıl ele alınır? Sınıf ağırlıkları (class_prior parametresi) ayarlanarak öncül olasılıklar manuel belirlenebilir. Alternatif olarak Complement Naive Bayes, dengesiz veri setlerinde daha sağlam sonuç verecek şekilde tasarlanmıştır.