Sınıflandırma Algoritmaları - Naif Bayes
Naif Bayes Algoritmasına Giriş
Naïve Bayes algoritmaları, tüm yordayıcıların birbirinden bağımsız olduğuna dair güçlü bir varsayımla Bayes teoremini uygulamaya dayanan bir sınıflandırma tekniğidir. Basit bir deyişle, varsayım, bir sınıftaki bir özelliğin varlığının aynı sınıftaki diğer herhangi bir özelliğin varlığından bağımsız olduğudur. Örneğin bir telefon, dokunmatik ekranı, internet özelliği, iyi kamerası vb. Varsa akıllı olarak değerlendirilebilir. Bütün bu özellikler birbirine bağlı olmakla birlikte, telefonun akıllı telefon olma olasılığına bağımsız olarak katkıda bulunur.
Bayes sınıflandırmasında temel ilgi, son olasılıkları, yani bazı gözlenen özellikler (|) verilen bir etiket olasılığını bulmaktır. Bayes teoremi yardımıyla bunu nicel formda şu şekilde ifade edebiliriz:
$$ P (L | özellikler) = \ frac {P (L) P (özellikler | L)} {()} $$Burada (|) sınıfın son olasılığıdır.
(), sınıfın öncelikli olasılığıdır.
(|) sınıf verilen tahmin edicinin olasılığı olan olasılıktır.
() tahmin edicinin önceki olasılığıdır.
Python'da Naïve Bayes kullanarak model oluşturma
Python kütüphanesi, Scikit Learn Python'da Naïve Bayes modeli oluşturmamıza yardımcı olan en kullanışlı kütüphanedir. Scikit Python kitaplığı altında aşağıdaki üç tür Naïve Bayes modeline sahibiz -
Gauss Naif Bayes
Bu, her bir etiketten gelen verilerin basit bir Gauss dağılımından alındığı varsayımına sahip en basit Naïve Bayes sınıflandırıcısıdır.
Multinomial Naif Bayes
Diğer bir kullanışlı Naif Bayes sınıflandırıcı, özelliklerin basit bir Multinomial dağılımdan alındığı varsayıldığı Multinomial Naif Bayes'tir. Bu tür Naif Bayes, ayrık sayıları temsil eden özellikler için en uygun olanıdır.
Bernoulli Naïve Bayes
Diğer bir önemli model, özelliklerin ikili (0s ve 1s) olduğu varsayıldığı Bernoulli Naïve Bayes'tir. Kelime torbası modeliyle metin sınıflandırması Bernoulli Naïve Bayes'in bir uygulaması olabilir.
Misal
Veri setimize bağlı olarak, yukarıda açıklanan Naif Bayes modellerinden herhangi birini seçebiliriz. Burada, Python'da Gauss Naïve Bayes modelini uyguluyoruz -
Gerekli ithalatla şu şekilde başlayacağız -
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
Şimdi, Scikit learn'ün make_blobs () işlevini kullanarak, aşağıdaki gibi Gauss dağılımı ile nokta blobları oluşturabiliriz -
from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
Sonra, GaussianNB modelini kullanmak için, nesnesini aşağıdaki gibi içe aktarmalı ve yapmalıyız -
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
Şimdi tahmin yapmalıyız. Aşağıdaki gibi bazı yeni veriler oluşturulduktan sonra yapılabilir -
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
Ardından, sınırlarını bulmak için yeni verileri çiziyoruz -
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);
Şimdi, aşağıdaki kod satırlarının yardımıyla, birinci ve ikinci etiketin son olasılıklarını bulabiliriz -
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
Çıktı
array([[0.998, 0.002],
[1. , 0. ],
[0.987, 0.013],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[0. , 1. ],
[0.986, 0.014]]
)
Artılar ve eksiler
Artıları
Aşağıdakiler, Naïve Bayes sınıflandırıcılarını kullanmanın bazı avantajlarıdır -
Naïve Bayes sınıflandırmasının uygulanması kolay ve hızlıdır.
Lojistik regresyon gibi ayırt edici modellerden daha hızlı birleşecektir.
Daha az eğitim verisi gerektirir.
Doğası gereği yüksek oranda ölçeklenebilir veya tahmin edicilerin ve veri noktalarının sayısı ile doğrusal olarak ölçeklenirler.
Olasılıklı tahminler yapabilir ve hem sürekli hem de kesikli verileri işleyebilir.
Naïve Bayes sınıflandırma algoritması hem ikili hem de çok sınıflı sınıflandırma problemleri için kullanılabilir.
Eksileri
Aşağıdakiler, Naïve Bayes sınıflandırıcılarını kullanmanın bazı dezavantajlarıdır -
Naïve Bayes sınıflandırmasının en önemli dezavantajlarından biri güçlü özellik bağımsızlığıdır çünkü gerçek hayatta birbirinden tamamen bağımsız bir dizi özelliğe sahip olmak neredeyse imkansızdır.
Naïve Bayes sınıflandırmasıyla ilgili bir diğer sorun da 'sıfır frekansı'dır, bu da şu anlama gelir: eğer bir kategori değişkeni bir kategoriye sahipse, ancak eğitim veri setinde gözlemlenmiyorsa, Naif Bayes modeli ona sıfır olasılık atayacaktır ve bir tahmin.
Naïve Bayes sınıflandırmasının uygulamaları
Aşağıdakiler, Naïve Bayes sınıflandırmasının bazı yaygın uygulamalarıdır -
Real-time prediction - Uygulama kolaylığı ve hızlı hesaplama özelliği sayesinde gerçek zamanlı tahmin yapmak için kullanılabilir.
Multi-class prediction - Naïve Bayes sınıflandırma algoritması, birden fazla hedef değişken sınıfının posterior olasılığını tahmin etmek için kullanılabilir.
Text classification- Çok sınıflı tahmin özelliği nedeniyle, Naïve Bayes sınıflandırma algoritmaları metin sınıflandırması için çok uygundur. Bu nedenle spam filtreleme ve duyarlılık analizi gibi sorunları çözmek için de kullanılır.
Recommendation system - İşbirliğine dayalı filtreleme gibi algoritmaların yanı sıra, Naïve Bayes, görünmeyen bilgileri filtrelemek ve bir kullanıcının verilen kaynağı isteyip istemediğini tahmin etmek için kullanılabilecek bir Öneri sistemi geliştirir.