Machine Learning|8-Naive Bayes yöntemi



Original Source Here

Machine Learning|8-Naive Bayes yöntemi

Herkese merhabalar. Bu yazımda sizlerle Naive Bayes yötemiyle ilgili bilgiler paylaşacağım ve ardından basit bir python uygulaması yapacağız.

Naive Bayes sınıflandırıcı nedir?

Örüntü tanıma problemine ilk bakışta oldukça kısıtlayıcı görülen bir önerme ile kullanılabilen olasılıksal bir yaklaşımdır. Bu önerme, örüntü tanımada kullanılacak her bir tanımlayıcı öznitelik ya da parametrenin istatistik açıdan bağımsız olması gerekliliğidir. Her ne kadar bu önerme Naive Bayes sınıflandırıcının kullanım alanını kısıtlasa da istatistik bağımsızlık koşulu esnetilerek kullanıldığında da daha karmaşık yapay sinir ağları gibi metotlarla karşılaştırabilir sonuçlar vermektedir. Bir Naive Bayes sınıflandırıcı, her özniteliğin birbirinden koşulsal bağımsız olduğu ve öğrenilmek istenen kavramın tüm bu özniteliklere koşulsal bağlı olduğu bir Bayes ağı olarak da düşünülebilir.

Photo by mattbuck.

Bayes teoremi

Naive Bayes sınıflandırıcısı Bayes teoreminin bağımsızlık önermesiyle basitleştirilmiş halidir. Bayes teoremi aşağıdaki denklemle ifade edilir;

P(A|B) ; B olayı gerçekleştiği durumda A olayının meydana gelme olasılığıdır (bakınız koşullu olasılık)

P(B|A) ; A olayı gerçekleştiği durumda B olayının meydana gelme olasılığıdır

P(A) ve P(B) ; A ve B olaylarının önsel olasılıklarıdır.

Burada önsel olasılık Bayes teoreminine öznellik katar. Diğer bir ifadeyle örneğin P(A) henüz elde veri toplanmadan A olayı hakkında sahip olunan bilgidir. Diğer taraftan P(B|A) ardıl olasılıktır çünkü veri toplandıktan sonra, A olayının gerçekleşmiş olduğu durumlarda B olayının gerçekleşme ihtimali hakkında bilgi verir.[1]

Sınıflandırma problemi

Naive Bayes Sınıflandırması Makine öğreniminde öğreticili öğrenme alt sınıfındadır. Daha açık bir ifadeyle sınıflandırılması gereken sınıflar(kümeler) ve örnek verilerin hangi sınıflara ait olduğu bellidir. E-posta kutusuna gelen e-postaların spam olarak ayrıştırılması işlemi buna örnek verilebilir. Bu örnekte spam e-posta ve spam olmayan e-posta ayrıştırılacak iki sınıfı temsil eder. Elimizdeki spam ve spam olmayan e-postalardan yaralanarak gelecekte elimize ulaşacak e-postaların spam olup olmadığına karar verecek bir Algoritma da öğreticili makine öğrenmesine örnektir.

Sınıflandırma işleminde genel olarak elde bir örüntü (pattern) vardır. Buradaki işlem de bu örüntüyü daha önceden tanımlanmış sınıflara sınıflandırmaktır. Her örüntü nicelik (feature ya da parametre) kümesi tarafından temsil edilir.

Nicelik kümesi

Yine yukarıda bahsedilen spam e-posta örneğinden devam edilecek olunursa; Posta kutumuzda bulunan spam e-postaları spam olmayan e-postalardan ayıran parametrelerden oluşan bir küme, mesela ikramiye,ödül gibi sözcüklerden oluşan, nicelik kümesine örnektir. Matematiksel bir ifadeyle nicelik kümesi;

ise

boyutlu nicelik vektörünü oluşturur.

x ∈ RL verildiğine göre ve S ayrıştırılacak sınıflar kümesiyse, Bayes teoremine göre aşagıdaki ifade yazılır.

