microsoft power bi python naive bayes algorithm

Python ile Sınıflandırma Analizleri – Naive Bayes Algoritması

Merhaba, iyi günler.

Bugün; çeşitli veri kümeleri üzerinde özel işlemler ile farklı çözümlemeler için yapılandırılmış denetimli/gözetimli öğrenme algoritmalarından, rassal değişken için olasılık dağılımı içinde koşullu olasılıklar ile marjinal olasılıklar arasındaki ilişkiyi değerlendirmemizi sağlayan Naive Bayes (Teorisi) algoritması üzerine çeşitli bilgi ve çözümlemeler aktarmaya çalışacağım.

Genel konu özetinin bulunduğu Python Veri Analizi yazısına link üzerinden ulaşabilirsiniz

Bayes Teorisi Nedir?

Bayes Teoremi (Bayes Theory); bir binom dağılımının olasılık parametresi için dağılımın nasıl hesaplanacağını araştıran Peder Thomas Bayes‘in (1702–1761) adını almıştır.Bayes’in ölümünden sonra yakın arkadaşı olan Richard Price bu çalışmayı 1763’te Şans Doktrini’nde Bir Problemi Çözmeye Yönelik Bir Deneme olarak düzenledi ve yayına sundu.

Genel Bayes formulü; 

python naive bayes algorithm

şeklinde ifade edilmektedir.

Denklem üzerinde yer alan ifadeler;

  • P ( A | B ) = B olayı gerçekleştiğinde A olayının gerçekleşme olasılığı,
  • P ( A ) = A olayının gerçekleşme olasılığı,
  • P ( B | A ) = A olayı gerçekleştiğinde B olayının gerçekleşme olasılığı,
  • P ( B ) = B olayının gerçekleşme olasılığı,

değerlerine karşılık gelmektedir.

Naive Bayes Teorisi (Algoritması) Nedir?

Naive Bayes algoritması; rassal değişken için olasılık dağılımı içinde koşullu olasılıklar ile marjinal olasılıklar arasındaki ilişkiyi değerlendirmemizi sağlamaktadır.

Yapı bakımından Naive Bayes algoritmasının temeli Bayes teoremine dayanmakta ve dengesiz veri kümeleri üzerinde özellik bakımından Lazy (Tembel) öğrenme algoritması (Lazy Algorithm) olarak nitelendirilmektedir.

Çalışma mantığında ise; ilgili veri kümesinde yer alan her bir eleman için her durumun olasılığını hesaplar ve olasılık değeri en yüksek olana göre sınıflandırmayı gerçekleştirir.Minimun ölçekteki eğitim verisiyle yüksek seviyede başarılı sonuçlar elde edebilir.

Naive Bayes Algoritması Uygulama Örneği

Naive Bayes algoritması uygulamasına örnek olarak, çokça duyulan ve kullanılan Iris Veri Seti üzerinden basit bir örnek ile çözümlemelerde bulunalım.

İlgili veri setine ait csv. uzantılı dosyasına buradan ulaşabilirsiniz.

microsoft power bi iris machine learning data sets support vector machine

Iris Veri Seti 3 Iris bitki türüne (Iris Setosa, Iris Virginica ve Iris Versicolor) ait, her bir türden 50 örnek olmak üzere toplam 150 örnek sayısına sahip bir veri setidir.

Iris Veri Seti içerisinde;

Sınıflar (Türler);

  • Iris Setosa,
  • Iris Versicolor,
  • Iris Virginica.

Veri Özellikleri (Ortak Özellikler);

  • Sepal Uzunluk (cm),
  • Sepal Genişlik (cm),
  • Petal Genişliği (cm)
  • Petal Uzunluk (cm).

özellik ve değerleri bulunmaktadır.

Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım.

1-Gerçekleştireceğimiz analizler için kullanacağımız kütüphanemizi projemize dahil edelim; (Pandas)

>>> import pandas as pd

python naive bayes import pandas library

2-Çalışmamıza ilgili verilerimizi dahil edelim ve önizleme gerçekleştirelim;

>>> Iris_Data = pd.read_csv(“D:\Yedekleme\Iris.csv”)

Burada aşağıdaki gibi bir hata alındığında;
‘unicodeescape’ codec can’t decode bytes in position 2-3: truncated \UXXXXXXXX escape [duplicate]

  • “D:\\Yedekleme\\Iris.csv”
  • r”D:\Yedekleme\Iris.csv”
  • “D:/Yedekleme/Iris.csv”
formatlarını sisteminize uygun şekilde deneyebilirsiniz.
python naive bayes import data of iris

>>> Iris_Data

python naive bayes algorithm with iris data preview

3-Bağımlı değişkenimizi analiz gerçekleştirmek için bir parametreye atayalım; (Species: Tür-Cins)

>>> Data_Species = Iris_Data.iloc[:,-1:].values

python naive bayes theory algorithm dependent variable

4-Veri kümemizi test ve eğitim/öğrenme kümeleri olarak ikiye ayıralım; (Test-Train)

