Memasukkan Paket yang berisi dataset BreastCancer
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
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 didataset.
levels(BreastCancer$Class)
## [1] "benign" "malignant"
untuk melihat lebih jelas dan lebih detail mengenai dataset BreastCanser, 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
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 nilaiyang 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
## Warning: package 'ggplot2' was built under R version 4.4.3
## Loading required package: lattice
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 :412 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 : 28 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
library(caTools)
## Warning: package 'caTools' was built under R version 4.4.3
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
dim(test_set)
## [1] 209 10
topredict_set<-test_set[2:10]
dim(topredict_set)
## [1] 209 9
Setelah semua dataset sudah disiapkan, maka langkah selanjutnya adalah mendesain model klasifikasimenggunakan algoritma yang berbeda untuk membandingkan keakuratan dari model algoritma dengan dataset BreastCancer
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.
library(e1071)
## Warning: package 'e1071' was built under R version 4.4.3
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%