Naive Bayes: Teorisi ve Python uygulaması

Jesus'
KaVe
4 min readOct 28, 2019

--

Genel Bakış

  • Naive Bayes nedir ve nasıl çalışır?
  • Naive Bayes türleri nelerdir?
  • Naive Bayes artıları ve eksileri nelerdir?
  • Naive Bayes nerelerde kullanılır?
  • Naive Bayes ipuçları ve uygulamalar…

Giriş

Veri biliminde pek çok algoritma kullanılır. Bunlardan biride Supervised Learning (Gözetimli öğrenme) başlığı altında incelediğimiz bir Classification (Sınıflandırma) olan Naive Bayes’tir. Naive Bayes üretken(generative) bir modeldir. Bir sonraki yazımızda üretken ve ayrımcı sınıflandırma(generative and discriminative classifier) farkından bahsedeceğiz.

Sınıflandırma, veri setimizdeki ayırt etmemize yarayan belirli özelliklerine(features (X)) bakarak hedefimizi(target (y)) katagorilere ayırmamızı sağlar.

Naive Bayes Nasıl Çalışır?

Bayes Teoremi

P(A|B) = B’nin doğru olduğu bilindiğinde A’nın olma olasılığı

P(B|A) = A’nın doğru olduğu bilindiğinde B’nin olma olasılığı

P(A) = A’nın olma olasılığı

P(B) = B’nin olma olasılığı

Naive Bayes 18.yy’da Thomas Bayes’in Bayes Teoremi temel alarak geliştirilimiştir. Hemen bir örnekle açıklayalım.

Aşağıda hava durumu(X) ve ona karşılık gelen kategorik oyunu oynama durumları(y) yer alıyor.

Öncelikle verilerimizi frekans tablosuna çeviriyoruz ve olasılıkları hesaplıyoruz. Sonrasında teoremi uygulamaya başlıyoruz.

Örneğin sorumuz şu olsun:

Hava yağmurlu olduğunda oyun oynar mıyım?

P(Evet | Yağmurlu) = P( Yağmurlu | Evet) * P(Evet) / P (Yağmurlu)

P(Yağmurlu | Evet) = 2 / 9 = 0.22

P (Evet) = 9/14 = 0.64

P(Yağmurlu)=5.14 = 0.36

Şimdi, P(Evet | Yağmurlu) = 0.22 * 0.64 / 0.36 = 0.39 olarak çıktı.

Burada tek sütunlu bir özellik(Hava durumu) kullandık. Eğer birden fazla sütunumuz olsaydı, bu işlemlerin aynısını her sütun için yapacaktık. Yani Naive Bayes’te her özellik(X1,X2,…Xn) birbirinden bağımsız olarak değerlendirilecekti.

Naive Bayes’in Artıları ve Eksileri

Artılar :

•Her özellik birbirinden bağımsız kabul edildiği için Logistic Regresyon gibi modellerden daha iyi performans gösterir.

•Basit ve kolay uygulanabilir.

•Az veriyle iyi işler başarabilir.

•Devamlı ve kesik(Continuous and discrete) veriler ile kullanılabilir.

•Dengesiz veri setinde de kullanılabilir.***

•Yüksek boyutlu verilerde(High Dimension Data) iyi çalışabilir.

•Hızlı olmasından dolayı gerçek zamanlı sistemlerde kullanılabilir.

•Alakasız özelliklerle ilişkiye girmemektedir.

Eksiler:

•Gerçek hayatta her özellik bir noktada birbirine bağımlıdır.

Örneğin,

Spor -> Yemek = Sporcu yemekleri

Aksesuar -> Teknoloji = Giyilebilir Teknolojiler

