Memuat Data

Memasukkan Paket yang berisi dataset BreastCancer

library(mlbench)
## Warning: package 'mlbench' was built under R version 4.4.3
data("BreastCancer")
head(BreastCancer)
##        Id Cl.thickness Cell.size Cell.shape Marg.adhesion Epith.c.size
## 1 1000025            5         1          1             1            2
## 2 1002945            5         4          4             5            7
## 3 1015425            3         1          1             1            2
## 4 1016277            6         8          8             1            3
## 5 1017023            4         1          1             3            2
## 6 1017122            8        10         10             8            7
##   Bare.nuclei Bl.cromatin Normal.nucleoli Mitoses     Class
## 1           1           3               1       1    benign
## 2          10           3               2       1    benign
## 3           2           3               1       1    benign
## 4           4           3               7       1    benign
## 5           1           3               1       1    benign
## 6          10           9               7       1 malignant

Mengeksplor Dataset

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

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 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      : 29   4      : 40   8      : 24     4      : 12  
##  5      : 39   8      : 21   5      : 34   6      : 22     7      :  9  
##  (Other): 66   (Other): 43   (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

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%

Random Forest Classifier

Kita akan menggunakan metode Random Forest. Random forest adalah suatu algoritma yang digunakan pada klasifikasi data dalam jumlah yang besar. Klasifikasi random forest dilakukan melalui penggabungan pohon dengan melakukan training pada sampel data yang dimiliki.

library(randomForest)
## Warning: package 'randomForest' was built under R version 4.4.3
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
model_rf <- randomForest(Class ~ ., data = training_set, importance=TRUE, ntree = 5)
preds_rf <- predict(model_rf, topredict_set)                  
(conf_matrix_forest <- table(preds_rf, test_set$Class))
##            
## preds_rf    benign malignant
##   benign       125         2
##   malignant     10        72

Dari hasil Confusion Matrix menunjukkan bahwa pengklasifikasian menggunakan Random Forest memprediksi 125 kasus benign / jinak dengan benar dan dua prediksi salah. Demikian pula, Random Forest memprediksi 72 kasus malignant / ganas dengan benar dan 10 prediksi salah.

Berikut adalah script untuk mengetahui akurasi dari Metode Klasifikasi Random Forest.

confusionMatrix(conf_matrix_forest) 
## Confusion Matrix and Statistics
## 
##            
## preds_rf    benign malignant
##   benign       125         2
##   malignant     10        72
##                                         
##                Accuracy : 0.9426        
##                  95% CI : (0.9019, 0.97)
##     No Information Rate : 0.6459        
##     P-Value [Acc > NIR] : < 2e-16       
##                                         
##                   Kappa : 0.8775        
##                                         
##  Mcnemar's Test P-Value : 0.04331       
##                                         
##             Sensitivity : 0.9259        
##             Specificity : 0.9730        
##          Pos Pred Value : 0.9843        
##          Neg Pred Value : 0.8780        
##              Prevalence : 0.6459        
##          Detection Rate : 0.5981        
##    Detection Prevalence : 0.6077        
##       Balanced Accuracy : 0.9494        
##                                         
##        'Positive' Class : benign        
## 

Hasil menunjukkan untuk keakuratan motode Random Forest untuk memprediksi Kanker Payudara sebesar 94.74%

DecisionTree Classifier

Metode selanjutnya yang akan kita gunakan adalah metode DecisionTree. Decision Tree atau bisa disebut dengan pohon keputusan merupakan adalah salah satu pendekatan pemodelan prediktif yang digunakan dalam statistik, penambangan data, dan pembelajaran mesin. Penggunaan pohon keputusan untuk beralih dari pengamatan tentang suatu item ke kesimpulan tentang nilai target item tersebut.

Fungsi rpart digunakan untuk menghitung Decision Tree. install terlabih dahulu paket rpart kemudian muat librarynya

library(rpart)
## Warning: package 'rpart' was built under R version 4.4.3
model_dtree<- rpart(Class ~ ., data=training_set) 
preds_dtree <- predict(model_dtree,newdata=topredict_set, type = "class")
#plot(preds_dtree, main="Decision tree created using rpart")
(conf_matrix_dtree <- table(preds_dtree, test_set$Class))
##            
## preds_dtree benign malignant
##   benign       127         5
##   malignant      8        69

Dari hasil DesicionTree menunjukkan bahwa pengklasifikasian menggunakan DecisionTree memprediksi 127 kasus benign / jinak dengan benar dan 5 prediksi salah. Demikian pula, DecisionTree memprediksi 69 kasus malignant / ganas dengan benar dan 8 prediksi salah.

Mari kita lihat keakuratan metode DecisionTree

confusionMatrix(conf_matrix_dtree)  
## Confusion Matrix and Statistics
## 
##            
## preds_dtree benign malignant
##   benign       127         5
##   malignant      8        69
##                                          
##                Accuracy : 0.9378         
##                  95% CI : (0.896, 0.9665)
##     No Information Rate : 0.6459         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.8652         
##                                          
##  Mcnemar's Test P-Value : 0.5791         
##                                          
##             Sensitivity : 0.9407         
##             Specificity : 0.9324         
##          Pos Pred Value : 0.9621         
##          Neg Pred Value : 0.8961         
##              Prevalence : 0.6459         
##          Detection Rate : 0.6077         
##    Detection Prevalence : 0.6316         
##       Balanced Accuracy : 0.9366         
##                                          
##        'Positive' Class : benign         
## 

Hasil menunjukkan untuk keakuratan motode DecisionTree untuk memprediksi Kanker Payudara sebesar 93.78%

Kesimpulan yang bisa diambil dari hasil perbandingan 3 Metode Klasifikasi dalam memprediksi Kanker Payudara berdasarkan dataset default dari BreastCancer adalah metode Naive Bayes lebih baik dalam memprediksi Kanker Payudara dengan akurasi perhitungannya sebesar 96.17%