Makine Öğrenmesi - Sınıflandırma Algoritmaları
I. Gaussian Naive Bayes
Gauss Naive Bayes, her bir özellikle ilişkili sürekli değerlerin bir Gauss dağılımına göre dağıtıldığı varsayılır. Gauss dağılımına normal dağılım da denir.
Kullanım için "GaussianNB" kütüphanesinin içe aktarılması gerekmektedir.
from sklearn.naive_bayes import GaussianNB
Örnek-1: İris veri seti üzerinden, "species" değişkenine GaussianNB 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 GaussianNB
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))
#GaussianNB ataması yapılır
G=GaussianNB()
#Model eğitme işlemi
G.fit(x_train,y_train)
#x_test verilerini tahminleme işlemi
predict_G=G.predict(x_test)
confusion_matrix(y_test,predict_G)
Çıktı:
array([[ 9, 0, 0], [ 0, 8, 0], [ 0, 1, 12]], dtype=int64)
#confusion_matrix değerlerinin grafikselleştirmesi
sns.heatmap(confusion_matrix(y_test,predict_G),annot=True,linewidths=2)
Çıktı:
#Sınıflandırma raporu
print(classification_report(y_test,predict_G))
Çıktı:
precision recall f1-score support setosa 1.00 1.00 1.00 9 versicolor 0.89 1.00 0.94 8 virginica 1.00 0.92 0.96 13 accuracy 0.97 30 macro avg 0.96 0.97 0.97 30 weighted avg 0.97 0.97 0.97 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 %97 olarak tahmin etmiş oldu.
Model Tahminleme İşlemleri
GaussianNB algoritması ile oluşturulan modele gireceğimiz değerlerin türünü tahmin ettirmek için;
G.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.