Perhitungan Manual Algoritma Naive Bayes Untuk Dataset Sederhana
Table of Contents
Naive bayes merupakan salah satu algoritma klasifikasi yang amat terkenal. Selain simpel, tidak adanya proses training dalam naive bayes membuat algoritma ini relatif lebih cepat dari sisi waktu komputasi. Mesipun demikian, performa algoritma ini jangan dianggap enteng. Naive bayes telah terbukti efektif dalam mengatasi berbagai masalah. Dalam posting ini, saya akan menjabarkan bagaimana menghitung manual naive bayes untuk data kategorikal. Mengenai teori dasar algoritma naive bayes, dapat teman-teman pelajari di sumber yang lain.
Baiklah, Gambar 1 merepresentasikan dataset seherhana sebagai acuan untuk menghitung menggunakan naive bayes. Dataset ini memiliki 2 variabel input kategorikal, yaitu weather dan car dan variabel class.
Setiap variabel input memiliki 2 nilai dan variabel class juga memiliki 2 nilai. Kita dapat mengkonversi setiap variabel ke dalam bentuk biner seperti berikut:
Baiklah, Gambar 1 merepresentasikan dataset seherhana sebagai acuan untuk menghitung menggunakan naive bayes. Dataset ini memiliki 2 variabel input kategorikal, yaitu weather dan car dan variabel class.
Gambar 1. Dataset untuk Perhitungan Naive Bayes |
Setiap variabel input memiliki 2 nilai dan variabel class juga memiliki 2 nilai. Kita dapat mengkonversi setiap variabel ke dalam bentuk biner seperti berikut:
Variabel : Weather
- sunny = 1
- rainy = 0
Variabel : Car
- working = 1
- broken = 0
Variabel : Class
- go-out = 1
- stay-home = 0
Terdapat dua jenis peluang (probability) yang perlu dihitung dari dataset untuk model naive bayes :
- Class Probabilities
- Conditional Probabilities
Oke, kita mulai dari menghitung class probabilities :
Dataset memiliki 2 masalah kelas, kita dapat mengetahui probabilitas (P) masing-masing kelas dengan cara :
- P(class=1) = jumlah(class=1) / (jumlah(class=0) + jumlah(class=1))
- P(class=0) = jumlah(class=0) / (jumlah(class=0) + jumlah(class=1))
- P(class=1) = 5 / (5 + 5)
- P(class=0) = 5 / (5 + 5)
Langkah selanjutnya adalah menghitung Conditional Probabilities, yaitu probililitas setiap nilai input terhadapat nilai class.
Variabel Weather
Variabel Car
Prediksi Naive Bayes
Peluang kelas 'stay-home'
Kita akan memprediksi seluruh record input weather dan car. Kemudian membandingkannya dengan hasil sebenarnya, maka diperoleh seperti pada Gambar 3 berikut :
Jika kita membandingkan antara hasil prediksi dengan data sebenarnya, diperoleh akurasi sebesar 80%. Tercatat ada 8 hasil prediksi yang sesuai dengan data sebenarnya dan ada 2 hasil prediksi yang menyimpang.
Variabel Weather
- P(weather=sunny|class=go-out) = jumlah(weather=sunny and class=go-out) / jumlah(class=go-out)
- P(weather=rainy|class=go-out) = jumlah(weather=rainy and class=go-out) / jumlah(class=go-out)
- P(weather=sunny|class=stay-home) = jumlah(weather=sunny and class=stay-home) / jumlah(class=stay-home)
- P(weather=rainy|class=stay-home) = jumlah(weather=rainy and class=stay-home) / jumlah(class=stay-home)
Nilai peluang yang didapatkan adalah :
- P(weather=sunny|class=go-out) = 0.8
- P(weather=rainy|class=go-out) = 0.2
- P(weather=sunny|class=stay-home) = 0.4
- P(weather=rainy|class=stay-home) = 0.6
Variabel Car
- P(car=working|class=go-out) = jumlah(car=working and class=go-out) / jumlah(class=go-out)
- P(car=broken|class=go-out) = jumlah(car=brokenrainy and class=go-out) / jumlah(class=go-out)
- P(car=working|class=stay-home) = jumlah(car=working and class=stay-home) / jumlah(class=stay-home)
- P(car=broken|class=stay-home) = jumlah(car=brokenrainy and class=stay-home) / jumlah(class=stay-home)
Nilai peluang yang didapatkan adalah :
- P(car=working|class=go-out) = 0.8
- P(car=broken|class=go-out) = 0.2
- P(car=working|class=stay-home) = 0.2
- P(car=broken|class=stay-home) = 0.8
Prediksi Naive Bayes
Baik, mari kita ambil record pertama dari dataset untuk memprediksi termasuk kelas mana record pertama tersebut.
weather=sunny, car=working
Peluang kelas 'go-out'
- go-out = P(weather=sunny|class=go-out) * P(car=working|class=go-out) * P(class=go-out)
- go-out = 0.8 * 0.8 * 0.5
- go-out = 0.32
Peluang kelas 'stay-home'
- stay-home = P(weather=sunny|class=stay-home) * P(car=working|class=stay-home) * P(class=stay-home)
- stay-home = 0.4 * 0.2 * 0.5
- stay-home = 0.04
Jika kita bandingkan, peluang go-out lebih besar daripada peluang stay-home, artinya prediksi naive bayes untuk input weather=sunny, car=working adalah kelas go-out. Dan jika kita tengok data sebenarnya, hasilnya memang menunjukkan kelas go-out, sehingga prediksi naive bayes untuk record pertama benar.
Kita akan memprediksi seluruh record input weather dan car. Kemudian membandingkannya dengan hasil sebenarnya, maka diperoleh seperti pada Gambar 3 berikut :
Gambar 3 Perbandingan dataset sebenarnya dan hasil prediksi |
Jika kita membandingkan antara hasil prediksi dengan data sebenarnya, diperoleh akurasi sebesar 80%. Tercatat ada 8 hasil prediksi yang sesuai dengan data sebenarnya dan ada 2 hasil prediksi yang menyimpang.
Demikian penjelasan singkat mengenai perhitungan manual menggunakan algoritma naive bayes untuk dataset yang sederhana. Semoga bermanfaat.
Setelah anda paham perhitungan manual naive bayes, gambar diatas adalah contoh penerapan dalam bentuk GUI via Netbeans.
saya ingin bertanya untuk algoritma klasifikasi dalam analisis tingkat pengetahuan apakah bisa menggunakan algoritma Naive Bayes ? atau selain naive bayes dan C4.5.
terimakasih