ve

  • P(Si); Si’nin öncel olasılığı i = 1, 2, . . . , L,
  • P(Si|x); Si’nin ardıl olasılığı
  • p(x); x in Olasılık yoğunluk fonksiyonu (oyf)
  • p(x|Si); i =1 = 2, . . . , L, x’in koşullu oyf’si

Bayes karar teoremi

Elimizde sınıfı belli olmayan bir örüntü olsun. Bu durumda

sınıfı belli olmayan örüntünün L-boyutlu nicelik vektörüdür. Spam e-posta örneğinden gidecek olursak spam olup olmadığını bilmediğimiz yeni bir e-posta sınıfı belli olmayan örüntüdür.
Yine Si x’in atanacağı sınıf ise;
Bayes karar teorisine göre x sınıf Si’ya aittir eğer

diğer bir ifadeyle eğer

Naive Bayes sınıflandırması

Verilen bir x’in ( x = [x(1), x(2), . . . , x(L)]T ∈ RL) sınıf Si’ye ait olup olmadığına karar vermek için kullanılan yukarıda formüle edilen Bayes karar teoreminde istatistik olarak bağımsızlık önermesinden yararlanılırsa bu tip sınıflandırmaya Naive bayes sınıflandırılması denir. Matematiksel bir ifadeyle

ifadesindeki P(x|Si) terimi yeniden aşağıdaki gibi yazılır

böylece Bayes karar teoremi aşagıdaki şekli alır. Bayes karar teorisine göre x sınıf Si’ya aittir eğer

ve P(Si) ve P(Sj) i ve j sınıflarının öncel olasılıklarıdır. Elde olan veri kümesinden değerleri kolayca hesaplanabilir.

Naive bayes sınıflandırıcının kullanım alanı her ne kadar kısıtlı gözükse de yüksek boyutlu uzayda ve yeterli sayıda veriyle x’in (nicelik kümesi) bileşenlerinin istatistik olarak bağımsız olması koşulu esnetilerek başarılı sonuçlar elde edilebilinir.[2]

Uygulama alanları

Naive Bayes sınıflandırıcısı genel olarak veri madenciliğinde, biyomedikal mühendisliği alanında, hastalıkların ya da anormalliklerin tıbbi tanımlanmasında (otomatik olarak mühendislik ürünü tıbbi cihazlar tarafından tanı konulması)[3], elektrokardiyografi (EKG) grafiğinin sınıflandırılmasında[4], elektroensefalografi (EEG) grafiklerinin ayrıştırılmasında[5], genetik araştırmalarında[6], yığın mesaj tanımlanmasında[7], metin ayrıştırılmasında[8], ürün sınıflandırma[9] ve diğer bazı alanlarda kullanılır.

Şimdi Naive Bayes sınıflandırması için bir python uygulaması yapalım:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import confusion_matrix
from matplotlib.colors import ListedColormap
#veri setini alıyoruz
dataset = pd.read_csv('D:/python dataset/nb.csv')
#değerlerimizi aldık (maaş y , yaş x)
X = dataset.iloc[:, [2,3]].values
y = dataset.iloc[:, 4].values
#veri setini eğitiyoruz sonra verileri feature scaling ile normalize ettik.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
#GaussianNB komutu (naive bayes algoritması) ile eğitim modelimiz oluşturuldu.
classifier = GaussianNB()
classifier.fit(X_train, y_train)
#tahmin seti üretilir
y_pred = classifier.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
print(cm)
#Eğitim seti için grafik oluşturulur
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('black', 'gray')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('yellow', 'green'))(i), label = j)
plt.title('Naive Bayes (Eğitim Seti)')
plt.xlabel('Yaş')
plt.ylabel('Tahmini Maaş')
plt.legend()
plt.show()
#test seti için grafik oluşturuldu
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('black', 'gray')))
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('orange', 'purple'))(i), label = j)
plt.title('Naive Bayes (Deneme Seti)')
plt.xlabel('Yaş')
plt.ylabel('Tahmini Maaş')
plt.legend()
plt.show()

Elde edilen sonuçlar:

Kaynakça

[10] [11]

Hesaplarım ve İletişim için :

Gmail: sametcanunceee@gmail.com

Linkedin

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot

%d bloggers like this: