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

I. Gaussian Naive Bayes

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

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.

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.