gibi kategoriler çok ayrı gibi gözükse bile birbirlerine en az bir noktada kesişirler.

  • Değişkenler arası ilişkiler modellenemez çünkü özellikler birbirinden bağımsız varsayılarak işlemler yapılır.
  • Zero Probability problemi ile karşı karşıya kalabilirsiniz. Zero Probability istediğimiz örneğin veri setinde hiç bulunmaması durumudur. Yani herhangi bir işleme sokulduğunda sonucu 0 yapacaktır. Bunun için en basit yöntem tüm verilere minimum değer ekleyerek(genellikle 1) bu olasılığı ortadan kaldırabilirsiniz.
Laplace (add-1) Smoothing İşlemi

Naive Bayes Türleri

Gaussian Naive Bayes: Eğer özelliklerimiz sürekli değer(continuous value) ise bu değerlerin bir gauss dağılımı veya diğer bir değişle normal dağılımdan örneklendiğini varsayıyoruz.

Multinominal Naive Bayes: Örneğin bir e-ticaret siteniz varsa pek çok kategoriniz olur. Çok sınıflı kategorileri -spor, kozmetik, giyim, petshop- sınıflandırmak için kullanılır.

Bernoulli Naive Bayes: Multinominal Naive Bayes’e benzer şekilde sınıflandırma yapar. Ancak tahminler sadece boolean(ikili) şekildedir. Evet/Hayır, Spam/Spam Değil, 1/0, Var/Yok gibi.

Naive Bayes Uygulama Alanları

•Gerçek Zamanlı Sistemler

•Çoklu Sınıflandırma Problemleri(Haber / E-Ticaret Kategorileri)

•Metin Sınıflandırma(Spam Filtreleme / Duygu Analizi)

•Hastalık Teşhisi

•Tavsiye Sistemleri (Recommendation System)

Naive Bayes İpuçları

— Eğer sürekli(continuous) olan özellikleriniz normal dağılım değilse, biz çeşitli yöntemlerle veya dönüşümlerle normal dağılıma çevirmeliyiz.

— Eğer veri setimizde sıfır frekans(zero frequency) durumu varsa, çeşitli yumuşatma (smoothing) teknikleri kullanarak bu durumu düzeltmeliyiz. Bu yöntemlerden bazıları;

Laplace Correction

Jelinek-Mercer Smoothing

Dirichlet Smoothing

Absolute Discounting

— Eğer birbirine çok benzeyen, ilişkisi çok fazla olan iki kategoriniz varsa bunlardan birini çıkarmanız önerilir. Bunun sebebi bu özellik iki kere oylanmış sayılacak ve gereğinden fazla önemli gözükecektir.

— Naive Bayes algoritmasında oynayabileceğiniz ve modeli iyileştirebileceğiniz fazla parametre bulunmamaktadır. Bunun için Naive Bayes kullanacaksanız veri ön işlemeyi, özellikle özellik seçimi (feature selection) çok iyi yapmanız gerekmektedir.

— Ensembling, boosting, bagging gibi sınıflandırma kombinasyon yöntemleri ile birleştirmeyi düşünebilirsiniz ama bu işe yaramaz. Sebebi ise bunların kullanma amacı varyansı düşürmektir. Naive Bayes’in ise minimuma indirecek bir varyansı yoktur.

PYTHON UYGULAMALARI

Normal Dağılım Formulü;

Naive Bayes’i elle yazalım.

Çıktı :

Split 768 row into train = 514 and test 254 rows
Accuracy %70.86614173228347

Scikit-Learn ile Naive Bayes;

Çıktı:

precision    recall  f1-score   support

0 1.00 1.00 1.00 50
1 0.94 0.94 0.94 50
2 0.94 0.94 0.94 50

accuracy 0.96 150
macro avg 0.96 0.96 0.96 150
weighted avg 0.96 0.96 0.96 150

[[50 0 0]
[ 0 47 3]
[ 0 3 47]]

Okuduğunuz için teşekkürler, bir sonraki yazıda görüşmek üzere…

Sorularınızı Linkedin üzerinden sorabilirsiniz.

Kaynaklar

--

--