Makine Öğrenmesi - Sınıflandırma Algoritmaları
V. Categorical Naive Bayes
Yazar:
Enes ASAN
Yayın tarihi :16-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.
Categorical Naive Bayes, hedef/tahmin değişkenini kategorik olan sınıflandırma algoritmaları için oluşturulmuştur.
Kullanım için "CategoricalNB" kütüphanesinin içe aktarılması gerekmektedir.
from sklearn.naive_bayes import CategoricalNB
Örnek-1: İris veri seti üzerinden, species sütununa CategoricalNB 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 CategoricalNB
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))
#CategoricalNBataması yapılır
Cat=CategoricalNB()
#Model eğitme işlemi
Cat.fit(x_train,y_train)
#x_test verilerini tahminleme işlemi
predict_Cat=Cat.predict(x_test)
confusion_matrix(y_test,predict_Cat)
Çıktı:
array([[9, 0, 0], [0, 8, 0], [0, 4, 9]], dtype=int64)
#confusion_matrix değerlerinin grafikselleştirmesi
sns.heatmap(confusion_matrix(y_test,predict_Cat),annot=True,linewidths=2)
Çıktı:
#Sınıflandırma raporu
print(classification_report(y_test,predict_Cat))
Çıktı:
precision recall f1-score support setosa 1.00 1.00 1.00 9 versicolor 0.67 1.00 0.80 8 virginica 1.00 0.69 0.82 13 accuracy 0.87 30 macro avg 0.89 0.90 0.87 30 weighted avg 0.91 0.87 0.87 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 %87 olarak tahmin etmiş oldu.