Metode Klasifikasi Naive Bayes#

Naive Bayes adalah metode klasifikasi berbasis probabilitas yang digunakan untuk memprediksi kelas dari suatu data berdasarkan fitur-fiturnya. Naive Bayes didasarkan pada Teorema Bayes dengan asumsi bahwa setiap fitur bersifat independen satu sama lain. Metode ini dapat digunakan pada data kategorikal dan data numeriks. Jika data terdiri dari data numeriks maka memerlukan pendekatan Gaussian Naive Bayes.

Rumus : $\(P(Y|X) = \frac{P(X|Y) \cdot P(Y)}{P(X)}\)$

Penjelasan :

  • \(P(Y|X)\): Probabilitas posterior (probabilitas kelas \(Y\) diberikan fitur \(X\)).

  • \(P(X|Y)\): Likelihood (probabilitas fitur \(X\) diberikan kelas \(Y\)).

  • \(P(Y)\): Probabilitas awal (prior) dari kelas \(Y\).

  • \(P(X)\): Evidence (probabilitas fitur \(X\) secara keseluruhan).

Langkah-langkah Klasifikasi Naive Bayes#

  1. Menyiapkan dataset

  • Mengumpulkan data training yang berisi fitur-fitur X dan label y

  • Pastikan data memiliki atribut (fitur) numerik atau kategorikal.

  • Jika menggunakan data numerik, bisa menerapkan Gaussian Naïve Bayes.

  1. Menghitung Prior / probabilitas awal \(p(Y)\)

  • Hitung frekuensi dari setiap kelas berdasarkan dataset

  • Rumus :

\[P(Y) = \frac{\text{jumlah total data kelas (y) }}{\text{jumlah total data}}\]
  1. Menghitung mean dan variansi fitur setiap kelas

\[Mean = \frac{\text{jumlah data (y) }}{\text{jumlah total data}}\]
\[Variance = \frac{(x_1 - \mu)^2 + (x_2 - \mu)^2 + \dots + (x_n - \mu)^2}{N}\]
  1. Rumus Gaussian untuk likelihood

\[P(X_i | Y) = \frac{1}{\sqrt{2\pi\sigma^2}} \cdot e^{-\frac{(x-\mu)^2}{2\sigma^2}}\]
  • \(P(Xi∣Y)\) : Probabilitas fitur \(Xi\) pada kelas \(y\)

  • \(\mu\) : mean/rata-rata fitur

  • \(σ^2\) : variance

  1. Posterior probabilitas

\[P(Y | X) = \frac{P(X | Y) \cdot P(Y)}{P(X)}\]
  • \(P(Y | X)\) = Probabilitas suatu kelas \(( Y )\) diberikan fitur \(( X )\)(probabilitas posterior)

  • \( P(X | Y)\) = Probabilitas fitur \(( X )\) pada kelas \(( Y )\)(likelihood)

  • \(P(Y)\) = Probabilitas awal dari kelas \(( Y )\) (prior)

  • \(P(X)\) = Probabilitas keseluruhan fitur \(( X )\) (evidence), dapat diabaikan dalam klasifikasi Naïve Bayes karena hanya sebagai faktor normalisasi.

  1. Memprediksi hasil

  • membandingkan nilai \(P(Y∣X)\) untuk semua kelas.

  • memilih kelas dengan nilai \(P(Y∣X)\) terbesar sebagai kelas prediksi atau hasil klasifikasi.

Klasifikasi Naive Bayes Tanpa Outlier#

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

dataset = pd.read_csv('hasil_no-outlier.csv')
x = dataset.iloc[:, -4:].values # Variabel independen / fitur
y = dataset['class'].values  # Variabel dependen 
# y = dataset['class'].value_counts() # menghitung jumlah data tiap class 
dataset.head(5)
# print(y)
id class petal_length petal_width sepal_length sepal_width
0 2 Iris-setosa 1.4 0.2 4.9 3.0
1 3 Iris-setosa 1.3 0.2 4.7 3.2
2 4 Iris-setosa 1.5 0.2 4.6 3.1
3 5 Iris-setosa 1.4 0.2 5.0 3.6
4 6 Iris-setosa 1.7 0.4 5.4 3.9
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.2, random_state=42) 
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(x_train, y_train)

y_pred = classifier.predict(x_test)
y_pred

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

from sklearn.metrics import accuracy_score
print("Accuracy : ", accuracy_score(y_test, y_pred))
cm
Accuracy :  0.8333333333333334
array([[11,  0,  0],
       [ 0,  7,  3],
       [ 0,  2,  7]])

Klasifikasi Naive Bayes Data Outlier#

import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

dataset = pd.read_csv('hasil_gabungan.csv')
x1 = dataset.iloc[:, -4:].values # Variabel independen
y1 = dataset['class'].values  # Variabel dependen
# y = dataset['class'].value_counts() # menghitung jumlah data tiap class 

dataset.head(5)
# print(y)
id class petal_length petal_width sepal_length sepal_width
0 1 Iris-setosa 86.4 70.0 20.1 30.5
1 2 Iris-setosa 1.4 0.2 4.9 3.0
2 3 Iris-setosa 1.3 0.2 4.7 3.2
3 4 Iris-setosa 1.5 0.2 4.6 3.1
4 5 Iris-setosa 1.4 0.2 5.0 3.6
from sklearn.model_selection import train_test_split
x1_train, x1_test, y1_train, y1_test = train_test_split(x1,y1, test_size = 0.2, random_state=42) 

from sklearn.preprocessing import StandardScaler
sc1 = StandardScaler()
x1_train = sc.fit_transform(x1_train)
x1_test = sc.transform(x1_test)

from sklearn.naive_bayes import GaussianNB
classifier1 = GaussianNB()
classifier1.fit(x1_train, y1_train)

y1_pred = classifier1.predict(x1_test)
y1_pred

from sklearn.metrics import confusion_matrix
cm1 = confusion_matrix(y1_test, y1_pred)

from sklearn.metrics import accuracy_score
print("Accuracy : ", accuracy_score(y1_test, y1_pred))
cm
Accuracy :  0.6333333333333333
array([[11,  0,  0],
       [ 0,  7,  3],
       [ 0,  2,  7]])

Kesimpulan#

Keberadaan outlier dapat mengganggu performa klasifikasi Naïve Bayes karena dapat menurunkan akurasi secara signifikan. Terlihat pada data tanpa outlier akurasinya mencapai 0.833 lebih tinggi dari pada data dengan outlier yaitu 0,633, maka penting untuk melakukan analisis dan penanganan outlier sebelum menerapkan model untuk mendapatkan hasil yang lebih akurat.