Python, Veri Bilimi / 30 Ocak 2022 / Miraç ÖZTÜRK
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
Makalede Neler Var ?
Naive Bayes Algoritması Nedir?
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ü;

ş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.

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

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”

>>> Iris_Data

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

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.

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
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.

6-Analiz için GaussianNB sınıfından bir nesne türetelim/üretelim;
>>> GaussianNB_Class = GaussianNB()

7-Oluşturmuş olduğumuz nesnemiz üzerinde verimizi eğitelim; (Training Process)
>>> GaussianNB_Class.fit(x_train, y_train.ravel())

8-Eğitmiş olduğumuz yapımız üzerinde tahminleme gerçekleştirelim; (Predict Process – Prediction)
>>> Result = GaussianNB_Class.predict(x_test)

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)

10-Matrisimiz üzerinden başarı oranımızı hesaplayalım;
>>> from sklearn.metrics import accuracy_score
Accuracy = accuracy_score(y_test, Result)
print(Accuracy)


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 (1–2) ç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;
- Gerçek ve eş zamanlı tüm analiz projelerinde, (Real Time Computing Project)
- Metin Sınıflandırması problem ve projelerinde, (Document-Text Classification)
- Tavsiye Sistemleri problem ve projelerinde, (Recommendation System)
- Duygu Analizi yörüngeli sınıflandırma problem ve projelerinde (Sentiment Analysis)
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…