Algoritma Naïve Bayes merupakan metode yang ditemukan oleh ilmuwan inggris Thomas Bayes, sehingga dikenal dengan teorema naïve bayes. Bayes merupakan teknik prediksi berbasis probalistik sederhana yang berdasar pada penerapan teorema bayes (atau aturan bayes) dengan asumsi independen (ketidaktergantungan) yang kuat (naif). Dengan kata lain, dalam Naïve Bayes, model yang digunakan adalah “model fitur independen”. Jadi Naïve Bayes merupakan salah satu algoritma yang terdapat pada teknik klasifikasi yang menggunakan probabilitas statistic. Digunakan untuk menentukan peluang dimasa depan dari pengalaman pada masa sebelumnya.
Keunggulan Algoritma Naive Bayes Classifier:
Sederhana dan mudah diterapkan
Tidak membutuhkan banyak data pelatihan
Menangani data kontinu dan diskrit
Sangat skalabel dengan jumlah prediktor dan titik data
Cepat dan dapat digunakan untuk membuat prediksi realtime
Tidak sensitif terhadap fitur yang tidak relevan.
Tahapan algoritma Naive Bayes secara umum :
Membaca data training
Menghitung jumlah probabilitas
Memastikan tipe data jika :
Mencari mean tiap parameter
Mencari standar devisiasi tiap parameter
Membuat Tabel mean dan standar devisiasi
Mencari jumlah probabilitas
Membuat tabel probabilitas
Mengalikan semua variabel kelas
Keputusan
library(mlbench)
library(e1071)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)
library(gmodels)
Memuat data :
data("BreastCancer")
str(BreastCancer)
## 'data.frame': 699 obs. of 11 variables:
## $ Id : chr "1000025" "1002945" "1015425" "1016277" ...
## $ Cl.thickness : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 5 5 3 6 4 8 1 2 2 4 ...
## $ Cell.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 1 1 2 ...
## $ Cell.shape : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 4 1 8 1 10 1 2 1 1 ...
## $ Marg.adhesion : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 1 5 1 1 3 8 1 1 1 1 ...
## $ Epith.c.size : Ord.factor w/ 10 levels "1"<"2"<"3"<"4"<..: 2 7 2 3 2 7 2 2 2 2 ...
## $ Bare.nuclei : Factor w/ 10 levels "1","2","3","4",..: 1 10 2 4 1 10 10 1 1 1 ...
## $ Bl.cromatin : Factor w/ 10 levels "1","2","3","4",..: 3 3 3 3 3 9 3 3 1 2 ...
## $ Normal.nucleoli: Factor w/ 10 levels "1","2","3","4",..: 1 2 1 7 1 7 1 1 1 1 ...
## $ Mitoses : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 5 1 ...
## $ Class : Factor w/ 2 levels "benign","malignant": 1 1 1 1 1 2 1 1 1 1 ...
Setelah itu kita akan melihat level dari variabel Class untuk mengetahui berapa jenis kangker yang ada di dataset :
levels(BreastCancer$Class)
## [1] "benign" "malignant"
Memuat data dengan lebih jelas dan detail :
summary(BreastCancer)
## Id Cl.thickness Cell.size Cell.shape Marg.adhesion
## Length:699 1 :145 1 :384 1 :353 1 :407
## Class :character 5 :130 10 : 67 2 : 59 2 : 58
## Mode :character 3 :108 3 : 52 10 : 58 3 : 58
## 4 : 80 2 : 45 3 : 56 10 : 55
## 10 : 69 4 : 40 4 : 44 4 : 33
## 2 : 50 5 : 30 5 : 34 8 : 25
## (Other):117 (Other): 81 (Other): 95 (Other): 63
## Epith.c.size Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses
## 2 :386 1 :402 2 :166 1 :443 1 :579
## 3 : 72 10 :132 3 :165 10 : 61 2 : 35
## 4 : 48 2 : 30 1 :152 3 : 44 3 : 33
## 1 : 47 5 : 30 7 : 73 2 : 36 10 : 14
## 6 : 41 3 : 28 4 : 40 8 : 24 4 : 12
## 5 : 39 (Other): 61 5 : 34 6 : 22 7 : 9
## (Other): 66 NA's : 16 (Other): 69 (Other): 69 (Other): 17
## Class
## benign :458
## malignant:241
##
##
##
##
##
Bar Diagram :
CleanDataset <- na.omit(BreastCancer)
qplot(Class, data=CleanDataset, geom = "bar") + theme(axis.text.x = element_text(angle = 0, hjust = 2))
Setelah kita lihat dataset secara menyeluruh ternyata terdapat NA atau nilai yang hilang (Missing Value) yakni sebanyak 16 NA.
Selanjutnya kita hapus atau menghilangkan baris yang terdapat nilai NA :
head(is.na(BreastCancer))
## Id Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 1 FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE
## 3 FALSE FALSE FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE FALSE FALSE
## 6 FALSE FALSE FALSE FALSE FALSE FALSE
## Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses Class
## 1 FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE
## 3 FALSE FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE FALSE
## 6 FALSE FALSE FALSE FALSE FALSE
Membagi data menjadi data Training, data Testing, dan data Prediksi :
library(caTools)
set.seed(150)
#Splitting data Training dan data Testing
split=sample.split(BreastCancer, SplitRatio = 0.9)
#Dataset Training
training_set=subset(BreastCancer,split==TRUE)
#Dataset Testing
test_set=subset(BreastCancer,split==FALSE)
dim(training_set)
## [1] 572 11
dim(test_set)
## [1] 127 11
# Menghapus Target Class
topredict_set<-test_set[2:10]
dim(topredict_set)
## [1] 127 9
Langkah selanjutnya adalah merancang model klasifikasi menggunakan algoritma Naive Bayes :
#Pembuatan Model NaiveBayes
model_naive <- naiveBayes(Class ~ ., data = training_set)
#Prediksi kelas target pada dataset validasi (topredict)
preds_naive <- predict(model_naive, newdata = topredict_set)
(conf_matrix_naive <- table(preds_naive, test_set$Class))
##
## preds_naive benign malignant
## benign 70 0
## malignant 2 55
confusionMatrix(conf_matrix_naive)
## Confusion Matrix and Statistics
##
##
## preds_naive benign malignant
## benign 70 0
## malignant 2 55
##
## Accuracy : 0.9843
## 95% CI : (0.9443, 0.9981)
## No Information Rate : 0.5669
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.9681
##
## Mcnemar's Test P-Value : 0.4795
##
## Sensitivity : 0.9722
## Specificity : 1.0000
## Pos Pred Value : 1.0000
## Neg Pred Value : 0.9649
## Prevalence : 0.5669
## Detection Rate : 0.5512
## Detection Prevalence : 0.5512
## Balanced Accuracy : 0.9861
##
## 'Positive' Class : benign
##
Penjelasan uji akurasi model di atas sebagai berikut:
Sensitivity = dari semua data aktual yang positif, seberapa mampu proporsi model menebak dengan benar kelas positif.
Specificity = dari semua data aktual yang negatif, seberapa mampu proporsi model menebak dengan benar kelas negatif.
Accuracy = seberapa mampu model menebak dengan benar variabel target Y.
Precision = dari semua hasil prediksi yang positif, seberapa mampu model menebak dengan benar kelas positif.
Dari hasil yang diperoleh, dapat kita ambil informasi bahwa kemampuan model dalam menebak target Y sebesar 98,48% . Sedangkan dari keseluruhan data aktual pada pasien yang terkena kangker payudara (kelas benign(jinak)), model mampu menebak dengan benar sebesar 97.22%. Dari keseluruhan data aktual pasien yang terkena kangker payudara (kelas melignant(ganas)), model mampu menebak dengan benar sebesar 100%. Dari keseluruhan hasil prediksi yang mampu ditebak oleh model, dengan benar kelas belign sebesar 100%.