Bayes Teoremi ve Naive Bayes Algoritması

Kasim Yuksel
Vakıf Katılım Ar-Ge Merkezi
5 min readJul 24, 2023

Merhabalar, bu yazıda Bayes Teoremi ve Naive Bayes algoritması ile makine öğrenmesi problemlerinin nasıl çözüldüğünü ele alacağız.

Naive Bayes algoritması, makine öğrenmesinde sınıflandırma problemlerini çözmek için kullanılan etkili bir olasılık tabanlı algoritmadır. Bu algoritma, Bayes teoremine dayanır ve veri kümesindeki özellikleri kullanarak bir örneğin hangi sınıfa ait olduğunu tahmin eder. Ancak, Bayes teoremi ve olasılık kavramları, algoritmayı anlamak ve kullanmak için temel bir önkoşuldur.

Olasılık Nedir?

Olasılık, bir olayın ne kadar muhtemel olduğunu ölçen matematiksel bir kavramdır. Olasılık değeri, 0 ile 1 arasında bir değer alır. 0 olasılığı, olayın gerçekleşmesinin imkansız olduğunu, 1 olasılığı ise olayın kesinlikle gerçekleşeceğini ifade eder.

Örneğin, bir zarı attığımızda, her bir yüzün gelme olasılığı eşit olduğundan, her yüzün gelme olasılığı 1/6'dır. Zarın toplam yüzey sayısı 6 olduğundan, tüm zar yüzlerinin gelme olasılığı toplamda 1 (veya %100) olmalıdır.

Bayes Teoremi ve Naive Bayes Algoritması

Bayes teoremi, olasılık hesaplamalarında önemli bir role sahiptir. Bu teorem, veri kümesindeki özelliklerin (d) verilen bir sınıfa (Class) ait olma olasılığını hesaplamak için kullanılır.

P ( c | d) = d olayı gerçekleştiğinde c olayının gerçekleşme olasılığı
P ( c ) = c olayının gerçekleşme olasılığı
P ( d | c ) = c olayı gerçekleştiğinde d olayının gerçekleşme olasılığı
P ( d ) = d olayının gerçekleşme olasılığı

Bayes teoremi, özellikle belirli bir koşul altında olayların olasılıklarının hesaplanmasında ve sınıflandırma problemlerinde kullanılır. Şimdi, Bayes teoremi hesaplamalarını adım adım gösterelim:

  1. Prior Olasılık Hesaplaması (P(c)): İlk adım, olayın gerçekleşme olasılığını bulmaktır. Bu, olayın gerçekleşme olasılığının, koşul bilinmeden önceki varsayımsal olasılığıdır.
  2. Likelihood Hesaplaması (P(d|c)): İkinci adım, olayın koşulunda başka bir olayın gerçekleşme olasılığını hesaplamaktır. Bu, olayın gerçekleşme durumunda diğer olayın gözlemlenen olasılığını ifade eder.
  3. Evidence Hesaplaması (P(d)): Üçüncü adım, diğer olayın olasılığını hesaplamaktır. Bu, olayın gözlemlenen olasılığını ifade eder.
  4. Posterior Olasılık Hesaplaması (P(c|d)): Son adım, olayın gerçekleşme olasılığını, verilen koşul altında (d koşulu altında) hesaplamaktır.

Bayes teoremi, verilen koşul altında olayların olasılıklarını hesaplamak için kullanıldığından, P(c|d) hesaplanmak istendiğinde, diğer olasılıklar bilinmelidir. Bu nedenle, Bayes teoremi, veri analizi ve tahminleme problemlerinde yaygın olarak kullanılan bir olasılık teoremidir.

Örnek Hesaplama:

Elimizde şu veriler olsun:

P(c) = 0.3, olay c'nin olasılığı (prior probability)
P(d|c) = 0.7, olay d'nin C koşulu altında olasılığı (likelihood)
P(d) = 0.6, olay B'nin olasılığı (evidence)

Bayes teoremine göre, P(c|d) hesaplamak için:

P(c|d) = (P(d|c) * P(c)) / P(d)
P(c|d) = (0.7 * 0.3) / 0.6
P(c|d) = 0.35

Sonuç olarak, olay d’nin gerçekleştiği bilindiğinde olay c’nin gerçekleşme olasılığı (posterior probability) 0.35'tir.

Naive Bayes algoritması, Bayes teoremini temel alırken, “naive” (saf) olarak adlandırılmasının sebebi, algoritmanın özellikler arasındaki bağımsızlığı varsaymasıdır. Yani, bir örnek içindeki özelliklerin birbirinden bağımsız olduğu düşünülür. Bu bağımsızlık varsayımı, olasılık hesaplamalarını basitleştirir ve algoritmanın veri kümesindeki sık desenleri daha hızlı tespit etmesini sağlar.

