Naive Bayes

Naive Bayes adalah metode klasifikasi yang menggunakan prinsip probability untuk membuat model prediksi klasifikasi machine learning, dengan memanfaatkan kejadian di masa lalu untuk memprediksi kejadian di masa depan.
Naive Bayes adalah sekumpulan algoritma yang dibangun berdasarkan Teori Bayes (diambil dari nama matematikawan Inggris Thomas Bayes). Algoritma ini tidak membutuhkan terlalu banyak data training untuk membuat prediksi yang efektif.
Rumus Conditional Probability
Contoh
| Gratis | Hadiah | Emas | Uang | Label |
|---|---|---|---|---|
| 1 | 1 | 1 | 1 | Spam |
| 1 | 1 | 0 | 1 | Spam |
| 0 | 1 | 1 | 1 | Spam |
| 1 | 0 | 1 | 1 | Spam |
| 0 | 1 | 0 | 0 | Ham |
| 0 | 0 | 0 | 1 | Ham |
| 1 | 0 | 0 | 0 | Ham |
Itu adalah contoh data email yang diklasifikasikan sebagai spam atau Ham (Bukan Spam). Data ini akan kita training kedalam algoritma naive bayes, dan selanjutnya kita akan memprediksi email baru apakah spam atau Ham.
email baru yang akan kita prediksi adalah:
email baru yang akan kita prediksi adalah:
| Gratis | Hadiah | Emas | Uang |
|---|---|---|---|
| 0 | 0 | 1 | 0 |
Pertanyaannya adalah apakah email ini spam atau bukan spam?
Untuk melakukannya kita perlu menghitung probabilitas kemungkinan spam dan bukan spam.
Untuk melakukannya kita perlu menghitung probabilitas kemungkinan spam dan bukan spam.
Dari dataset sebelumnya diketahui:
- Spam: 4/7 (Jumlah data spam)
- Bukan Spam: 3/7 (Jumlah data bukan spam)
| Feature | Spam | ~Spam |
|---|---|---|
| Gratis | 3/4 | 1/3 |
| Hadiah | 3/4 | 1/3 |
| Emas | 3/4 | 0/3 |
| Uang | 4/4 | 1/3 |
dan
Karena kita hanya membandingkan dua nilai, maka kita tidak perlu menghitung nilai pembagi (P(X)).
Hasilnya menjadi 0 karena ada satu probabilitas yang bernilai 0, yaitu
. Untuk mengatasi masalah ini kita gunakan Laplace smoothing: tambahkan 1 pada pembilang dan 2 pada penyebut. Angka 2 dipakai karena setiap fitur bersifat biner, yaitu hanya punya 2 kemungkinan nilai (0 dan 1).
Sekarang kita hitung untuk yang bukan spam.
Sama seperti sebelumnya, karena
maka kita terapkan Laplace smoothing (+1 pembilang, +2 penyebut).
Dari hasil perhitungan diatas, kita bisa simpulkan bahwa email tersebut bukan spam, karena probabilitasnya lebih besar dari spam.
Implementasi di Python
Import library yang dibutuhkan
import pandas as pd
from sklearn.naive_bayes import BernoulliNB
Kemudian kita buat dataframe yang berisi dataset yang akan kita gunakan
data = {
'Gratis': [1, 1, 0, 1, 0, 0, 1],
'Hadiah': [1, 1, 1, 0, 1, 0, 0],
'Emas': [1, 0, 1, 1, 0, 0, 0],
'Uang': [1, 1, 1, 1, 0, 1, 0],
'Label': ['Spam', 'Spam', 'Spam', 'Spam', 'Ham', 'Ham', 'Ham']
}
df = pd.DataFrame(data)
Kemudian kita pisahkan antara feature dan label
X = df[['Gratis', 'Hadiah', 'Emas', 'Uang']]
y = df['Label']
Selanjutnya kita buat model naive bayes. Karena fitur kita bernilai biner (0/1), kita pakai
BernoulliNB. Secara default BernoulliNB sudah memakai Laplace smoothing (alpha=1.0) seperti perhitungan manual di atas.model = BernoulliNB()
Kemudian kita training model dengan data yang sudah kita siapkan
model.fit(X, y)
Terakhir, kita prediksi email baru
Gratis=0, Hadiah=0, Emas=1, Uang=0email_baru = pd.DataFrame({'Gratis': [0], 'Hadiah': [0], 'Emas': [1], 'Uang': [0]})
print(model.predict(email_baru)) # ['Ham']
print(model.predict_proba(email_baru)) # probabilitas untuk tiap kelas
Hasilnya model memprediksi email tersebut sebagai Ham (bukan spam), sesuai dengan perhitungan manual yang kita lakukan sebelumnya.