Memuat library dan data

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

Mengeksplor Dataset

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

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

akan dilihat level dari variabel Class untuk mengetahui berapa jenis tumor yang ada di dataset.

## [1] "benign"    "malignant"

agar dapat dilihat lebih jelas dan detail mengenai dataset BreastCanser, bisa menggunakan fungsi summary()

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

Pembersihan Data

Dari fungsi summary() terlihat ada 16 data NA di Bare.nuclei sehingga perlu diproses

## 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
## Warning: package 'caret' was built under R version 4.4.3
## Loading required package: ggplot2
## Loading required package: lattice
## Warning: package 'lattice' was built under R version 4.4.3

pengecekan ulang data set yang sudah diperbaiki

##        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      :410   2      :166   1      :443     1      :579  
##  3      : 72   10     :133   3      :165   10     : 61     2      : 35  
##  4      : 48   2      : 32   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   8      : 22   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

load library yang caTools

library(caTools) #library untuk pembagian dataset
## Warning: package 'caTools' was built under R version 4.4.3
set.seed(150)
split=sample.split(BreastCancer, SplitRatio = 0.7) # Membagi Dataset menjadi data training dan data testing
training_set=subset(BreastCancer,split==TRUE) # Dataset Training
test_set=subset(BreastCancer,split==FALSE) # Datset Testing

kita akan melihat dimensi dari Data Training yang sudah dibuat

dim(training_set) # Dimensi data training
## [1] 490  10
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] # Menghapus Target Class
dim(topredict_set)
## [1] 209   9

Naive Bayes Classifier

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.

install Paket e1071 untuk memulai

library(e1071)
## Warning: package 'e1071' was built under R version 4.4.3
model_naive <- naiveBayes(Class ~ ., data = training_set) #Implementasi Naive Bayes
preds_naive <- predict(model_naive, newdata = topredict_set) #Memprediksi Target Classuntuk validasi
(conf_matrix_naive <- table(preds_naive, test_set$Class))
##            
## preds_naive benign malignant
##   benign       129         2
##   malignant      6        72

Berdasarkan hasil Confusion Matrix, metode Naive Bayes berhasil mengklasifikasikan 129 kasus benign (jinak) secara tepat, dengan dua kasus yang diprediksi keliru. Sementara itu, untuk kasus malignant (ganas), model ini mampu memprediksi dengan benar sebanyak 72 kasus dan melakukan kesalahan pada 6 kasus.

untuk mengetahui akurasi dari Metode Klasifikasi Naive Bayes digunakan script berikut:

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

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