Copyright @ Sya’roni @ Prof.Dr.Drs. Agus Widodo, M.Kes @ Magister Informatika @ UIN Maulana Malik Ibrahim @ UIN Malang
DATA
analisis Bayesian dengan menggunakan Kumpulan data United States Congressional Voting 1984 (HouseVotes84) diambil dari UCI Repository Of Machine Learning Database melalui mlbench package. Data meliputi 435 observasi dengan 17 variabel. 1 variabel class (demokrat, republik) dan 16 suara (ya, tidak) pada topik yang berbeda.
EXPLOR DAN PERSIAPAN DATA
library(mlbench)
library(e1071)
library(caret)
## Loading required package: lattice
## Loading required package: ggplot2
library(ggplot2)
library(gmodels)
# Memuat data
data(HouseVotes84)
# Struktur
str(HouseVotes84)
## 'data.frame': 435 obs. of 17 variables:
## $ Class: Factor w/ 2 levels "democrat","republican": 2 2 1 1 1 1 1 2 2 1 ...
## $ V1 : Factor w/ 2 levels "n","y": 1 1 NA 1 2 1 1 1 1 2 ...
## $ V2 : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 2 2 2 2 ...
## $ V3 : Factor w/ 2 levels "n","y": 1 1 2 2 2 2 1 1 1 2 ...
## $ V4 : Factor w/ 2 levels "n","y": 2 2 NA 1 1 1 2 2 2 1 ...
## $ V5 : Factor w/ 2 levels "n","y": 2 2 2 NA 2 2 2 2 2 1 ...
## $ V6 : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 2 2 2 1 ...
## $ V7 : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
## $ V8 : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
## $ V9 : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 2 ...
## $ V10 : Factor w/ 2 levels "n","y": 2 1 1 1 1 1 1 1 1 1 ...
## $ V11 : Factor w/ 2 levels "n","y": NA 1 2 2 2 1 1 1 1 1 ...
## $ V12 : Factor w/ 2 levels "n","y": 2 2 1 1 NA 1 1 1 2 1 ...
## $ V13 : Factor w/ 2 levels "n","y": 2 2 2 2 2 2 NA 2 2 1 ...
## $ V14 : Factor w/ 2 levels "n","y": 2 2 2 1 2 2 2 2 2 1 ...
## $ V15 : Factor w/ 2 levels "n","y": 1 1 1 1 2 2 2 NA 1 NA ...
## $ V16 : Factor w/ 2 levels "n","y": 2 NA 1 2 2 2 2 2 2 NA ...
summary(HouseVotes84$Class)
## democrat republican
## 267 168
summary(HouseVotes84)
## Class V1 V2 V3 V4 V5
## democrat :267 n :236 n :192 n :171 n :247 n :208
## republican:168 y :187 y :195 y :253 y :177 y :212
## NA's: 12 NA's: 48 NA's: 11 NA's: 11 NA's: 15
## V6 V7 V8 V9 V10 V11 V12
## n :152 n :182 n :178 n :206 n :212 n :264 n :233
## y :272 y :239 y :242 y :207 y :216 y :150 y :171
## NA's: 11 NA's: 14 NA's: 15 NA's: 22 NA's: 7 NA's: 21 NA's: 31
## V13 V14 V15 V16
## n :201 n :170 n :233 n : 62
## y :209 y :248 y :174 y :269
## NA's: 25 NA's: 17 NA's: 28 NA's:104
Ada beberapa data yang hilang di dataset. Pertama kami akan menghapus baris dengan nilai NA.
head(is.na(HouseVotes84))
## Class V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 3 FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## 6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## V13 V14 V15 V16
## 1 FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE TRUE
## 3 FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE
## 6 FALSE FALSE FALSE FALSE
CleanDataset <- na.omit(HouseVotes84)
qplot(Class, data=CleanDataset, geom = "bar") + theme(axis.text.x = element_text(angle = 0, hjust = 2))
set.seed(20)
# pengambilan sampel bertingkat. Pilih baris berdasarkan variabel Kelas sebagai strata
TrainingDataIndex <- createDataPartition(CleanDataset$Class, p=0.50, list = FALSE)
# Buat Data Pelatihan sebagai bagian dari kumpulan data dengan nomor indeks baris seperti yang diidentifikasi di atas dan semua kolom
trainingData <- CleanDataset[TrainingDataIndex,]
# Hal lain yang tidak ada dalam pelatihan adalah data pengujian. Perhatikan tanda - (minus)
testData <- CleanDataset[-TrainingDataIndex,]
# simpan labelnya
vote_train_labels <- trainingData$Class
vote_test_labels <- testData$Class
# periksa proporsi
prop.table(table(vote_train_labels))
## vote_train_labels
## democrat republican
## 0.5344828 0.4655172
prop.table(table(vote_test_labels))
## vote_test_labels
## democrat republican
## 0.5344828 0.4655172
TRAINING MODEL DATA
vote_classifier <- naiveBayes(trainingData, vote_train_labels)
EVALUASI KINERJA MODEL Prediksi Naive Bayes di vote_test_pred dan kemudian membandingkannya dengan label yang sebenarnya.
vote_test_pred <- predict(vote_classifier, testData)
head(vote_test_pred)
## [1] democrat republican democrat democrat republican democrat
## Levels: democrat republican
CrossTable(vote_test_pred, vote_test_labels,
prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
dnn = c('predicted', 'actual'))
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Col Total |
## |-------------------------|
##
##
## Total Observations in Table: 116
##
##
## | actual
## predicted | democrat | republican | Row Total |
## -------------|------------|------------|------------|
## democrat | 59 | 2 | 61 |
## | 0.952 | 0.037 | |
## -------------|------------|------------|------------|
## republican | 3 | 52 | 55 |
## | 0.048 | 0.963 | |
## -------------|------------|------------|------------|
## Column Total | 62 | 54 | 116 |
## | 0.534 | 0.466 | |
## -------------|------------|------------|------------|
##
##
Tingkat akurasi keseluruhan model adalah 0,955. 1 suara demokrat diidentifikasi sebagai republik dan 1 suara republik diberi label sebagai demokrat.