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#
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.
Menghitung Prior / probabilitas awal \(p(Y)\)
Hitung frekuensi dari setiap kelas berdasarkan dataset
Rumus :
Menghitung mean dan variansi fitur setiap kelas
Rumus Gaussian untuk likelihood
\(P(Xi∣Y)\) : Probabilitas fitur \(Xi\) pada kelas \(y\)
\(\mu\) : mean/rata-rata fitur
\(σ^2\) : variance
Posterior probabilitas
\(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.
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.