Pengertian Algoritma

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

Keunggulan Algoritma Naive Bayes Classifier:

  1. Sederhana dan mudah diterapkan

  2. Tidak membutuhkan banyak data pelatihan

  3. Menangani data kontinu dan diskrit

  4. Sangat skalabel dengan jumlah prediktor dan titik data

  5. Cepat dan dapat digunakan untuk membuat prediksi realtime

  6. Tidak sensitif terhadap fitur yang tidak relevan.

Tahapan Algoritma

Tahapan algoritma Naive Bayes secara umum :

  1. Membaca data training

  2. Menghitung jumlah probabilitas

  3. Memastikan tipe data jika :

  1. Jika tipe data numerik maka :
  1. Mencari mean tiap parameter

  2. Mencari standar devisiasi tiap parameter

  3. Membuat Tabel mean dan standar devisiasi

  1. Jika tipe data tidak numeric maka :
  1. Mencari jumlah probabilitas

  2. Membuat tabel probabilitas

  3. Mengalikan semua variabel kelas

  4. Keputusan

Eksplorasi DataSet

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))

Data Cleaning

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

Split Data

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

Pembuatan Model

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

Evaluasi

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%.