Bayescilerin Göz Bebeği: Naive Bayes

Original article was published on Artificial Intelligence on Medium

Naive Bayes Uygulaması

Uygulama için iris veri kümesini kullanacağız.

from sklearn import datasetsiris=datasets.load_iris()

Verisetini yükledikten sonra,değişkenleri tanımlamlıyoruz.

x=iris.data
# Değişken isimleri:
# Sepal length,Sepal width,Petal length,Petal Widthy=iris.target
#Çiçek Sınıfları:
#Iris setosa,Iris virginica,Iris versicolor

Daha Sonra verileri ayırma işlemi gerçekleşiyor.

from sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.3)

Naive Bayes ile Sınıflandırma

Model Kurma ve Test İşlemi

from sklearn.naive_bayes import GaussianNBgnb = GaussianNB()gnb.fit(x_train,y_train)y_pred=gnb.predict(x_test)y_predy_pred_all=gnb.predict(x)# Score ALL

Model Başarısı:

# Scorescr=gnb.score(x_test,y_pred)print("Score %.2f " % scr)

Cross Validation ile başarı ölçmek isterse;

#cross_val_scorefrom sklearn.model_selection import cross_val_scorecvs=cross_val_score(gnb,x,y)print("Ortalama skor ve skor tahmininin " + str("%")+ "95 güven aralığında değeri:\n Başarı: %.2f (+/- %.2f) " % (cvs.mean(), cvs.std() * 2))

Test verisinde yanlış sınıflandırılmış nitelik sayısını görmek için;

print(“Toplam %d nitelikten yanlış etiketlenmiş nitelik sayısı : %d”% (x_test.shape[0], (y_test != y_pred).sum()))

Tüm verisetinde yanlış sınıflandırılmış nitelik sayısını görmek için;

print("Toplam %d nitelikten yanlış etiketlenmiş nitelik sayısı : %d"% (x.shape[0], (y != y_pred_all).sum()))
  • Modelin yeni verilere göre tahmin üretmesini sağlamak için fonksiyon oluşturuyoruz.
def GetClass(Sepallength,Sepalwidth,Petallength,PetalWidth):import numpy as npnewdata=np.array([[Sepallength,Sepalwidth,Petallength,PetalWidth]])classer=gnb.predict(newdata)print(newdata)print("Girilen verilerin sınıfı: {} 'dir. ".format(classer))

Yapay Sinir Ağı ile Sınıflandırma

Naive bayes yapay sinir ağlarından bile daha iyi sonuçlar üretebiliyor. Bunu görmek için KERAS kullanarak bir model oluşturalım.

from keras.models import Sequentialfrom keras.layers import Densefrom tensorflow import kerasmodel=Sequential()model.add(Dense(150, activation='sigmoid'))model.add(Dense(10,activation='sigmoid'))model.add(Dense(1,activation='sigmoid'))opt = keras.optimizers.Adam(learning_rate=0.01)model.compile(optimizer=opt,loss='binary_crossentropy',metrics=['accuracy'])

Modelin test başarısı için .evaluate fonksiyonunu kullanılıyoruz.

test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)print('\nTest Başarısı : %.2f'%(test_acc))

SONUÇ

Naive bayes algoritması hala güncelliğini ve başarısını koruyan Bayescilerin en gözde algoritmasıdır.Elbette her algoritmanın olduğu gibi bu algoritmanında kendince eksik yanları var (bağımsızlık varsayımı vb.) ama yine de temelinde oturttuğu Olaslık teorisi ve cezalandırıcı yaklaşım, modelin bir çok veri kümesinde başarılı olmasını sağlıyor.

… Ancak yapay öğrenme,yanlış varsayımlar yapma ve yoluna devam edebilme sanatıdır.

Master Algoritma-Pedro Domingos

Kodlara ulaşmak için buraya tıklayın.

Referanslar

[1] https://web.stanford.edu/class/cs124/lec/naivebayes.pdf

[2]https://scikit-learn.org/stable/modules/naive_bayes.html

[3]https://towardsdatascience.com/naive-bayes-classifier-81d512f50a7c

[4] Master Algoritma-Pedro Domingos