Naive Bayes algoritmasının temel uygulama adımları

  1. Veri Hazırlama: İlk adım, sınıflandırma problemini çözmek için kullanılacak veri kümesinin hazırlanmasıdır. Veri kümesi, özellikler (features) ve bu özelliklere ait etiketlerden (labels) oluşur. Her örnek, bir dizi özellik değeri ve bir etiket içerir.
  2. Özelliklerin Bağımsızlık Varsayımı: Naive Bayes algoritması, özelliklerin birbirinden bağımsız olduğu varsayımına dayanır. Yani, bir örneğin etiketi belirlenirken, özelliklerin birbiriyle ilişkisiz olduğu düşünülür. Bu varsayım, algoritmanın olasılık hesaplamalarını basitleştirir ve işlem süresini azaltır.
  3. Olasılık Hesaplamaları: Naive Bayes algoritması, Bayes teoremi ve koşullu olasılıklar temelinde çalışır. Her sınıfın olasılığını tahmin etmek için veri kümesindeki olasılık değerleri hesaplanır. Bu hesaplamalar, veri kümesindeki sınıfların ve özelliklerin dağılımlarını içerir.
  4. Model Eğitimi: Hesaplanan olasılıklar kullanılarak Naive Bayes sınıflandırıcı modeli eğitilir. Model, veri kümesindeki özelliklerin sınıflarla ilişkisini öğrenir ve bu bilgiyi tahmin yaparken kullanır.
  5. Yeni Örneklerin Sınıflandırılması: Eğitilen model, yeni verilerin sınıflandırılmasında kullanılır. Örneğin, yeni bir örneğin etiketini tahmin etmek için, örnekteki özellik değerlerini modele vererek ilgili sınıfın olasılığını hesaplar ve en yüksek olasılığa sahip sınıfı tahmin olarak verir.

Örnek Veri Kümesi ve Python Uygulaması

Aşağıda, bir e-postanın “spam” veya “ham” (spam olmayan) kategorisine ait olup olmadığını tahmin etmek için Naive Bayes algoritmasını kullanarak bir örnek göstereceğiz.

Örnek veri kümesi:

Veri: "Bu e-posta kazandınız! Hemen tıklayın!"
Sınıf: "spam"
Veri: "Toplantı saatimiz 14:00'te başlayacaktır."
Sınıf: "ham"
Veri: "Son teklifimiz: indirimli fiyatlarla alışveriş yapın!"
Sınıf: "spam"
Veri: "Toplantı yerimiz konferans salonudur."
Sınıf: "ham"

Python Kod Örneği:

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

# Veri ve etiketlerin oluşturulması
veri = ["Bu e-posta kazandınız! Hemen tıklayın!",
"Toplantı saatimiz 14:00'te başlayacaktır.",
"Son teklifimiz: indirimli fiyatlarla alışveriş yapın!",
"Toplantı yerimiz konferans salonudur."]
etiketler = ["spam", "ham", "spam", "ham"]

# Metin verilerini vektörlere dönüştürme
vectorizer = CountVectorizer()

X = vectorizer.fit_transform(veri)
# Naive Bayes algoritmasının eğitimi
model = MultinomialNB()
model.fit(X, etiketler)

# Yeni mail tahmini
yeni_mail = ["Katılmanız gereken toplantı saati değişti!"]
X_new = vectorizer.transform(yeni_mail)
tahmin = model.predict(X_new)
print("Tahmin edilen sınıf:", tahmin[0])

Bu örnek, Naive Bayes algoritmasının temel kullanımını göstermektedir. Metin verilerini sayısal özelliklere dönüştürmek için CountVectorizer kullanılır ve ardından MultinomialNB sınıflandırıcı modeli eğitilir. Yeni bir veri örneği verildiğinde, model, e-postanın "spam" veya "ham" kategorisine ait olup olmadığını tahmin eder.

Olasılık Hesaplamaları:

  • P(Spam): Toplam 4 e-postadan 2'si spam olduğundan, P(Spam) = 2/4 = 0.5
  • P(Ham): Toplam 4 e-postadan 2'si ham olduğundan, P(Ham) = 2/4 = 0.5
  • P(“kazandınız” | Spam): Spam e-postalardan sadece 1 tanesinde “kazandınız” ifadesi geçtiğinden, P(“kazandınız” | Spam) = 1/2 = 0.5
  • P(“kazandınız” | Ham): Ham e-postalardan hiçbirinde “kazandınız” ifadesi geçmediğinden, P(“kazandınız” | Ham) = 0/2 = 0
  • P(“toplantı” | Spam): Spam e-postalardan hiçbirinde “toplantı” ifadesi geçmediğinden, P(“toplantı” | Spam) = 0/2 = 0
  • P(“toplantı” | Ham): Ham e-postalardan 1 tanesinde “toplantı” ifadesi geçtiğinden, P(“toplantı” | Ham) = 1/2 = 0.5

Tahmin ve Sınıflandırma:

Yeni bir e-posta geldiğinde, Bayes teoremi kullanılarak her sınıf için bir olasılık hesaplanır ve en yüksek olasılığa sahip sınıf, e-postanın sınıflandırıldığı sınıf olur. Eğer iki sınıf için olasılıklar eşitse, daha fazla veri ile algoritma daha kesin bir tahmin yapabilir.

Python kod örneğimizde, MultinomialNB sınıflandırıcı modeli, bu olasılık hesaplamalarını otomatik olarak yapar ve yeni bir e-posta verildiğinde sınıf tahmini yapar.

Sonuç: Naive Bayes algoritması, sınıflandırma problemlerinde veri kümesinin büyüklüğüne ve karmaşıklığına bağlı olarak hızlı ve etkili sonuçlar veren bir algoritmadır. Ancak bağımsızlık varsayımı, özellikler arasındaki ilişkileri göz ardı edebilir, bu nedenle veri kümesine ve probleme bağlı olarak diğer sınıflandırma algoritmaları da düşünülmelidir.

Referanslar:

--

--

Kasim Yuksel
Vakıf Katılım Ar-Ge Merkezi

Marmara Üniversitesi - Bilgisayar Mühendisliği | RPA Developer @Vakıf Katılım