library(mlbench)
## Warning: package 'mlbench' was built under R version 4.4.3
data("BreastCancer")
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
##
##
##
##
##
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
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 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%