PRAKTIKUM WEEK 5 - Naive Bayes

Masduqi Abdul Ghoni

2025-03-12

Memuat Data

Masukkan Paket yang berisi dataset BreastCancer

library(mlbench)
## Warning: package 'mlbench' was built under R version 4.4.3
data("BreastCancer")

Mengeksplor Dataset

Kita akan melihat struktur dari dataset BreastCancer. Terdapat 10 Variabel dengan jumlah total observasinya 699.

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 tumor yang ada di dataset

levels(BreastCancer$Class)
## [1] "benign"    "malignant"

Untuk melihat lebih jelas dan lebih detail mengenai dataset BreastCancer, bisa menggunakan fungsi summary().

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

Dari hasil summary kita bisa melihat jumlah NA atau bisa disebut nilai yang hilang yakni sejumlah 16.

Pembersihan Data

Nilai yang hilang adalah masalah yang sering terjadi dari kumpulan data. Untuk kasus ini nilai yang hilang bisa diatasi dengan menggunakan library mice untuk mengatasi 16 nilai yang hilang dengan memasukkan nilai yang hilang dengan nilai yang paling sesuai dengan mempertimbangkan kesembilan kolom lainnya dalam dataset.

Kolom Id disaring karena tidak diperlukan untuk mendesain pengklasifikasian.

library(mice)
## Warning: package 'mice' was built under R version 4.4.3
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Loading required package: lattice

Menghapus nilai yang hilang dan ID dari dataset dan Menambahkan kelas target ke dataset yang diperhitungkan tanpa nilai yang hilang.

dataset_impute <- mice(BreastCancer[,2:10], print = FALSE)
BreastCancer <- cbind(BreastCancer[,11, drop = FALSE], mice::complete(dataset_impute, 1))

Kemudian cek kembali dataset yang sudah diperbaiki

summary(BreastCancer)
##        Class      Cl.thickness   Cell.size     Cell.shape  Marg.adhesion
##  benign   :458   1      :145   1      :384   1      :353   1      :407  
##  malignant:241   5      :130   10     : 67   2      : 59   2      : 58  
##                  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      :411   2      :166   1      :443     1      :579  
##  3      : 72   10     :133   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 31   1      :152   3      : 44     3      : 33  
##  1      : 47   5      : 30   7      : 73   2      : 36     10     : 14  
##  6      : 41   3      : 29   4      : 40   8      : 24     4      : 12  
##  5      : 39   8      : 21   5      : 34   6      : 22     7      :  9  
##  (Other): 66   (Other): 44   (Other): 69   (Other): 69     (Other): 17

Membagi Dataset kedalam bentuk data training, data testing, dan data untuk prediksi

Install terlebih dahulu library caTools agar bisa digunakan

library(caTools)
## Warning: package 'caTools' was built under R version 4.4.3

Membagi Dataset menjadi data training dan data testing

set.seed(150)
split=sample.split(BreastCancer, SplitRatio = 0.7)
training_set=subset(BreastCancer,split==TRUE)
test_set=subset(BreastCancer,split==FALSE)

Kemudian kita akan melihat dimensi dari Data Training yang sudah dibuat

dim(training_set)
## [1] 490  10

Untuk melihat dimensi dari Data Testing yang sudah dibuat, seperti berikut

dim(test_set)
## [1] 209  10

Untuk melihat data yang digunakan untuk prediksi adalah dengan menghapus variabel kedua dari dataset, yakni variabel Class

topredict_set<-test_set[2:10]
dim(topredict_set)
## [1] 209   9

Setelah semua dataset sudah disiapkan, maka langkah selanjutnya adalah mendesain model klasifikasi menggunakan algoritma yang berbeda untuk membandingkan keakuratan dari model algoritma dengan dataset BreastCancer.

Naive Bayes Classifier

Sekarang kita masuk pada Naive Bayes. Naive Bayes classifier merupakan salah satu metoda Machine Learning yang memanfaatkan perhitungan probabilitas dan statistik, yaitu memprediksi probabilitas pada masa depan berdasarkan pengalaman pada masa sebelumnya.

Untuk menggunakan Naive Bayes di Rstudo terlebih dahulu install Paket e1071, kemudian muat librarynya.

library(e1071)
model_naive <- naiveBayes(Class ~ ., data = training_set)
preds_naive <- predict(model_naive, newdata = topredict_set)
(conf_matrix_naive <- table(preds_naive, test_set$Class))
##            
## preds_naive benign malignant
##   benign       129         2
##   malignant      6        72

Dari hasil Confusion Matrix menunjukkan bahwa pengklasifikasian menggunakan Naive Bayes memprediksi 129 kasus benign / jinak dengan benar dan dua prediksi salah. Demikian pula, Naive Bayes memprediksi 72 kasus malignant / ganas dengan benar dan 6 prediksi salah.

Berikut adalah script untuk mengetahui akurasi dari Metode Klasifikasi Naive Bayes

confusionMatrix(conf_matrix_naive)
## Confusion Matrix and Statistics
## 
##            
## preds_naive benign malignant
##   benign       129         2
##   malignant      6        72
##                                          
##                Accuracy : 0.9617         
##                  95% CI : (0.926, 0.9833)
##     No Information Rate : 0.6459         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9173         
##                                          
##  Mcnemar's Test P-Value : 0.2888         
##                                          
##             Sensitivity : 0.9556         
##             Specificity : 0.9730         
##          Pos Pred Value : 0.9847         
##          Neg Pred Value : 0.9231         
##              Prevalence : 0.6459         
##          Detection Rate : 0.6172         
##    Detection Prevalence : 0.6268         
##       Balanced Accuracy : 0.9643         
##                                          
##        'Positive' Class : benign         
## 

Hasil menunjukkan untuk keakuratan motode Naive Bayes untuk memprediksi Kanker Payudara sebesar 96.17%