Makine Öğrenmesi - Sınıflandırma Algoritmaları

III. Complement Naive Bayes

Yayın tarihi :16-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Complement Naive Bayes, özellikle Multinomial Naive Bayes sınıflandırma algoritması tarafından oluşturulan ciddi varsayımları ortadan kaldırmak için oluşturulmuştur.

Kullanım için "ComplementNB" kütüphanesinin içe aktarılması gerekmektedir.

from sklearn.naive_bayes import ComplementNB

Örnek-1: İris veri seti üzerinden, "species" değişkenine ComplementNB sınıflandırma algoritmasını uygulayalım.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score
from sklearn.metrics import confusion_matrix,classification_report

from sklearn.naive_bayes import ComplementNB

Keşifsel Veri Analizi EDA

#Veri seti okunur
df=sns.load_dataset("iris")
df.head()

Çıktı:

# Veri seti hakkında bilgi 
df.info()

Çıktı:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
 #   Column        Non-Null Count  Dtype  
---  ------        --------------  -----  
 0   sepal_length  150 non-null    float64
 1   sepal_width   150 non-null    float64
 2   petal_length  150 non-null    float64
 3   petal_width   150 non-null    float64
 4   species       150 non-null    object 
dtypes: float64(4), object(1)
memory usage: 6.0+ KB
#species sütunu eleman sayıları
df.species.value_counts()

Çıktı:

setosa        50
versicolor    50
virginica     50
Name: species, dtype: int64
#Veri seti açıklamaları
df.describe()

Çıktı:

#Sütunların birbirleri ile korelasyonu
df.corr()

Çıktı:

#Korelasyon görüntülenmesi
sns.heatmap(df.corr(),annot=True)

Çıktı:

#türe göre sepal ve petal length
sns.scatterplot(x="sepal_length",y="petal_length",hue="species",data=df)

Çıktı:

Model Oluşturma İşlemleri

#x(bağımsız değişkenler) ve y(hedef/tahmin değişkeni) ataması yapılır.
x,y=df.drop("species",axis=1),df[["species"]]

#train ve test verileri ayrılır
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=13)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((120, 4), (30, 4), (120, 1), (30, 1))
#ComplementNB ataması yapılır
C=ComplementNB()

#Model eğitme işlemi
C.fit(x_train,y_train)

#x_test verilerini tahminleme işlemi
predict_C=C.predict(x_test)
confusion_matrix(y_test,predict_C)

Çıktı:

array([[ 9,  0,  0],
       [ 0,  0,  8],
       [ 0,  0, 13]], dtype=int64)
#confusion_matrix değerlerinin grafikselleştirmesi
sns.heatmap(confusion_matrix(y_test,predict_C),annot=True,linewidths=2)

Çıktı:

 
#Sınıflandırma raporu
print(classification_report(y_test,predict_C))

Çıktı:

              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00         9
  versicolor       0.00      0.00      0.00         8
   virginica       0.62      1.00      0.76        13

    accuracy                           0.73        30
   macro avg       0.54      0.67      0.59        30
weighted avg       0.57      0.73      0.63        30

Sınıflandırma raporunda da görüldüğü gibi girilen 4 değere ('sepal_length', 'sepal_width', 'petal_length', 'petal_width') göre species sütununda bulunan türleri doğru tahmin etme yüzdesi accuracy değeri göz önüne alınırsa %73 olarak tahmin etmiş oldu. 

Model Tahminleme İşlemleri

ComplementNB algoritması ile oluşturulan modele gireceğimiz değerlerin türünü tahmin ettirmek için;

C.predict([[2.1,5.4,7.3,2.0]]) #'sepal_length', 'sepal_width', 'petal_length', 'petal_width'

Çıktı:

array(['virginica'], dtype='<U10')

Girilen değerlerin "virginica" türüne ait olduğu tahmin edilmiş oldu.

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.