
Naive Bayes classifier (NBC) merupakan salah satu metoda pemelajaran mesin yang memanfaatkan perhitungan probabilitas dan statistik yang dikemukakan oleh ilmuwan Inggris Thomas Bayes, yaitu memprediksi probabilitas di masa depan berdasarkan pengalaman di masa sebelumnya ref: wiki
Algoritma Naive Bayes
Contents
teknik klasifikasi berdasarkan penerapan teorema Bayes dengan asumsi kuat bahwa semua prediktor independen satu sama lain. Secara sederhana dengan kata lain, asumsinya adalah bahwa kehadiran fitur di kelas tidak tergantung pada kehadiran fitur lain di kelas yang sama. Misalnya, telepon dapat dipertimbangkan secerdas layar sentuh, fasilitas internet, kamera bagus dll. Padahal semua ini fitur bergantung satu sama lain, mereka berkontribusi secara independen terhadap kemungkinan bahwa ponsel tersebut adalah ponsel pintar. ref: dqlab
Contoh perhitungan bisa kalian pelajari disini
https://informatikalogi.com/algoritma-naive-bayes/
https://flinsetyadi.com/bayesian-classification-klasifikasi-naive-bayes/
WEKA naive bayes
Bila kalian ingin menggunakan tools untuk menghitung naive bayes, gunakan saja weka, misalkan saja, saya mempunyai dataset tennis.csv,
kemudian langsung saja pilih menu berikut classify -> Classifier –> NaiveBayes
kalian bisa membaca informasi diatas sebagai berikut
probabilitas class yaitu
- no: 0.38
- yes: 0.63
probabilitas outlook yaitu
- sunny-no: 4/8 = 0.5
- sunny-yes: 3/12 = 0.25
- overcast-no: 1/8 = 0.125
- overcast-yes: 5/12 = 0.416
- rainy-no: 3/8 =0.375
- rainy-yes: 4/12 = 0.33
RStudio Naive Bayes
Bila kalian menggunakan RStudio bisa menggunakan package e1071
library(dplyr) library(e1071) dat = read.csv('tennis.csv') model <- naiveBayes(play~outlook+temp+humidity+windy, data=dat) model
hasilnya agak sedikit berbeda dengan weka, kalian bisa setting nilai laplace nya
Naive Bayes Classifier for Discrete Predictors Call: naiveBayes.default(x = X, y = Y, laplace = laplace) A-priori probabilities: Y no yes 0.3571429 0.6428571 Conditional probabilities: outlook Y overcast rainy sunny no 0.0000000 0.4000000 0.6000000 yes 0.4444444 0.3333333 0.2222222 temp Y cool hot mild no 0.2000000 0.4000000 0.4000000 yes 0.3333333 0.2222222 0.4444444 humidity Y high normal no 0.8000000 0.2000000 yes 0.3333333 0.6666667 windy Y false true no 0.4000000 0.6000000 yes 0.6666667 0.3333333
ref: https://www.learnbymarketing.com/tutorials/naive-bayes-in-r/
Naive Bayes di Python
Naive bayes pada python kalian bisa menggunakan sklearn, namun ada sedikit perbedaan dimana untuk Weka dan Rstudio type data bisa menggunakan numerik dan kategorikal, namun pada sklearn harus diubah terlebih jika type data tersebut kategorikal. Misalkan naive bayes pada contoh berikut ref: datacamp
Kita buat terlebih dahulu dataset diatas menggunakan list pada Python yaitu terdiri dari
- atribut fitur yaitu wheater dan temperatur
- atribut target/kelas yaitu play
Inti dari kasus ini yaitu seseorang akan pergi bermain play tenis dengan kondisi cuaca (wheater) dan suhu (temperatur) sama seperti 2 kasus sebelumnya.
wheather=['Sunny','Sunny','Overcast','Rainy','Rainy','Rainy','Overcast','Sunny','Sunny','Rainy','Sunny','Overcast','Overcast','Rainy'] temp=['Hot','Hot','Hot','Mild','Cool','Cool','Cool','Mild','Cool','Mild','Mild','Mild','Hot','Mild'] play=['No','No','Yes','Yes','Yes','No','Yes','No','Yes','Yes','Yes','Yes','Yes','No']
Agar tampilan lebih menarik, kita buat tabular data saja menggunakan pandas
import pandas as pd dat = pd.DataFrame(data={'wheather':wheather,'temp':temp,'play':play})
tampilannya dat yaitu
wheather temp play 0 Sunny Hot No 1 Sunny Hot No 2 Overcast Hot Yes 3 Rainy Mild Yes 4 Rainy Cool Yes 5 Rainy Cool No 6 Overcast Cool Yes 7 Sunny Mild No 8 Sunny Cool Yes 9 Rainy Mild Yes 10 Sunny Mild Yes 11 Overcast Mild Yes 12 Overcast Hot Yes 13 Rainy Mild No
langkah selanjutnya encoding feature yaitu mengubah data kategorikal menjadi numerikal
from sklearn import preprocessing #creating labelEncoder le = preprocessing.LabelEncoder() wheather_encoded=le.fit_transform(wheather) print(wheather_encoded)
hal yang sama juga dilakukan untuk variabel yang lain
temp_encoded = le.fit_transform(temp) label = le.fit_transform(play)
ciri fitur yaitu wheather dan temperature digabung jadi satu
import numpy as np features = np.array([wheather_encoded,temp_encoded]) features = features.T features
kemudian lakukan training naive bayes dan prediksi
#Import Gaussian Naive Bayes model from sklearn.naive_bayes import GaussianNB #Create a Gaussian Classifier model = GaussianNB() # Train the model using the training sets model.fit(features,label.T) predicted = model.predict(features) predicted
Kesimpulan
Dari keseluruhan contoh naive bayes diatas, saya lebih suka menggunakan RStudio karena lebih simple namun kalau untuk membuat aplikasi, saya lebih suka menggunakan Java karena sangat mudah membuat GUI daripada menggunakan RShiny dan Python