Misalkan kita memiliki suatu histogram yang menyatakan hubungan
Dalam mendesain suatu algoritma pengklasifikasi berdasarkan data ini, kita ingin mendapatkan
Bayes' Theorem dapat dinyatakan secara matematis dalam persamaan
atau dalam kasus yang ini,
Dengan menggunakan persamaan
Disinilah letak pentingnya Bayes' Theorem. Kita dapat menghitung hal yang kita inginkan, seperti
Kita juga dapat mencari kelas
untuk semua kelas
Bayes Classifier, atau biasa disebut juga sebagai Bayes Optimal Classifier, merupakan algoritma yag dapat digunakan untuk menyelesaikan permasalahan klasifikasi.
Bayes Classifier bekerja dengan cara menempatkan setiap observasi ke klasifikasi yang paling mungkin tergantung pada prediktornya. Secara matematis, Bayes Classifier bisa dinyatakan dengan
dengan
Perlu diperhatikan bahwa klasifikasi yang paling mungkin bisa saja berbeda dengan hipotesis MAP.
Sebagai contoh, misalkan sebuah tes medis ada tiga kemungkinan kelas, dan kita dapatkan hasil untuk tes tersebut sebagai berikut :
Hipotesis MAP dari hasil tersebut adalah
dan
Secara rata-rata, tidak ada algoritma classifier dengan data yang sama bisa lebih unggul dari Bayes Classifier. Sayangnya, perhitungan Bayes Classifier kurang mungkin dilakukan di dunia nyata karena kita tidak tahu distribusi hubungan antara data dan klasifikasi. Oleh karena itu, dilakukan estimasi seperti di algoritma naïve bayes classifier dan K-nearest neighbour.
Dari Bayes Classifier, kita ingin memaksimalkan
untuk data
Di dunia nyata, menghitung
Kita dapat men-subtitusi hasil ini ke persamaan
Misalkan ada data
deadline males sibuk nubes
0 dekat ya tidak tidak
1 jauh tidak ya tidak
2 dekat tidak tidak ya
3 dekat tidak ya ya
4 jauh ya ya tidak
5 jauh ya tidak ya
6 jauh tidak tidak ya
dan kita ingin memprediksi hasil dari dekat, ya, ya
menggunakan naïve Bayes.
Berikut merupakan implementasi naïve Bayes di python
.
import pandas as pd
def Pcon(df, cat_a, a, cat_b, b):
// df : data
// cat_a : categori data a
// cat_b : categori data b
// a : categori data a
// b : categori data b
// Mengasilkan P(a|b)
return sum(df[df[cat_b] == b][cat_a] == a)/sum(df[cat_b] == b)
def P(df, cat, n):
// df : data
// cat : categori data a
// n : categori data a
// Menghasilkan P(n)
return sum(df[cat] == n) / df[cat].count()
def naiveBayes(df, x):
for res in df['nubes'].unique():
prob = P(df, 'nubes', res)
for colNum in range(len(x)):
conProb = Pcon(df, df.columns[colNum], x[colNum], 'nubes', res)
prob *= conProb
print(res, prob)
df = pd.read_csv("./data.csv")
naiveBayes(df, ['dekat', 'ya', 'ya'])
Menjalankan kode ini akan menghasilkan
tidak 0.06349206349206349
ya 0.017857142857142856
Berdasarkan hasil ini, didapatkan bahwa dekat, ya, ya
diklasifikasi sebagai tidak
.