>>> from sklearn.model_selection import train_test_split
       x_train, x_test, y_train, y_test=
       train_test_split(Iris_Data.iloc[:,1:-1],Data_Species,test_size=0.35,random_state=0)

Ek olarak;

  • test_size ile verilerin %kaçının test için kullanılacağını ifade edilmektedir. (Örneğimizde %35.)
  • random_state programı her çalıştırdığımızda aynı ayrımı görmemiz için kullanılmaktadır.
python naive bayes theory algorithm test and train data

5-Çalışmamıza analiz gerçekleştirmek için GaussianNB sınıfını dahil edelim; (Sklearn)

>>> from sklearn.naive_bayes import GaussianNB

Çalışma yapınıza yönelik Sklearn üzerinde 5 tip farklı Naive Bayes analiz sınıfı bulunmaktadır.
Bunlar;

  • GaussianNB,
  • BernoulliNB,
  • MultinomialNB,
  • CategoricalNB,
  • ComplementNB
sınıfları olarak yer almaktadır.
Gerçekleştireceğiniz analiz formatına göre bu sınıflardan birini tercih edebilirsiniz, ilgili tercih doğrudan modelinizin başarısını etkilemektedir.
Ek detaylar için lütfen tıklayınız…
python naive bayes theory algorithm import bayesiannb

6-Analiz için GaussianNB sınıfından bir nesne türetelim/üretelim;

>>> GaussianNB_Class = GaussianNB()

python naive bayes theory algorithm gaussian object create

7-Oluşturmuş olduğumuz nesnemiz üzerinde verimizi eğitelim; (Training Process)

>>> GaussianNB_Class.fit(x_train, y_train.ravel())

python naive bayes theory algorithm gaussian object train process

8-Eğitmiş olduğumuz yapımız üzerinde tahminleme gerçekleştirelim; (Predict Process – Prediction)

>>> Result  = GaussianNB_Class.predict(x_test)

python naive bayes theory algorithm predict data

9-Tahminleme yapımız üzerinde başarı oranı hesabı adına karmaşıklık matrisi inşaa edelim ve görüntüleyelim;
(Confusion Matrix – Karmaşıklık/Karışıklık Matrisi)

>>> from sklearn.metrics import confusion_matrix
       Confusion_Matrix = confusion_matrix(y_test,Result)
       print(Confusion_Matrix)

python naive bayes theory algorithm confusion matrix

10-Matrisimiz üzerinden başarı oranımızı hesaplayalım;

>>> from sklearn.metrics import accuracy_score
       Accuracy = accuracy_score(y_test, Result)
       print(Accuracy)

python naive bayes theory algorithm final score
python naive bayes confisuon matrix calculate

16+21+14+2=53
16+21+14=51
51/53=0,9622…

Algoritmamız ile %96 oranında bir başarı sonucu çıktısı aldık.
Bu çıktı sonuçlarını 
GaussianNB sınıfı dışındaki diğer analiz sınıfları ile karşılaştırabilirsiniz.
(GaussianNB yerine; BernoulliNB, MultinomialNB, CategoricalNB, ComplementNB sınıflarını baz alabilirsiniz.)

Naive Bayes algoritmasına yönelik basit veri seti üzerinden kısa bir analiz gerçekleştirdik.

Görselleştirme işlemleri için dilerseniz Python üzerinde ki çeşitli kütüphaneleri kullanarak dilerseniz de geçmiş dönemlerde uygulamış olduğumuz Power BI ile görselleştirme (12) çalışmalarından faydalanabilirsiniz. 

Günlük Hayatta Algoritma Uygulama Alanları

Günlük hayatta Naive Bayes algoritması esnek, basit uyarlanabilir ve hızlı analiz yapısı sayesinde genel olarak tüm;

yer alıp, kullanılabilmektedir.

Avantaj Dezavantaj

  • Basit ve kolay uygulanabilir bir yapısı bulunmaktadır,
  • Yapısal olarak problemli (dengesiz) veri kümelerinde de kullanılabilir,
  • Hızlı yapıda analiz gerçekleştirmesinden dolayı gerçek zamanlı/eş zamanlı projeler üzerinde kullanılabilir,
  • Özelleştirilebilir yüksek yapıdaki veriler üzerinde iyi çalışmaktadır.
  • Veri kümesi içerisinde yer alan değişkenler arasında modelleme gerçekleştirilmesine uygun değildir,
  • Sıkça Zero Probability problemi ile karşı karşıya kalınmaktadır,
  • Veri kümesi üzerindeki tüm özelliklerin bağımsız olduğunu varsaymaktadır; teorik olarak harika olduğu düşünülse de, gerçek hayatta bu yapıdaki dizi üzerinde bağımsız özellik bulamazsınız.

Bu bölümde genel manada Sınıflandırma metoduna ait Naive Bayes yöntemine (algoritmasına) değinmeye çalıştım.

Gelecek yazımda Rastgele Orman Topluluğu (Random Forest) ele almaya çalışacağım.

İyi günler, iyi çalışmalar…

, ,

İlgili Yazılar