- Naïve Bayes algoritması, denetimli bir öğrenme algoritmasıdır. Bayes teoremi ve sınıflandırma problemlerinin çözümünde kullanılır.
- Esas olarak kullanılır metin sınıflandırması yüksek boyutlu bir eğitim veri kümesi içerir.
- Naïve Bayes Sınıflandırıcı, hızlı tahminler yapabilen hızlı makine öğrenimi modellerinin oluşturulmasına yardımcı olan basit ve en etkili Sınıflandırma algoritmalarından biridir.
- Naïve Bayes Algoritmasının bazı popüler örnekleri şunlardır: Spam filtreleme, Duygusal analiz ve makaleleri sınıflandırma .
Neden Naïve Bayes deniyor?
Naïve Bayes algoritması Naïve ve Bayes olmak üzere iki kelimeden oluşur ve şu şekilde tanımlanabilir:
Bayes teoremi:
- Bayes teoremi aynı zamanda şu şekilde de bilinir: Bayes Kuralı veya Bayes yasası Ön bilgiye sahip bir hipotezin olasılığını belirlemek için kullanılır. Koşullu olasılığa bağlıdır.
- Bayes teoreminin formülü şu şekilde verilmiştir:
Nerede,
P(A|B) İkinci olasılıktır : A hipotezinin gözlenen B olayına ilişkin olasılığı.
P(B|A) Olasılık olasılığıdır : Bir hipotezin olasılığının doğru olduğunu gösteren kanıtın olasılığı.
P(A) Önceki Olasılıktır : Kanıtları gözlemlemeden önce hipotezin olasılığı.
P(B) Marjinal Olasılıktır : Kanıt Olasılığı.
Naïve Bayes Sınıflandırıcısının Çalışması:
Naïve Bayes Sınıflandırıcısının çalışması aşağıdaki örnek yardımıyla anlaşılabilir:
Diyelim ki elimizde bir veri seti var hava koşulları ve karşılık gelen hedef değişken ' Oynamak '. Dolayısıyla bu veri setini kullanarak hava koşullarına göre belirli bir günde oynayıp oynamamamız gerektiğine karar vermemiz gerekiyor. Dolayısıyla bu sorunu çözmek için aşağıdaki adımları izlememiz gerekiyor:
- Verilen veri kümesini frekans tablolarına dönüştürün.
- Verilen özelliklerin olasılıklarını bularak Olasılık tablosunu oluşturun.
- Şimdi son olasılığı hesaplamak için Bayes teoremini kullanın.
Sorun : Hava güneşliyse Oyuncu oynamalı mı oynamamalı mı?
Çözüm : Bunu çözmek için öncelikle aşağıdaki veri kümesini göz önünde bulundurun:
Görünüm | Oynamak | |
---|---|---|
0 | Yağmurlu | Evet |
1 | Güneşli | Evet |
2 | Bulutlu | Evet |
3 | Bulutlu | Evet |
4 | Güneşli | HAYIR |
5 | Yağmurlu | Evet |
6 | Güneşli | Evet |
7 | Bulutlu | Evet |
8 | Yağmurlu | HAYIR |
9 | Güneşli | HAYIR |
10 | Güneşli | Evet |
on bir | Yağmurlu | HAYIR |
12 | Bulutlu | Evet |
13 | Bulutlu | Evet |
Hava Koşullarına İlişkin Frekans Tablosu:
Hava durumu | Evet | HAYIR |
Bulutlu | 5 | 0 |
Yağmurlu | 2 | 2 |
Güneşli | 3 | 2 |
Toplam | 10 | 5 |
Olasılık tablosu hava durumu:
Hava durumu | HAYIR | Evet | |
Bulutlu | 0 | 5 | 5/14= 0,35 |
Yağmurlu | 2 | 2 | 4/14=0,29 |
Güneşli | 2 | 3 | 5/14=0,35 |
Tüm | 4/14=0,29 | 10/14=0,71 |
Bayes teoremini uygulamak:
P(Evet|Güneşli)= P(Güneşli|Evet)*P(Evet)/P(Güneşli)
P(Güneşli|Evet)= 3/10= 0,3
P(Güneşli)= 0,35
P(Evet)=0,71
Yani P(Evet|Güneşli) = 0,3*0,71/0,35= 0,60
P(Hayır|Güneşli)= P(Güneşli|Hayır)*P(Hayır)/P(Güneşli)
P(Güneşli|HAYIR)= 2/4=0,5
P(Hayır)= 0,29
P(Güneşli)= 0,35
Yani P(Hayır|Güneşli)= 0,5*0,29/0,35 = 0,41
Yukarıdaki hesaplamadan da görebileceğimiz gibi P(Evet|Güneşli)>P(Hayır|Güneşli)
Dolayısıyla Güneşli bir günde Oyuncu oyunu oynayabilir.
Naïve Bayes Sınıflandırıcının Avantajları:
- Naïve Bayes, bir veri kümesi sınıfını tahmin etmek için kullanılan hızlı ve kolay makine öğrenimi algoritmalarından biridir.
- İkili ve Çok Sınıflı Sınıflandırmalar için kullanılabilir.
- Diğer Algoritmalara kıyasla Çok sınıflı tahminlerde iyi performans gösterir.
- için en popüler seçimdir. metin sınıflandırma sorunları .
Naïve Bayes Sınıflandırıcının Dezavantajları:
- Naive Bayes, tüm özelliklerin bağımsız veya ilgisiz olduğunu varsayar, dolayısıyla özellikler arasındaki ilişkiyi öğrenemez.
Naïve Bayes Sınıflandırıcının Uygulamaları:
- İçin kullanılır Kredi Puanlaması .
- İçinde kullanılır tıbbi veri sınıflandırması .
- Kullanılabilir gerçek zamanlı tahminler çünkü Naïve Bayes Sınıflandırıcı istekli bir öğrenicidir.
- Aşağıdaki gibi Metin sınıflandırmasında kullanılır: Spam filtreleme Ve Duygu analizi .
Naif Bayes Modeli Türleri:
Aşağıda verilen üç tür Naive Bayes Modeli vardır:
Sınıflandırıcı, tahmin ediciler için kelimelerin sıklığını kullanır.
Naïve Bayes algoritmasının Python Uygulaması:
Şimdi Python kullanarak Naive Bayes Algoritmasını uygulayacağız. Bunun için '' ifadesini kullanacağız. Kullanıcı bilgisi ' veri kümesi Diğer sınıflandırma modelimizde de kullanmıştık. Bu nedenle Naive Bayes modelini diğer modellerle rahatlıkla karşılaştırabiliriz.
Uygulama adımları:
- Veri Ön İşleme adımı
- Naive Bayes'in Eğitim Setine Takılması
- Test sonucunu tahmin etmek
- Sonucun doğruluğunu test edin (Karışıklık matrisinin oluşturulması)
- Test seti sonucunun görselleştirilmesi.
1) Veri Ön İşleme adımı:
Bu adımda verileri kodumuzda verimli bir şekilde kullanabilmek için ön işleme tabi tutacağız/hazırlayacağız. Veri ön işlemede yaptığımıza benzer. Bunun kodu aşağıda verilmiştir:
Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.25, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test)
Yukarıdaki kodda veri setini ' kullanarak programımıza yükledik. veri kümesi = pd.read_csv('user_data.csv') . Yüklenen veri setini eğitim ve test setine ayırdık ve daha sonra özellik değişkenini ölçeklendirdik.
Veri kümesinin çıktısı şu şekilde verilir:
2) Naive Bayes'in Eğitim Setine Yerleştirilmesi:
Ön işleme adımından sonra artık Naive Bayes modelini Training setine sığdıracağız. Aşağıda bunun kodu verilmiştir:
# Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train)
Yukarıdaki kodda şunu kullandık: GaussianNB sınıflandırıcısı eğitim veri setine sığdırmak için. İhtiyaca göre diğer sınıflandırıcıları da kullanabiliriz.
Çıktı:
Out[6]: GaussianNB(priors=None, var_smoothing=1e-09)
3) Test seti sonucunun tahmini:
Şimdi test seti sonucunu tahmin edeceğiz. Bunun için yeni bir tahmin değişkeni oluşturacağız y_pred ve tahminleri yapmak için tahmin fonksiyonunu kullanacaktır.
# Predicting the Test set results y_pred = classifier.predict(x_test)
Çıktı:
Yukarıdaki çıktı tahmin vektörünün sonucunu gösterir y_pred ve gerçek vektör y_test. Bazı tahminlerin gerçek değerlerden farklı olduğunu yani yanlış tahminler olduğunu görebiliriz.
4) Karışıklık Matrisi Oluşturma:
Şimdi Naive Bayes sınıflandırıcısının doğruluğunu Confusion matrisini kullanarak kontrol edeceğiz. Aşağıda bunun kodu verilmiştir:
# Making the Confusion Matrix from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)
Çıktı:
Yukarıdaki karışıklık matrisi çıktısında görebileceğimiz gibi 7+3= 10 yanlış tahmin, 65+25=90 doğru tahmin bulunmaktadır.
5) Eğitim seti sonucunun görselleştirilmesi:
Daha sonra Na�ve Bayes Sınıflandırıcıyı kullanarak eğitim seti sonucunu görselleştireceğiz. Aşağıda bunun kodu verilmiştir:
# Visualising the Training set results from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Çıktı:
monitörüm ne kadar büyük
Yukarıdaki çıktıda Na�ve Bayes sınıflandırıcısının veri noktalarını ince sınırla ayırdığını görebiliriz. Kullandığımız şekliyle Gauss eğrisidir. GaussianNB kodumuzdaki sınıflandırıcı.
6) Test seti sonucunun görselleştirilmesi:
# Visualising the Test set results from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test X1, X2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step = 0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(X1, X2, classifier.predict(nm.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Çıktı:
Yukarıdaki çıktı, test seti verilerinin son çıktısıdır. Gördüğümüz gibi sınıflandırıcı 'satın alınan' ve 'satın alınmayan' değişkenleri bölmek için bir Gauss eğrisi yarattı. Karışıklık matrisinde hesapladığımız bazı yanlış tahminler var. Ama yine de oldukça iyi bir sınıflandırıcıdır.