Makine Öğrenmesi - Sınıflandırma Algoritmaları
III. Complement Naive Bayes
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.