Chapter 4 Praktikum 4

4.0.1 Preparation

4.0.1.1 Data

dt4 <- read.csv("https://raw.githubusercontent.com/Zen-Rofiqy/STA1382-TPM/main/Materi/Prak%2004/ObesityDataSet.csv", stringsAsFactors = TRUE)
datatable(dt4)
str(dt4)
## 'data.frame':    2111 obs. of  17 variables:
##  $ Gender                        : Factor w/ 2 levels "Female","Male": 1 1 2 2 2 2 1 2 2 2 ...
##  $ Age                           : num  21 21 23 27 22 29 23 22 24 22 ...
##  $ Height                        : num  1.62 1.52 1.8 1.8 1.78 1.62 1.5 1.64 1.78 1.72 ...
##  $ Weight                        : num  64 56 77 87 89.8 53 55 53 64 68 ...
##  $ family_history_with_overweight: Factor w/ 2 levels "no","yes": 2 2 2 1 1 1 2 1 2 2 ...
##  $ FAVC                          : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 2 1 2 2 ...
##  $ FCVC                          : num  2 3 2 3 2 2 3 2 3 2 ...
##  $ NCP                           : num  3 3 3 3 1 3 3 3 3 3 ...
##  $ CAEC                          : Factor w/ 4 levels "Always","Frequently",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ SMOKE                         : Factor w/ 2 levels "no","yes": 1 2 1 1 1 1 1 1 1 1 ...
##  $ CH2O                          : num  2 3 2 2 2 2 2 2 2 2 ...
##  $ SCC                           : Factor w/ 2 levels "no","yes": 1 2 1 1 1 1 1 1 1 1 ...
##  $ FAF                           : num  0 3 2 2 0 0 1 3 1 1 ...
##  $ TUE                           : num  1 0 1 0 0 0 0 0 1 1 ...
##  $ CALC                          : Factor w/ 4 levels "Always","Frequently",..: 3 4 2 2 4 4 4 4 2 3 ...
##  $ MTRANS                        : Factor w/ 5 levels "Automobile","Bike",..: 4 4 4 5 4 1 3 4 4 4 ...
##  $ NObeyesdad                    : Factor w/ 7 levels "Insufficient_Weight",..: 2 2 2 6 7 2 2 2 2 2 ...
skim(dt4)
Table 4.1: Data summary
Name dt4
Number of rows 2111
Number of columns 17
_______________________
Column type frequency:
factor 9
numeric 8
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Gender 0 1 FALSE 2 Mal: 1068, Fem: 1043
family_history_with_overweight 0 1 FALSE 2 yes: 1726, no: 385
FAVC 0 1 FALSE 2 yes: 1866, no: 245
CAEC 0 1 FALSE 4 Som: 1765, Fre: 242, Alw: 53, no: 51
SMOKE 0 1 FALSE 2 no: 2067, yes: 44
SCC 0 1 FALSE 2 no: 2015, yes: 96
CALC 0 1 FALSE 4 Som: 1401, no: 639, Fre: 70, Alw: 1
MTRANS 0 1 FALSE 5 Pub: 1580, Aut: 457, Wal: 56, Mot: 11
NObeyesdad 0 1 FALSE 7 Obe: 351, Obe: 324, Obe: 297, Ove: 290

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Age 0 1 24.31 6.35 14.00 19.95 22.78 26.00 61.00 ▇▅▂▁▁
Height 0 1 1.70 0.09 1.45 1.63 1.70 1.77 1.98 ▂▆▇▅▁
Weight 0 1 86.59 26.19 39.00 65.47 83.00 107.43 173.00 ▆▇▆▂▁
FCVC 0 1 2.42 0.53 1.00 2.00 2.39 3.00 3.00 ▁▁▇▂▇
NCP 0 1 2.69 0.78 1.00 2.66 3.00 3.00 4.00 ▂▁▁▇▁
CH2O 0 1 2.01 0.61 1.00 1.58 2.00 2.48 3.00 ▅▂▇▂▅
FAF 0 1 1.01 0.85 0.00 0.12 1.00 1.67 3.00 ▇▆▃▃▂
TUE 0 1 0.66 0.61 0.00 0.00 0.63 1.00 2.00 ▇▃▅▁▂

4.0.1.2 Cek Missing Value

colSums(is.na(dt4))
##                         Gender                            Age 
##                              0                              0 
##                         Height                         Weight 
##                              0                              0 
## family_history_with_overweight                           FAVC 
##                              0                              0 
##                           FCVC                            NCP 
##                              0                              0 
##                           CAEC                          SMOKE 
##                              0                              0 
##                           CH2O                            SCC 
##                              0                              0 
##                            FAF                            TUE 
##                              0                              0 
##                           CALC                         MTRANS 
##                              0                              0 
##                     NObeyesdad 
##                              0

4.0.1.3 Encoding Peubah Kategorik

# One-Hot Encoder
for(i in 1:(dim(dt4)[2] - 1)){
  if(is.factor(dt4[,i]) == TRUE){
    dt4[,i] <- to_categorical(as.integer(dt4[,i]) - 1)
  }
}

# Contoh Hasil One-Hot Encoder
head(dt4$MTRANS)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    0    0    0    1    0
## [2,]    0    0    0    1    0
## [3,]    0    0    0    1    0
## [4,]    0    0    0    0    1
## [5,]    0    0    0    1    0
## [6,]    1    0    0    0    0
table(dt4$NObeyesdad)
## 
## Insufficient_Weight       Normal_Weight      Obesity_Type_I 
##                 272                 287                 351 
##     Obesity_Type_II    Obesity_Type_III  Overweight_Level_I 
##                 297                 324                 290 
## Overweight_Level_II 
##                 290

4.0.1.4 Splitting Data & Scaling

set.seed(123)

# Train-Testing Split
train.index <- createDataPartition(dt4$NObeyesdad, p = 0.8, list = F)
train <- dt4[train.index, ]
test <- dt4[-train.index, ]

# Feature Scaling (Min-Max)
preprocessParams <- preProcess(train[, -17], method = "range")
train_X <- as.matrix(predict(preprocessParams, train[, -17]))
test_X <- as.matrix(predict(preprocessParams, test[, -17]))

# Encoding Variabel Respons
train_y <- to_categorical(as.integer(train[, 17])-1)
test_y <- to_categorical(as.integer(test[, 17])-1)

4.1 Klasifikasi Multikelas

4.1.1 Model 1 (1 hidden layer)

# Arsitektur Model
model <- keras_model_sequential() %>%
  layer_dense(units = 64, activation = "relu", input_shape = ncol(train_X)) %>%
  layer_dense(units = ncol(train_y), activation = "softmax")

# Kompilasi Model
model %>% compile(
  loss = "categorical_crossentropy",
  optimizer = "adam",
  metrics = c("accuracy")
)

print(model)
## Model: "sequential"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_1 (Dense)              (None, 64)                 2048       
##  dense (Dense)                (None, 7)                  455        
## ====================================================================
## Total params: 2503 (9.78 KB)
## Trainable params: 2503 (9.78 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________
# Training Model
history <- model %>% fit(
  train_X, train_y,
  shuffle = T,
  epochs = 100,
  batch_size = 32, 
  validation_split = 0.2
)
## Epoch 1/100
## 43/43 - 2s - loss: 1.8763 - accuracy: 0.2115 - val_loss: 2.9047 - val_accuracy: 0.0000e+00 - 2s/epoch - 51ms/step
## Epoch 2/100
## 43/43 - 1s - loss: 1.6734 - accuracy: 0.3580 - val_loss: 3.3868 - val_accuracy: 0.0088 - 587ms/epoch - 14ms/step
## Epoch 3/100
## 43/43 - 0s - loss: 1.5492 - accuracy: 0.4053 - val_loss: 3.5944 - val_accuracy: 0.1091 - 457ms/epoch - 11ms/step
## Epoch 4/100
## 43/43 - 1s - loss: 1.4508 - accuracy: 0.4527 - val_loss: 3.6416 - val_accuracy: 0.1150 - 517ms/epoch - 12ms/step
## Epoch 5/100
## 43/43 - 0s - loss: 1.3741 - accuracy: 0.4882 - val_loss: 3.4832 - val_accuracy: 0.0914 - 475ms/epoch - 11ms/step
## Epoch 6/100
## 43/43 - 0s - loss: 1.3146 - accuracy: 0.5074 - val_loss: 3.3722 - val_accuracy: 0.2212 - 483ms/epoch - 11ms/step
## Epoch 7/100
## 43/43 - 0s - loss: 1.2702 - accuracy: 0.5274 - val_loss: 3.2382 - val_accuracy: 0.2330 - 500ms/epoch - 12ms/step
## Epoch 8/100
## 43/43 - 1s - loss: 1.2240 - accuracy: 0.5525 - val_loss: 3.1389 - val_accuracy: 0.2242 - 514ms/epoch - 12ms/step
## Epoch 9/100
## 43/43 - 0s - loss: 1.1875 - accuracy: 0.5814 - val_loss: 3.1399 - val_accuracy: 0.1976 - 448ms/epoch - 10ms/step
## Epoch 10/100
## 43/43 - 0s - loss: 1.1559 - accuracy: 0.5865 - val_loss: 3.0029 - val_accuracy: 0.2035 - 433ms/epoch - 10ms/step
## Epoch 11/100
## 43/43 - 0s - loss: 1.1235 - accuracy: 0.6028 - val_loss: 2.8464 - val_accuracy: 0.2065 - 435ms/epoch - 10ms/step
## Epoch 12/100
## 43/43 - 0s - loss: 1.0974 - accuracy: 0.6206 - val_loss: 2.7371 - val_accuracy: 0.2537 - 486ms/epoch - 11ms/step
## Epoch 13/100
## 43/43 - 1s - loss: 1.0737 - accuracy: 0.6176 - val_loss: 2.6654 - val_accuracy: 0.2153 - 501ms/epoch - 12ms/step
## Epoch 14/100
## 43/43 - 0s - loss: 1.0482 - accuracy: 0.6265 - val_loss: 2.5095 - val_accuracy: 0.2507 - 424ms/epoch - 10ms/step
## Epoch 15/100
## 43/43 - 1s - loss: 1.0252 - accuracy: 0.6546 - val_loss: 2.3661 - val_accuracy: 0.2507 - 502ms/epoch - 12ms/step
## Epoch 16/100
## 43/43 - 0s - loss: 1.0023 - accuracy: 0.6531 - val_loss: 2.3335 - val_accuracy: 0.2153 - 454ms/epoch - 11ms/step
## Epoch 17/100
## 43/43 - 1s - loss: 0.9864 - accuracy: 0.6620 - val_loss: 2.3392 - val_accuracy: 0.2153 - 510ms/epoch - 12ms/step
## Epoch 18/100
## 43/43 - 0s - loss: 0.9685 - accuracy: 0.6694 - val_loss: 2.2274 - val_accuracy: 0.1888 - 451ms/epoch - 10ms/step
## Epoch 19/100
## 43/43 - 1s - loss: 0.9466 - accuracy: 0.6797 - val_loss: 2.0668 - val_accuracy: 0.2419 - 575ms/epoch - 13ms/step
## Epoch 20/100
## 43/43 - 0s - loss: 0.9255 - accuracy: 0.6849 - val_loss: 2.0416 - val_accuracy: 0.2301 - 482ms/epoch - 11ms/step
## Epoch 21/100
## 43/43 - 1s - loss: 0.9120 - accuracy: 0.6864 - val_loss: 2.0341 - val_accuracy: 0.2478 - 509ms/epoch - 12ms/step
## Epoch 22/100
## 43/43 - 0s - loss: 0.8955 - accuracy: 0.6923 - val_loss: 1.8843 - val_accuracy: 0.2566 - 439ms/epoch - 10ms/step
## Epoch 23/100
## 43/43 - 0s - loss: 0.8773 - accuracy: 0.6975 - val_loss: 1.7692 - val_accuracy: 0.2537 - 480ms/epoch - 11ms/step
## Epoch 24/100
## 43/43 - 0s - loss: 0.8627 - accuracy: 0.7049 - val_loss: 1.6241 - val_accuracy: 0.2684 - 420ms/epoch - 10ms/step
## Epoch 25/100
## 43/43 - 0s - loss: 0.8463 - accuracy: 0.7056 - val_loss: 1.6227 - val_accuracy: 0.2566 - 496ms/epoch - 12ms/step
## Epoch 26/100
## 43/43 - 0s - loss: 0.8344 - accuracy: 0.7160 - val_loss: 1.5231 - val_accuracy: 0.2625 - 420ms/epoch - 10ms/step
## Epoch 27/100
## 43/43 - 0s - loss: 0.8176 - accuracy: 0.7204 - val_loss: 1.5009 - val_accuracy: 0.2596 - 435ms/epoch - 10ms/step
## Epoch 28/100
## 43/43 - 0s - loss: 0.8001 - accuracy: 0.7322 - val_loss: 1.4384 - val_accuracy: 0.2684 - 421ms/epoch - 10ms/step
## Epoch 29/100
## 43/43 - 0s - loss: 0.7882 - accuracy: 0.7359 - val_loss: 1.3486 - val_accuracy: 0.2684 - 455ms/epoch - 11ms/step
## Epoch 30/100
## 43/43 - 1s - loss: 0.7759 - accuracy: 0.7411 - val_loss: 1.2993 - val_accuracy: 0.2684 - 517ms/epoch - 12ms/step
## Epoch 31/100
## 43/43 - 0s - loss: 0.7634 - accuracy: 0.7433 - val_loss: 1.2524 - val_accuracy: 0.2684 - 439ms/epoch - 10ms/step
## Epoch 32/100
## 43/43 - 0s - loss: 0.7484 - accuracy: 0.7426 - val_loss: 1.1967 - val_accuracy: 0.2684 - 470ms/epoch - 11ms/step
## Epoch 33/100
## 43/43 - 0s - loss: 0.7330 - accuracy: 0.7507 - val_loss: 1.1582 - val_accuracy: 0.2625 - 466ms/epoch - 11ms/step
## Epoch 34/100
## 43/43 - 0s - loss: 0.7205 - accuracy: 0.7581 - val_loss: 1.1014 - val_accuracy: 0.2684 - 497ms/epoch - 12ms/step
## Epoch 35/100
## 43/43 - 0s - loss: 0.7065 - accuracy: 0.7596 - val_loss: 1.1480 - val_accuracy: 0.2596 - 471ms/epoch - 11ms/step
## Epoch 36/100
## 43/43 - 0s - loss: 0.6974 - accuracy: 0.7618 - val_loss: 1.0800 - val_accuracy: 0.2625 - 497ms/epoch - 12ms/step
## Epoch 37/100
## 43/43 - 0s - loss: 0.6851 - accuracy: 0.7626 - val_loss: 1.0121 - val_accuracy: 0.2625 - 419ms/epoch - 10ms/step
## Epoch 38/100
## 43/43 - 0s - loss: 0.6741 - accuracy: 0.7729 - val_loss: 0.9681 - val_accuracy: 0.2625 - 464ms/epoch - 11ms/step
## Epoch 39/100
## 43/43 - 0s - loss: 0.6611 - accuracy: 0.7722 - val_loss: 1.0196 - val_accuracy: 0.2596 - 421ms/epoch - 10ms/step
## Epoch 40/100
## 43/43 - 0s - loss: 0.6498 - accuracy: 0.7774 - val_loss: 0.8687 - val_accuracy: 0.2625 - 451ms/epoch - 10ms/step
## Epoch 41/100
## 43/43 - 0s - loss: 0.6400 - accuracy: 0.7774 - val_loss: 0.8091 - val_accuracy: 0.2743 - 436ms/epoch - 10ms/step
## Epoch 42/100
## 43/43 - 0s - loss: 0.6269 - accuracy: 0.7944 - val_loss: 0.8219 - val_accuracy: 0.2802 - 432ms/epoch - 10ms/step
## Epoch 43/100
## 43/43 - 0s - loss: 0.6183 - accuracy: 0.7862 - val_loss: 0.8546 - val_accuracy: 0.2596 - 480ms/epoch - 11ms/step
## Epoch 44/100
## 43/43 - 0s - loss: 0.6118 - accuracy: 0.7973 - val_loss: 0.8476 - val_accuracy: 0.2566 - 419ms/epoch - 10ms/step
## Epoch 45/100
## 43/43 - 0s - loss: 0.6065 - accuracy: 0.8033 - val_loss: 0.8330 - val_accuracy: 0.2655 - 499ms/epoch - 12ms/step
## Epoch 46/100
## 43/43 - 0s - loss: 0.5900 - accuracy: 0.8040 - val_loss: 0.7856 - val_accuracy: 0.2802 - 470ms/epoch - 11ms/step
## Epoch 47/100
## 43/43 - 1s - loss: 0.5804 - accuracy: 0.8047 - val_loss: 0.6645 - val_accuracy: 0.5251 - 511ms/epoch - 12ms/step
## Epoch 48/100
## 43/43 - 0s - loss: 0.5729 - accuracy: 0.8092 - val_loss: 0.6270 - val_accuracy: 0.6549 - 486ms/epoch - 11ms/step
## Epoch 49/100
## 43/43 - 0s - loss: 0.5656 - accuracy: 0.8092 - val_loss: 0.6102 - val_accuracy: 0.6460 - 497ms/epoch - 12ms/step
## Epoch 50/100
## 43/43 - 0s - loss: 0.5500 - accuracy: 0.8232 - val_loss: 0.6516 - val_accuracy: 0.5575 - 435ms/epoch - 10ms/step
## Epoch 51/100
## 43/43 - 1s - loss: 0.5448 - accuracy: 0.8306 - val_loss: 0.6130 - val_accuracy: 0.6549 - 532ms/epoch - 12ms/step
## Epoch 52/100
## 43/43 - 0s - loss: 0.5345 - accuracy: 0.8291 - val_loss: 0.4479 - val_accuracy: 1.0000 - 421ms/epoch - 10ms/step
## Epoch 53/100
## 43/43 - 0s - loss: 0.5274 - accuracy: 0.8299 - val_loss: 0.5195 - val_accuracy: 0.9617 - 462ms/epoch - 11ms/step
## Epoch 54/100
## 43/43 - 0s - loss: 0.5179 - accuracy: 0.8388 - val_loss: 0.4716 - val_accuracy: 0.9971 - 451ms/epoch - 10ms/step
## Epoch 55/100
## 43/43 - 0s - loss: 0.5089 - accuracy: 0.8439 - val_loss: 0.4669 - val_accuracy: 0.9971 - 466ms/epoch - 11ms/step
## Epoch 56/100
## 43/43 - 1s - loss: 0.5007 - accuracy: 0.8536 - val_loss: 0.4798 - val_accuracy: 0.9912 - 788ms/epoch - 18ms/step
## Epoch 57/100
## 43/43 - 0s - loss: 0.4905 - accuracy: 0.8565 - val_loss: 0.4227 - val_accuracy: 1.0000 - 437ms/epoch - 10ms/step
## Epoch 58/100
## 43/43 - 0s - loss: 0.4857 - accuracy: 0.8491 - val_loss: 0.4140 - val_accuracy: 0.9941 - 485ms/epoch - 11ms/step
## Epoch 59/100
## 43/43 - 1s - loss: 0.4769 - accuracy: 0.8624 - val_loss: 0.3815 - val_accuracy: 0.9971 - 545ms/epoch - 13ms/step
## Epoch 60/100
## 43/43 - 0s - loss: 0.4703 - accuracy: 0.8617 - val_loss: 0.3585 - val_accuracy: 1.0000 - 436ms/epoch - 10ms/step
## Epoch 61/100
## 43/43 - 1s - loss: 0.4637 - accuracy: 0.8632 - val_loss: 0.4127 - val_accuracy: 0.9941 - 511ms/epoch - 12ms/step
## Epoch 62/100
## 43/43 - 0s - loss: 0.4555 - accuracy: 0.8669 - val_loss: 0.3559 - val_accuracy: 0.9971 - 435ms/epoch - 10ms/step
## Epoch 63/100
## 43/43 - 0s - loss: 0.4467 - accuracy: 0.8743 - val_loss: 0.4272 - val_accuracy: 0.9941 - 481ms/epoch - 11ms/step
## Epoch 64/100
## 43/43 - 0s - loss: 0.4427 - accuracy: 0.8750 - val_loss: 0.3177 - val_accuracy: 1.0000 - 481ms/epoch - 11ms/step
## Epoch 65/100
## 43/43 - 0s - loss: 0.4339 - accuracy: 0.8750 - val_loss: 0.3558 - val_accuracy: 0.9971 - 467ms/epoch - 11ms/step
## Epoch 66/100
## 43/43 - 0s - loss: 0.4285 - accuracy: 0.8772 - val_loss: 0.3552 - val_accuracy: 0.9941 - 431ms/epoch - 10ms/step
## Epoch 67/100
## 43/43 - 0s - loss: 0.4229 - accuracy: 0.8824 - val_loss: 0.3613 - val_accuracy: 0.9941 - 450ms/epoch - 10ms/step
## Epoch 68/100
## 43/43 - 0s - loss: 0.4184 - accuracy: 0.8780 - val_loss: 0.2762 - val_accuracy: 1.0000 - 484ms/epoch - 11ms/step
## Epoch 69/100
## 43/43 - 0s - loss: 0.4123 - accuracy: 0.8839 - val_loss: 0.2441 - val_accuracy: 1.0000 - 421ms/epoch - 10ms/step
## Epoch 70/100
## 43/43 - 0s - loss: 0.4078 - accuracy: 0.8854 - val_loss: 0.2895 - val_accuracy: 1.0000 - 464ms/epoch - 11ms/step
## Epoch 71/100
## 43/43 - 0s - loss: 0.3984 - accuracy: 0.8928 - val_loss: 0.2329 - val_accuracy: 1.0000 - 421ms/epoch - 10ms/step
## Epoch 72/100
## 43/43 - 1s - loss: 0.3965 - accuracy: 0.8831 - val_loss: 0.2784 - val_accuracy: 0.9971 - 529ms/epoch - 12ms/step
## Epoch 73/100
## 43/43 - 0s - loss: 0.3865 - accuracy: 0.8972 - val_loss: 0.2294 - val_accuracy: 1.0000 - 441ms/epoch - 10ms/step
## Epoch 74/100
## 43/43 - 1s - loss: 0.3831 - accuracy: 0.8861 - val_loss: 0.2497 - val_accuracy: 1.0000 - 509ms/epoch - 12ms/step
## Epoch 75/100
## 43/43 - 0s - loss: 0.3738 - accuracy: 0.8942 - val_loss: 0.2579 - val_accuracy: 0.9971 - 437ms/epoch - 10ms/step
## Epoch 76/100
## 43/43 - 1s - loss: 0.3721 - accuracy: 0.8950 - val_loss: 0.2343 - val_accuracy: 1.0000 - 515ms/epoch - 12ms/step
## Epoch 77/100
## 43/43 - 0s - loss: 0.3654 - accuracy: 0.9001 - val_loss: 0.1777 - val_accuracy: 1.0000 - 450ms/epoch - 10ms/step
## Epoch 78/100
## 43/43 - 0s - loss: 0.3605 - accuracy: 0.8979 - val_loss: 0.2033 - val_accuracy: 1.0000 - 485ms/epoch - 11ms/step
## Epoch 79/100
## 43/43 - 0s - loss: 0.3575 - accuracy: 0.8964 - val_loss: 0.2256 - val_accuracy: 0.9971 - 423ms/epoch - 10ms/step
## Epoch 80/100
## 43/43 - 0s - loss: 0.3504 - accuracy: 0.9024 - val_loss: 0.2033 - val_accuracy: 1.0000 - 460ms/epoch - 11ms/step
## Epoch 81/100
## 43/43 - 0s - loss: 0.3459 - accuracy: 0.9031 - val_loss: 0.1695 - val_accuracy: 1.0000 - 454ms/epoch - 11ms/step
## Epoch 82/100
## 43/43 - 0s - loss: 0.3411 - accuracy: 0.9001 - val_loss: 0.1796 - val_accuracy: 1.0000 - 452ms/epoch - 11ms/step
## Epoch 83/100
## 43/43 - 0s - loss: 0.3416 - accuracy: 0.9068 - val_loss: 0.2429 - val_accuracy: 0.9971 - 439ms/epoch - 10ms/step
## Epoch 84/100
## 43/43 - 0s - loss: 0.3347 - accuracy: 0.9068 - val_loss: 0.1893 - val_accuracy: 1.0000 - 439ms/epoch - 10ms/step
## Epoch 85/100
## 43/43 - 1s - loss: 0.3283 - accuracy: 0.9135 - val_loss: 0.1505 - val_accuracy: 1.0000 - 517ms/epoch - 12ms/step
## Epoch 86/100
## 43/43 - 0s - loss: 0.3253 - accuracy: 0.9083 - val_loss: 0.1840 - val_accuracy: 1.0000 - 434ms/epoch - 10ms/step
## Epoch 87/100
## 43/43 - 0s - loss: 0.3252 - accuracy: 0.9149 - val_loss: 0.1742 - val_accuracy: 1.0000 - 480ms/epoch - 11ms/step
## Epoch 88/100
## 43/43 - 0s - loss: 0.3190 - accuracy: 0.9090 - val_loss: 0.1597 - val_accuracy: 1.0000 - 435ms/epoch - 10ms/step
## Epoch 89/100
## 43/43 - 0s - loss: 0.3134 - accuracy: 0.9135 - val_loss: 0.1373 - val_accuracy: 1.0000 - 469ms/epoch - 11ms/step
## Epoch 90/100
## 43/43 - 0s - loss: 0.3091 - accuracy: 0.9172 - val_loss: 0.1597 - val_accuracy: 1.0000 - 462ms/epoch - 11ms/step
## Epoch 91/100
## 43/43 - 0s - loss: 0.3052 - accuracy: 0.9223 - val_loss: 0.1401 - val_accuracy: 1.0000 - 464ms/epoch - 11ms/step
## Epoch 92/100
## 43/43 - 0s - loss: 0.3019 - accuracy: 0.9186 - val_loss: 0.1341 - val_accuracy: 1.0000 - 437ms/epoch - 10ms/step
## Epoch 93/100
## 43/43 - 0s - loss: 0.2996 - accuracy: 0.9209 - val_loss: 0.1383 - val_accuracy: 1.0000 - 452ms/epoch - 11ms/step
## Epoch 94/100
## 43/43 - 0s - loss: 0.2939 - accuracy: 0.9238 - val_loss: 0.1274 - val_accuracy: 1.0000 - 455ms/epoch - 11ms/step
## Epoch 95/100
## 43/43 - 0s - loss: 0.2944 - accuracy: 0.9231 - val_loss: 0.1301 - val_accuracy: 1.0000 - 439ms/epoch - 10ms/step
## Epoch 96/100
## 43/43 - 0s - loss: 0.2886 - accuracy: 0.9231 - val_loss: 0.1424 - val_accuracy: 1.0000 - 471ms/epoch - 11ms/step
## Epoch 97/100
## 43/43 - 0s - loss: 0.2835 - accuracy: 0.9275 - val_loss: 0.1089 - val_accuracy: 1.0000 - 437ms/epoch - 10ms/step
## Epoch 98/100
## 43/43 - 0s - loss: 0.2807 - accuracy: 0.9216 - val_loss: 0.1276 - val_accuracy: 1.0000 - 485ms/epoch - 11ms/step
## Epoch 99/100
## 43/43 - 0s - loss: 0.2769 - accuracy: 0.9253 - val_loss: 0.1495 - val_accuracy: 1.0000 - 425ms/epoch - 10ms/step
## Epoch 100/100
## 43/43 - 0s - loss: 0.2745 - accuracy: 0.9283 - val_loss: 0.1045 - val_accuracy: 1.0000 - 468ms/epoch - 11ms/step
plot(history)

# Evaluasi Model dengan data Test
scores <- model %>% evaluate(test_X, test_y)
## 14/14 - 0s - loss: 0.4337 - accuracy: 0.8595 - 29ms/epoch - 2ms/step
print(scores)
##      loss  accuracy 
## 0.4337184 0.8595238

4.1.1.1 Prediksi Model

# Prediksi dalam bentuk peluang
pred <- predict(model, test_X)
## 14/14 - 0s - 77ms/epoch - 6ms/step
head(pred)
##              [,1]        [,2]         [,3]         [,4]
## [1,] 2.600199e-04 0.041470755 0.0008786384 1.821479e-06
## [2,] 3.355191e-05 0.027656645 0.0100326305 2.552671e-04
## [3,] 3.119846e-05 0.009541338 0.0196684375 1.104266e-03
## [4,] 7.869052e-07 0.021669116 0.1793686002 1.236608e-04
## [5,] 1.727294e-04 0.397273123 0.2290972918 2.983263e-03
## [6,] 1.433076e-06 0.001120305 0.8257898092 1.943087e-04
##              [,5]        [,6]       [,7]
## [1,] 2.364075e-05 0.009607756 0.94775736
## [2,] 4.443825e-05 0.080498412 0.88147908
## [3,] 2.204589e-02 0.135892496 0.81171626
## [4,] 2.529674e-04 0.537823141 0.26076177
## [5,] 4.198908e-06 0.135328367 0.23514108
## [6,] 2.564125e-03 0.086767666 0.08356237
# Prediksi Label
label_pred <- apply(pred, 1, which.max)
label_pred
##   [1] 7 7 7 6 2 3 2 2 6 7 2 2 2 1 2 2 2 7 7 2 2 6 2 1 2 6 2 6 6 2 3
##  [32] 7 2 2 6 2 2 7 4 1 7 7 2 6 3 2 4 6 3 2 2 6 2 3 2 2 5 2 7 2 2 6
##  [63] 2 2 2 2 2 2 2 2 3 2 2 2 3 6 2 7 2 2 2 2 6 2 2 2 2 2 6 2 7 2 6
##  [94] 2 2 2 1 2 2 2 2 2 6 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [125] 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6
## [156] 6 6 6 6 6 6 6 6 7 6 6 6 6 6 7 6 6 7 6 3 6 6 7 6 6 6 6 6 6 6 7
## [187] 6 6 6 6 7 6 6 6 7 6 6 6 7 7 7 6 7 7 7 6 7 7 7 6 7 7 7 7 7 3 7
## [218] 7 7 7 7 7 7 7 7 6 7 7 7 7 3 7 6 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3
## [249] 3 3 3 3 3 3 3 7 3 4 4 7 3 3 7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [280] 3 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
## [311] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [342] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [373] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [404] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
# Nilai aktual
label_true <- as.integer(test$NObeyesdad)
label_true
##   [1] 2 7 3 3 7 3 2 2 2 7 2 2 2 2 1 1 2 7 6 2 2 6 2 2 2 7 2 6 3 2 6
##  [32] 7 2 7 7 2 2 3 4 2 3 3 2 6 3 2 4 6 2 2 2 2 2 7 1 2 3 1 7 2 2 2
##  [63] 2 2 1 2 1 2 2 2 3 2 2 2 3 2 2 7 6 2 2 3 6 1 2 1 2 2 7 2 7 2 3
##  [94] 2 2 2 1 2 2 2 2 6 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [125] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6
## [156] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
## [187] 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
## [218] 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3
## [249] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [280] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
## [311] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [342] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [373] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [404] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5

4.1.1.2 Evaluasi Model

confusionMatrix(as.factor(label_true), as.factor(label_pred))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4  5  6  7
##          1 45  9  0  0  0  0  0
##          2  3 47  1  0  0  5  1
##          3  0  1 55  3  1  3  7
##          4  0  0  0 59  0  0  0
##          5  0  0  0  0 64  0  0
##          6  0  2  2  0  0 46  8
##          7  0  2  3  0  0  8 45
## 
## Overall Statistics
##                                           
##                Accuracy : 0.8595          
##                  95% CI : (0.8226, 0.8913)
##     No Information Rate : 0.1548          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.836           
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4 Class: 5
## Sensitivity            0.9375   0.7705   0.9016   0.9516   0.9846
## Specificity            0.9758   0.9721   0.9582   1.0000   1.0000
## Pos Pred Value         0.8333   0.8246   0.7857   1.0000   1.0000
## Neg Pred Value         0.9918   0.9614   0.9829   0.9917   0.9972
## Prevalence             0.1143   0.1452   0.1452   0.1476   0.1548
## Detection Rate         0.1071   0.1119   0.1310   0.1405   0.1524
## Detection Prevalence   0.1286   0.1357   0.1667   0.1405   0.1524
## Balanced Accuracy      0.9567   0.8713   0.9299   0.9758   0.9923
##                      Class: 6 Class: 7
## Sensitivity            0.7419   0.7377
## Specificity            0.9665   0.9638
## Pos Pred Value         0.7931   0.7759
## Neg Pred Value         0.9558   0.9558
## Prevalence             0.1476   0.1452
## Detection Rate         0.1095   0.1071
## Detection Prevalence   0.1381   0.1381
## Balanced Accuracy      0.8542   0.8507

4.1.2 Model 2 (2 Hidden layers + dropout)

# Membuat model neural network dengan 2 hidden layer
model.2 <- keras_model_sequential() %>%
  layer_dense(units = 128, activation = "relu", input_shape = ncol(train_X)) %>%
  layer_dropout(0.2) %>%
  layer_dense(units = 64, activation = "relu") %>%
  layer_dropout(0.2) %>%
  layer_dense(units = ncol(train_y), activation = "softmax")

# Mengkompilasi model
model.2 %>% compile(
  loss = "categorical_crossentropy",
  optimizer = "adam",
  metrics = c("accuracy")
)

# Melakukan tahapan pelatihan model
history <- model.2 %>% fit(
  train_X, train_y,
  shuffle = T,
  epochs = 100,
  batch_size = 32,
  validation_split = 0.2, 
  verbose = F       # tidak menampilkan teks ouput pada setiap epoch
)
print(model.2)
## Model: "sequential_1"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_4 (Dense)              (None, 128)                4096       
##  dropout_1 (Dropout)          (None, 128)                0          
##  dense_3 (Dense)              (None, 64)                 8256       
##  dropout (Dropout)            (None, 64)                 0          
##  dense_2 (Dense)              (None, 7)                  455        
## ====================================================================
## Total params: 12807 (50.03 KB)
## Trainable params: 12807 (50.03 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________
plot(history)

# Mengevaluasi model menggunakan data uji
scores <- model.2 %>% evaluate(test_X, test_y)
## 14/14 - 0s - loss: 0.1789 - accuracy: 0.9452 - 28ms/epoch - 2ms/step
print(scores)
##      loss  accuracy 
## 0.1789338 0.9452381

4.1.2.1 Prediksi Model

prediksi <- predict(model.2, test_X)
## 14/14 - 0s - 58ms/epoch - 4ms/step
head(prediksi)
##              [,1]         [,2]         [,3]         [,4]
## [1,] 2.781641e-06 7.648018e-02 1.656912e-06 2.369758e-13
## [2,] 1.719950e-13 6.854219e-06 7.988013e-05 1.259486e-08
## [3,] 2.617763e-13 1.486258e-06 6.610547e-01 1.319406e-03
## [4,] 2.783670e-15 3.844162e-06 7.695696e-01 5.143850e-06
## [5,] 7.483545e-11 3.629969e-04 3.730132e-02 2.529238e-05
## [6,] 5.533963e-16 4.902416e-09 9.932115e-01 2.370340e-06
##              [,5]         [,6]        [,7]
## [1,] 4.250012e-11 0.0611035228 0.862411916
## [2,] 4.061309e-11 0.0040372848 0.995876014
## [3,] 8.388476e-03 0.0048459987 0.324389905
## [4,] 6.795684e-05 0.0272171292 0.203136325
## [5,] 1.137284e-06 0.0031451676 0.959164023
## [6,] 4.285622e-05 0.0001107281 0.006632475

Untuk menentukan kategori dengan peluang terbesar kita dapat menggunakan fungsi which.max yang dikombinasikan dengan fungsi apply.

label_pred <- apply(prediksi, 1, which.max)
label_pred
##   [1] 7 7 3 3 7 3 2 2 6 7 2 2 2 1 2 1 2 7 7 2 2 6 2 1 2 7 2 6 3 2 2
##  [32] 7 2 7 7 2 2 7 4 1 7 3 2 6 3 2 4 2 6 2 2 2 2 3 1 2 3 1 7 2 2 2
##  [63] 2 2 2 2 2 2 2 2 3 2 2 2 3 2 2 7 2 2 2 7 6 2 2 2 2 2 7 2 7 2 3
##  [94] 2 2 2 1 2 2 2 2 6 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [125] 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6
## [156] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
## [187] 6 6 6 6 6 6 6 6 7 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 7
## [218] 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3
## [249] 3 3 3 3 3 3 3 7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [280] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
## [311] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [342] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [373] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [404] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
label_true <- as.integer(test$NObeyesdad)
label_true
##   [1] 2 7 3 3 7 3 2 2 2 7 2 2 2 2 1 1 2 7 6 2 2 6 2 2 2 7 2 6 3 2 6
##  [32] 7 2 7 7 2 2 3 4 2 3 3 2 6 3 2 4 6 2 2 2 2 2 7 1 2 3 1 7 2 2 2
##  [63] 2 2 1 2 1 2 2 2 3 2 2 2 3 2 2 7 6 2 2 3 6 1 2 1 2 2 7 2 7 2 3
##  [94] 2 2 2 1 2 2 2 2 6 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [125] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6
## [156] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
## [187] 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
## [218] 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3
## [249] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [280] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
## [311] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [342] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [373] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [404] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5

4.1.2.2 Evaluasi Model

confusionMatrix(as.factor(label_true), as.factor(label_pred))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4  5  6  7
##          1 48  6  0  0  0  0  0
##          2  3 51  0  0  0  2  1
##          3  0  0 66  0  0  0  4
##          4  0  0  0 59  0  0  0
##          5  0  0  0  0 64  0  0
##          6  0  3  0  0  0 53  2
##          7  0  0  2  0  0  0 56
## 
## Overall Statistics
##                                         
##                Accuracy : 0.9452        
##                  95% CI : (0.919, 0.965)
##     No Information Rate : 0.1619        
##     P-Value [Acc > NIR] : < 2.2e-16     
##                                         
##                   Kappa : 0.936         
##                                         
##  Mcnemar's Test P-Value : NA            
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4 Class: 5
## Sensitivity            0.9412   0.8500   0.9706   1.0000   1.0000
## Specificity            0.9837   0.9833   0.9886   1.0000   1.0000
## Pos Pred Value         0.8889   0.8947   0.9429   1.0000   1.0000
## Neg Pred Value         0.9918   0.9752   0.9943   1.0000   1.0000
## Prevalence             0.1214   0.1429   0.1619   0.1405   0.1524
## Detection Rate         0.1143   0.1214   0.1571   0.1405   0.1524
## Detection Prevalence   0.1286   0.1357   0.1667   0.1405   0.1524
## Balanced Accuracy      0.9625   0.9167   0.9796   1.0000   1.0000
##                      Class: 6 Class: 7
## Sensitivity            0.9636   0.8889
## Specificity            0.9863   0.9944
## Pos Pred Value         0.9138   0.9655
## Neg Pred Value         0.9945   0.9807
## Prevalence             0.1310   0.1500
## Detection Rate         0.1262   0.1333
## Detection Prevalence   0.1381   0.1381
## Balanced Accuracy      0.9750   0.9416

4.1.2.3 Save Model

# Menyimpan model dalam format HDF5
model.2 %>% save_model_hdf5("model_nn.h5")

# Memuat model dari file HDF5
model.2 <- load_model_hdf5("model_nn.h5")

print(model)
## Model: "sequential"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_1 (Dense)              (None, 64)                 2048       
##  dense (Dense)                (None, 7)                  455        
## ====================================================================
## Total params: 2503 (9.78 KB)
## Trainable params: 2503 (9.78 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________

4.1.3 Model 3 (2 hidden layer + dropout + callback)

# Multiclass Model dengan 2 hidden layers + dropout + checkpoint + earlyStopping

model.3 <- keras_model_sequential() %>%
           layer_dense(units = 120, activation = "relu", input_shape = ncol(train_X)) %>%
           layer_dropout(0.2) %>%
           layer_dense(units = 100, activation = "relu") %>%
           layer_dropout(0.1) %>%
           layer_dense(units = ncol(train_y), activation = "softmax")


# menentukan nama dan path file untuk penyimpanan model
filepath <- "model_check_x.keras"

# mengatur kriteria checkpoint
# simpan model jika memperoleh skor terbaik
checkpoint <- callback_model_checkpoint(
    filepath=filepath,
    monitor="val_accuracy",
    save_best_only=TRUE,
    mode="max",
    verbose=1,
)

# mengatur kondisi untuk early stopping
early_stopping <- callback_early_stopping(
    monitor="val_accuracy",
    patience=30,
    verbose=1,
)

# kompilasi model
model.3 %>% compile(
  loss = "categorical_crossentropy",
  optimizer = "adam",
  metrics = c("accuracy")
)

# melatih model
history <- model.3 %>% fit(
  train_X, train_y,
  shuffle = T,
  epochs = 200,
  batch_size = 64,
  # validation_split = 0.2, # atau
  validation_data = list(test_X, test_y),
  callbacks=list(checkpoint, early_stopping),
)
## Epoch 1/200
## 
## Epoch 1: val_accuracy improved from -inf to 0.43810, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 2s - loss: 1.8413 - accuracy: 0.2927 - val_loss: 1.6845 - val_accuracy: 0.4381 - 2s/epoch - 62ms/step
## Epoch 2/200
## 
## Epoch 2: val_accuracy improved from 0.43810 to 0.49048, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 1.5715 - accuracy: 0.4506 - val_loss: 1.4463 - val_accuracy: 0.4905 - 598ms/epoch - 22ms/step
## Epoch 3/200
## 
## Epoch 3: val_accuracy improved from 0.49048 to 0.52143, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 1.3430 - accuracy: 0.5151 - val_loss: 1.2858 - val_accuracy: 0.5214 - 562ms/epoch - 21ms/step
## Epoch 4/200
## 
## Epoch 4: val_accuracy improved from 0.52143 to 0.53810, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 1.1884 - accuracy: 0.5713 - val_loss: 1.1899 - val_accuracy: 0.5381 - 682ms/epoch - 25ms/step
## Epoch 5/200
## 
## Epoch 5: val_accuracy improved from 0.53810 to 0.56429, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 1.1095 - accuracy: 0.5795 - val_loss: 1.1237 - val_accuracy: 0.5643 - 471ms/epoch - 17ms/step
## Epoch 6/200
## 
## Epoch 6: val_accuracy improved from 0.56429 to 0.59048, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 1.0375 - accuracy: 0.6168 - val_loss: 1.0631 - val_accuracy: 0.5905 - 509ms/epoch - 19ms/step
## Epoch 7/200
## 
## Epoch 7: val_accuracy improved from 0.59048 to 0.61905, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.9744 - accuracy: 0.6410 - val_loss: 1.0093 - val_accuracy: 0.6190 - 499ms/epoch - 18ms/step
## Epoch 8/200
## 
## Epoch 8: val_accuracy improved from 0.61905 to 0.63095, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.9152 - accuracy: 0.6600 - val_loss: 0.9641 - val_accuracy: 0.6310 - 541ms/epoch - 20ms/step
## Epoch 9/200
## 
## Epoch 9: val_accuracy improved from 0.63095 to 0.67857, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.8737 - accuracy: 0.6783 - val_loss: 0.9113 - val_accuracy: 0.6786 - 482ms/epoch - 18ms/step
## Epoch 10/200
## 
## Epoch 10: val_accuracy improved from 0.67857 to 0.69762, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.8192 - accuracy: 0.7067 - val_loss: 0.8677 - val_accuracy: 0.6976 - 511ms/epoch - 19ms/step
## Epoch 11/200
## 
## Epoch 11: val_accuracy improved from 0.69762 to 0.71190, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.7848 - accuracy: 0.7150 - val_loss: 0.8285 - val_accuracy: 0.7119 - 482ms/epoch - 18ms/step
## Epoch 12/200
## 
## Epoch 12: val_accuracy improved from 0.71190 to 0.74048, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.7452 - accuracy: 0.7327 - val_loss: 0.7932 - val_accuracy: 0.7405 - 510ms/epoch - 19ms/step
## Epoch 13/200
## 
## Epoch 13: val_accuracy did not improve from 0.74048
## 27/27 - 0s - loss: 0.7214 - accuracy: 0.7357 - val_loss: 0.7681 - val_accuracy: 0.7262 - 436ms/epoch - 16ms/step
## Epoch 14/200
## 
## Epoch 14: val_accuracy improved from 0.74048 to 0.75714, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.6915 - accuracy: 0.7439 - val_loss: 0.7327 - val_accuracy: 0.7571 - 540ms/epoch - 20ms/step
## Epoch 15/200
## 
## Epoch 15: val_accuracy did not improve from 0.75714
## 27/27 - 0s - loss: 0.6606 - accuracy: 0.7664 - val_loss: 0.7248 - val_accuracy: 0.7310 - 438ms/epoch - 16ms/step
## Epoch 16/200
## 
## Epoch 16: val_accuracy did not improve from 0.75714
## 27/27 - 0s - loss: 0.6376 - accuracy: 0.7747 - val_loss: 0.6777 - val_accuracy: 0.7571 - 482ms/epoch - 18ms/step
## Epoch 17/200
## 
## Epoch 17: val_accuracy improved from 0.75714 to 0.75952, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.6045 - accuracy: 0.7800 - val_loss: 0.6583 - val_accuracy: 0.7595 - 479ms/epoch - 18ms/step
## Epoch 18/200
## 
## Epoch 18: val_accuracy improved from 0.75952 to 0.76190, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.5835 - accuracy: 0.7942 - val_loss: 0.6492 - val_accuracy: 0.7619 - 527ms/epoch - 20ms/step
## Epoch 19/200
## 
## Epoch 19: val_accuracy improved from 0.76190 to 0.79524, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.5701 - accuracy: 0.7978 - val_loss: 0.6106 - val_accuracy: 0.7952 - 470ms/epoch - 17ms/step
## Epoch 20/200
## 
## Epoch 20: val_accuracy did not improve from 0.79524
## 27/27 - 1s - loss: 0.5385 - accuracy: 0.8025 - val_loss: 0.5992 - val_accuracy: 0.7905 - 611ms/epoch - 23ms/step
## Epoch 21/200
## 
## Epoch 21: val_accuracy did not improve from 0.79524
## 27/27 - 1s - loss: 0.5277 - accuracy: 0.8179 - val_loss: 0.5797 - val_accuracy: 0.7810 - 509ms/epoch - 19ms/step
## Epoch 22/200
## 
## Epoch 22: val_accuracy did not improve from 0.79524
## 27/27 - 1s - loss: 0.5092 - accuracy: 0.8102 - val_loss: 0.5608 - val_accuracy: 0.7810 - 544ms/epoch - 20ms/step
## Epoch 23/200
## 
## Epoch 23: val_accuracy improved from 0.79524 to 0.80238, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.4966 - accuracy: 0.8232 - val_loss: 0.5361 - val_accuracy: 0.8024 - 542ms/epoch - 20ms/step
## Epoch 24/200
## 
## Epoch 24: val_accuracy improved from 0.80238 to 0.82619, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.4779 - accuracy: 0.8185 - val_loss: 0.5234 - val_accuracy: 0.8262 - 494ms/epoch - 18ms/step
## Epoch 25/200
## 
## Epoch 25: val_accuracy did not improve from 0.82619
## 27/27 - 0s - loss: 0.4471 - accuracy: 0.8350 - val_loss: 0.5115 - val_accuracy: 0.8119 - 438ms/epoch - 16ms/step
## Epoch 26/200
## 
## Epoch 26: val_accuracy did not improve from 0.82619
## 27/27 - 0s - loss: 0.4392 - accuracy: 0.8415 - val_loss: 0.5271 - val_accuracy: 0.7905 - 433ms/epoch - 16ms/step
## Epoch 27/200
## 
## Epoch 27: val_accuracy improved from 0.82619 to 0.83095, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.4390 - accuracy: 0.8409 - val_loss: 0.4738 - val_accuracy: 0.8310 - 469ms/epoch - 17ms/step
## Epoch 28/200
## 
## Epoch 28: val_accuracy improved from 0.83095 to 0.83333, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.4161 - accuracy: 0.8569 - val_loss: 0.4664 - val_accuracy: 0.8333 - 510ms/epoch - 19ms/step
## Epoch 29/200
## 
## Epoch 29: val_accuracy improved from 0.83333 to 0.84048, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.3926 - accuracy: 0.8616 - val_loss: 0.4607 - val_accuracy: 0.8405 - 467ms/epoch - 17ms/step
## Epoch 30/200
## 
## Epoch 30: val_accuracy did not improve from 0.84048
## 27/27 - 0s - loss: 0.3870 - accuracy: 0.8658 - val_loss: 0.4571 - val_accuracy: 0.8262 - 461ms/epoch - 17ms/step
## Epoch 31/200
## 
## Epoch 31: val_accuracy improved from 0.84048 to 0.85476, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.3693 - accuracy: 0.8788 - val_loss: 0.4212 - val_accuracy: 0.8548 - 495ms/epoch - 18ms/step
## Epoch 32/200
## 
## Epoch 32: val_accuracy did not improve from 0.85476
## 27/27 - 1s - loss: 0.3682 - accuracy: 0.8770 - val_loss: 0.4195 - val_accuracy: 0.8381 - 589ms/epoch - 22ms/step
## Epoch 33/200
## 
## Epoch 33: val_accuracy did not improve from 0.85476
## 27/27 - 1s - loss: 0.3595 - accuracy: 0.8764 - val_loss: 0.4162 - val_accuracy: 0.8405 - 563ms/epoch - 21ms/step
## Epoch 34/200
## 
## Epoch 34: val_accuracy improved from 0.85476 to 0.86190, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.3493 - accuracy: 0.8764 - val_loss: 0.3922 - val_accuracy: 0.8619 - 495ms/epoch - 18ms/step
## Epoch 35/200
## 
## Epoch 35: val_accuracy did not improve from 0.86190
## 27/27 - 0s - loss: 0.3418 - accuracy: 0.8776 - val_loss: 0.3917 - val_accuracy: 0.8595 - 431ms/epoch - 16ms/step
## Epoch 36/200
## 
## Epoch 36: val_accuracy did not improve from 0.86190
## 27/27 - 0s - loss: 0.3312 - accuracy: 0.8811 - val_loss: 0.4052 - val_accuracy: 0.8476 - 447ms/epoch - 17ms/step
## Epoch 37/200
## 
## Epoch 37: val_accuracy did not improve from 0.86190
## 27/27 - 0s - loss: 0.3143 - accuracy: 0.8900 - val_loss: 0.3805 - val_accuracy: 0.8595 - 420ms/epoch - 16ms/step
## Epoch 38/200
## 
## Epoch 38: val_accuracy did not improve from 0.86190
## 27/27 - 0s - loss: 0.3090 - accuracy: 0.8924 - val_loss: 0.3678 - val_accuracy: 0.8619 - 452ms/epoch - 17ms/step
## Epoch 39/200
## 
## Epoch 39: val_accuracy improved from 0.86190 to 0.86905, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.3006 - accuracy: 0.8965 - val_loss: 0.3527 - val_accuracy: 0.8690 - 496ms/epoch - 18ms/step
## Epoch 40/200
## 
## Epoch 40: val_accuracy did not improve from 0.86905
## 27/27 - 0s - loss: 0.2961 - accuracy: 0.8900 - val_loss: 0.3364 - val_accuracy: 0.8643 - 497ms/epoch - 18ms/step
## Epoch 41/200
## 
## Epoch 41: val_accuracy improved from 0.86905 to 0.87857, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2839 - accuracy: 0.8965 - val_loss: 0.3308 - val_accuracy: 0.8786 - 467ms/epoch - 17ms/step
## Epoch 42/200
## 
## Epoch 42: val_accuracy improved from 0.87857 to 0.88095, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2802 - accuracy: 0.8995 - val_loss: 0.3180 - val_accuracy: 0.8810 - 454ms/epoch - 17ms/step
## Epoch 43/200
## 
## Epoch 43: val_accuracy did not improve from 0.88095
## 27/27 - 0s - loss: 0.2908 - accuracy: 0.8959 - val_loss: 0.3286 - val_accuracy: 0.8810 - 422ms/epoch - 16ms/step
## Epoch 44/200
## 
## Epoch 44: val_accuracy did not improve from 0.88095
## 27/27 - 0s - loss: 0.2736 - accuracy: 0.8995 - val_loss: 0.3292 - val_accuracy: 0.8714 - 436ms/epoch - 16ms/step
## Epoch 45/200
## 
## Epoch 45: val_accuracy did not improve from 0.88095
## 27/27 - 0s - loss: 0.2552 - accuracy: 0.9095 - val_loss: 0.3227 - val_accuracy: 0.8667 - 482ms/epoch - 18ms/step
## Epoch 46/200
## 
## Epoch 46: val_accuracy improved from 0.88095 to 0.88333, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.2475 - accuracy: 0.9184 - val_loss: 0.3123 - val_accuracy: 0.8833 - 500ms/epoch - 19ms/step
## Epoch 47/200
## 
## Epoch 47: val_accuracy improved from 0.88333 to 0.88810, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2617 - accuracy: 0.9066 - val_loss: 0.2960 - val_accuracy: 0.8881 - 483ms/epoch - 18ms/step
## Epoch 48/200
## 
## Epoch 48: val_accuracy improved from 0.88810 to 0.89286, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2333 - accuracy: 0.9225 - val_loss: 0.2894 - val_accuracy: 0.8929 - 484ms/epoch - 18ms/step
## Epoch 49/200
## 
## Epoch 49: val_accuracy did not improve from 0.89286
## 27/27 - 0s - loss: 0.2342 - accuracy: 0.9219 - val_loss: 0.2865 - val_accuracy: 0.8905 - 453ms/epoch - 17ms/step
## Epoch 50/200
## 
## Epoch 50: val_accuracy did not improve from 0.89286
## 27/27 - 0s - loss: 0.2232 - accuracy: 0.9267 - val_loss: 0.2836 - val_accuracy: 0.8905 - 433ms/epoch - 16ms/step
## Epoch 51/200
## 
## Epoch 51: val_accuracy improved from 0.89286 to 0.89762, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2317 - accuracy: 0.9202 - val_loss: 0.2737 - val_accuracy: 0.8976 - 478ms/epoch - 18ms/step
## Epoch 52/200
## 
## Epoch 52: val_accuracy did not improve from 0.89762
## 27/27 - 0s - loss: 0.2199 - accuracy: 0.9279 - val_loss: 0.2789 - val_accuracy: 0.8905 - 436ms/epoch - 16ms/step
## Epoch 53/200
## 
## Epoch 53: val_accuracy did not improve from 0.89762
## 27/27 - 0s - loss: 0.2104 - accuracy: 0.9243 - val_loss: 0.2652 - val_accuracy: 0.8976 - 466ms/epoch - 17ms/step
## Epoch 54/200
## 
## Epoch 54: val_accuracy improved from 0.89762 to 0.90952, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.2062 - accuracy: 0.9290 - val_loss: 0.2619 - val_accuracy: 0.9095 - 466ms/epoch - 17ms/step
## Epoch 55/200
## 
## Epoch 55: val_accuracy did not improve from 0.90952
## 27/27 - 0s - loss: 0.1974 - accuracy: 0.9367 - val_loss: 0.2577 - val_accuracy: 0.8976 - 454ms/epoch - 17ms/step
## Epoch 56/200
## 
## Epoch 56: val_accuracy did not improve from 0.90952
## 27/27 - 0s - loss: 0.2189 - accuracy: 0.9225 - val_loss: 0.2566 - val_accuracy: 0.9048 - 422ms/epoch - 16ms/step
## Epoch 57/200
## 
## Epoch 57: val_accuracy did not improve from 0.90952
## 27/27 - 0s - loss: 0.1920 - accuracy: 0.9320 - val_loss: 0.2576 - val_accuracy: 0.9048 - 418ms/epoch - 15ms/step
## Epoch 58/200
## 
## Epoch 58: val_accuracy improved from 0.90952 to 0.91429, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1872 - accuracy: 0.9326 - val_loss: 0.2482 - val_accuracy: 0.9143 - 468ms/epoch - 17ms/step
## Epoch 59/200
## 
## Epoch 59: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1857 - accuracy: 0.9373 - val_loss: 0.2507 - val_accuracy: 0.9095 - 419ms/epoch - 16ms/step
## Epoch 60/200
## 
## Epoch 60: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1990 - accuracy: 0.9355 - val_loss: 0.2460 - val_accuracy: 0.9048 - 433ms/epoch - 16ms/step
## Epoch 61/200
## 
## Epoch 61: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1869 - accuracy: 0.9314 - val_loss: 0.2391 - val_accuracy: 0.9024 - 416ms/epoch - 15ms/step
## Epoch 62/200
## 
## Epoch 62: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1810 - accuracy: 0.9326 - val_loss: 0.2439 - val_accuracy: 0.9143 - 434ms/epoch - 16ms/step
## Epoch 63/200
## 
## Epoch 63: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1916 - accuracy: 0.9302 - val_loss: 0.2291 - val_accuracy: 0.9119 - 450ms/epoch - 17ms/step
## Epoch 64/200
## 
## Epoch 64: val_accuracy did not improve from 0.91429
## 27/27 - 1s - loss: 0.1768 - accuracy: 0.9349 - val_loss: 0.2362 - val_accuracy: 0.9000 - 763ms/epoch - 28ms/step
## Epoch 65/200
## 
## Epoch 65: val_accuracy did not improve from 0.91429
## 27/27 - 0s - loss: 0.1655 - accuracy: 0.9480 - val_loss: 0.2317 - val_accuracy: 0.9095 - 420ms/epoch - 16ms/step
## Epoch 66/200
## 
## Epoch 66: val_accuracy improved from 0.91429 to 0.92381, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1688 - accuracy: 0.9361 - val_loss: 0.2345 - val_accuracy: 0.9238 - 497ms/epoch - 18ms/step
## Epoch 67/200
## 
## Epoch 67: val_accuracy improved from 0.92381 to 0.92619, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1666 - accuracy: 0.9509 - val_loss: 0.2296 - val_accuracy: 0.9262 - 465ms/epoch - 17ms/step
## Epoch 68/200
## 
## Epoch 68: val_accuracy did not improve from 0.92619
## 27/27 - 0s - loss: 0.1571 - accuracy: 0.9468 - val_loss: 0.2290 - val_accuracy: 0.9190 - 434ms/epoch - 16ms/step
## Epoch 69/200
## 
## Epoch 69: val_accuracy did not improve from 0.92619
## 27/27 - 0s - loss: 0.1433 - accuracy: 0.9503 - val_loss: 0.2255 - val_accuracy: 0.9190 - 418ms/epoch - 15ms/step
## Epoch 70/200
## 
## Epoch 70: val_accuracy did not improve from 0.92619
## 27/27 - 0s - loss: 0.1562 - accuracy: 0.9474 - val_loss: 0.2267 - val_accuracy: 0.9167 - 414ms/epoch - 15ms/step
## Epoch 71/200
## 
## Epoch 71: val_accuracy did not improve from 0.92619
## 27/27 - 0s - loss: 0.1675 - accuracy: 0.9379 - val_loss: 0.2235 - val_accuracy: 0.9143 - 437ms/epoch - 16ms/step
## Epoch 72/200
## 
## Epoch 72: val_accuracy improved from 0.92619 to 0.92857, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1422 - accuracy: 0.9545 - val_loss: 0.2239 - val_accuracy: 0.9286 - 463ms/epoch - 17ms/step
## Epoch 73/200
## 
## Epoch 73: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1486 - accuracy: 0.9521 - val_loss: 0.2197 - val_accuracy: 0.9262 - 433ms/epoch - 16ms/step
## Epoch 74/200
## 
## Epoch 74: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1417 - accuracy: 0.9515 - val_loss: 0.2300 - val_accuracy: 0.9095 - 421ms/epoch - 16ms/step
## Epoch 75/200
## 
## Epoch 75: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1375 - accuracy: 0.9545 - val_loss: 0.2185 - val_accuracy: 0.9190 - 439ms/epoch - 16ms/step
## Epoch 76/200
## 
## Epoch 76: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1384 - accuracy: 0.9509 - val_loss: 0.2132 - val_accuracy: 0.9262 - 447ms/epoch - 17ms/step
## Epoch 77/200
## 
## Epoch 77: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1350 - accuracy: 0.9539 - val_loss: 0.2103 - val_accuracy: 0.9214 - 419ms/epoch - 16ms/step
## Epoch 78/200
## 
## Epoch 78: val_accuracy did not improve from 0.92857
## 27/27 - 0s - loss: 0.1403 - accuracy: 0.9562 - val_loss: 0.2080 - val_accuracy: 0.9143 - 435ms/epoch - 16ms/step
## Epoch 79/200
## 
## Epoch 79: val_accuracy improved from 0.92857 to 0.93095, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1310 - accuracy: 0.9586 - val_loss: 0.2038 - val_accuracy: 0.9310 - 450ms/epoch - 17ms/step
## Epoch 80/200
## 
## Epoch 80: val_accuracy did not improve from 0.93095
## 27/27 - 0s - loss: 0.1303 - accuracy: 0.9556 - val_loss: 0.2172 - val_accuracy: 0.9167 - 436ms/epoch - 16ms/step
## Epoch 81/200
## 
## Epoch 81: val_accuracy did not improve from 0.93095
## 27/27 - 0s - loss: 0.1333 - accuracy: 0.9556 - val_loss: 0.2052 - val_accuracy: 0.9262 - 435ms/epoch - 16ms/step
## Epoch 82/200
## 
## Epoch 82: val_accuracy did not improve from 0.93095
## 27/27 - 0s - loss: 0.1255 - accuracy: 0.9604 - val_loss: 0.2140 - val_accuracy: 0.9167 - 451ms/epoch - 17ms/step
## Epoch 83/200
## 
## Epoch 83: val_accuracy did not improve from 0.93095
## 27/27 - 0s - loss: 0.1164 - accuracy: 0.9627 - val_loss: 0.2049 - val_accuracy: 0.9238 - 419ms/epoch - 16ms/step
## Epoch 84/200
## 
## Epoch 84: val_accuracy did not improve from 0.93095
## 27/27 - 0s - loss: 0.1145 - accuracy: 0.9592 - val_loss: 0.2026 - val_accuracy: 0.9262 - 434ms/epoch - 16ms/step
## Epoch 85/200
## 
## Epoch 85: val_accuracy improved from 0.93095 to 0.94048, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 0s - loss: 0.1242 - accuracy: 0.9562 - val_loss: 0.1977 - val_accuracy: 0.9405 - 467ms/epoch - 17ms/step
## Epoch 86/200
## 
## Epoch 86: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1256 - accuracy: 0.9580 - val_loss: 0.1952 - val_accuracy: 0.9357 - 433ms/epoch - 16ms/step
## Epoch 87/200
## 
## Epoch 87: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1233 - accuracy: 0.9539 - val_loss: 0.2058 - val_accuracy: 0.9333 - 434ms/epoch - 16ms/step
## Epoch 88/200
## 
## Epoch 88: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1219 - accuracy: 0.9545 - val_loss: 0.2066 - val_accuracy: 0.9381 - 426ms/epoch - 16ms/step
## Epoch 89/200
## 
## Epoch 89: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1151 - accuracy: 0.9604 - val_loss: 0.2105 - val_accuracy: 0.9310 - 422ms/epoch - 16ms/step
## Epoch 90/200
## 
## Epoch 90: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1234 - accuracy: 0.9598 - val_loss: 0.2179 - val_accuracy: 0.9119 - 438ms/epoch - 16ms/step
## Epoch 91/200
## 
## Epoch 91: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1203 - accuracy: 0.9574 - val_loss: 0.1869 - val_accuracy: 0.9333 - 432ms/epoch - 16ms/step
## Epoch 92/200
## 
## Epoch 92: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.0990 - accuracy: 0.9687 - val_loss: 0.2017 - val_accuracy: 0.9262 - 419ms/epoch - 16ms/step
## Epoch 93/200
## 
## Epoch 93: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.0912 - accuracy: 0.9704 - val_loss: 0.1925 - val_accuracy: 0.9262 - 418ms/epoch - 15ms/step
## Epoch 94/200
## 
## Epoch 94: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1069 - accuracy: 0.9663 - val_loss: 0.1933 - val_accuracy: 0.9381 - 434ms/epoch - 16ms/step
## Epoch 95/200
## 
## Epoch 95: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1073 - accuracy: 0.9622 - val_loss: 0.2000 - val_accuracy: 0.9286 - 453ms/epoch - 17ms/step
## Epoch 96/200
## 
## Epoch 96: val_accuracy did not improve from 0.94048
## 27/27 - 0s - loss: 0.1036 - accuracy: 0.9669 - val_loss: 0.1951 - val_accuracy: 0.9357 - 430ms/epoch - 16ms/step
## Epoch 97/200
## 
## Epoch 97: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.1036 - accuracy: 0.9633 - val_loss: 0.1896 - val_accuracy: 0.9405 - 544ms/epoch - 20ms/step
## Epoch 98/200
## 
## Epoch 98: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.1083 - accuracy: 0.9616 - val_loss: 0.1960 - val_accuracy: 0.9310 - 905ms/epoch - 34ms/step
## Epoch 99/200
## 
## Epoch 99: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.1027 - accuracy: 0.9698 - val_loss: 0.1908 - val_accuracy: 0.9310 - 801ms/epoch - 30ms/step
## Epoch 100/200
## 
## Epoch 100: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.0979 - accuracy: 0.9681 - val_loss: 0.2104 - val_accuracy: 0.9190 - 840ms/epoch - 31ms/step
## Epoch 101/200
## 
## Epoch 101: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.0949 - accuracy: 0.9663 - val_loss: 0.1939 - val_accuracy: 0.9310 - 813ms/epoch - 30ms/step
## Epoch 102/200
## 
## Epoch 102: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.1039 - accuracy: 0.9622 - val_loss: 0.1862 - val_accuracy: 0.9357 - 826ms/epoch - 31ms/step
## Epoch 103/200
## 
## Epoch 103: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.0974 - accuracy: 0.9687 - val_loss: 0.1898 - val_accuracy: 0.9238 - 822ms/epoch - 30ms/step
## Epoch 104/200
## 
## Epoch 104: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.1015 - accuracy: 0.9651 - val_loss: 0.1826 - val_accuracy: 0.9333 - 808ms/epoch - 30ms/step
## Epoch 105/200
## 
## Epoch 105: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.0939 - accuracy: 0.9722 - val_loss: 0.1857 - val_accuracy: 0.9310 - 802ms/epoch - 30ms/step
## Epoch 106/200
## 
## Epoch 106: val_accuracy did not improve from 0.94048
## 27/27 - 1s - loss: 0.0999 - accuracy: 0.9663 - val_loss: 0.2104 - val_accuracy: 0.9286 - 809ms/epoch - 30ms/step
## Epoch 107/200
## 
## Epoch 107: val_accuracy improved from 0.94048 to 0.94762, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0965 - accuracy: 0.9675 - val_loss: 0.1708 - val_accuracy: 0.9476 - 793ms/epoch - 29ms/step
## Epoch 108/200
## 
## Epoch 108: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0906 - accuracy: 0.9716 - val_loss: 0.1899 - val_accuracy: 0.9333 - 828ms/epoch - 31ms/step
## Epoch 109/200
## 
## Epoch 109: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0889 - accuracy: 0.9698 - val_loss: 0.1725 - val_accuracy: 0.9405 - 780ms/epoch - 29ms/step
## Epoch 110/200
## 
## Epoch 110: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0947 - accuracy: 0.9651 - val_loss: 0.1856 - val_accuracy: 0.9357 - 847ms/epoch - 31ms/step
## Epoch 111/200
## 
## Epoch 111: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0871 - accuracy: 0.9710 - val_loss: 0.1721 - val_accuracy: 0.9381 - 807ms/epoch - 30ms/step
## Epoch 112/200
## 
## Epoch 112: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0866 - accuracy: 0.9698 - val_loss: 0.1876 - val_accuracy: 0.9238 - 762ms/epoch - 28ms/step
## Epoch 113/200
## 
## Epoch 113: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0867 - accuracy: 0.9710 - val_loss: 0.1893 - val_accuracy: 0.9333 - 774ms/epoch - 29ms/step
## Epoch 114/200
## 
## Epoch 114: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0859 - accuracy: 0.9675 - val_loss: 0.1831 - val_accuracy: 0.9476 - 767ms/epoch - 28ms/step
## Epoch 115/200
## 
## Epoch 115: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0941 - accuracy: 0.9687 - val_loss: 0.1915 - val_accuracy: 0.9286 - 796ms/epoch - 29ms/step
## Epoch 116/200
## 
## Epoch 116: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0848 - accuracy: 0.9687 - val_loss: 0.1769 - val_accuracy: 0.9357 - 802ms/epoch - 30ms/step
## Epoch 117/200
## 
## Epoch 117: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0781 - accuracy: 0.9775 - val_loss: 0.2022 - val_accuracy: 0.9357 - 780ms/epoch - 29ms/step
## Epoch 118/200
## 
## Epoch 118: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0793 - accuracy: 0.9752 - val_loss: 0.1787 - val_accuracy: 0.9310 - 745ms/epoch - 28ms/step
## Epoch 119/200
## 
## Epoch 119: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0827 - accuracy: 0.9704 - val_loss: 0.1835 - val_accuracy: 0.9452 - 776ms/epoch - 29ms/step
## Epoch 120/200
## 
## Epoch 120: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0855 - accuracy: 0.9722 - val_loss: 0.1725 - val_accuracy: 0.9429 - 762ms/epoch - 28ms/step
## Epoch 121/200
## 
## Epoch 121: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0749 - accuracy: 0.9758 - val_loss: 0.2038 - val_accuracy: 0.9381 - 853ms/epoch - 32ms/step
## Epoch 122/200
## 
## Epoch 122: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0741 - accuracy: 0.9775 - val_loss: 0.1810 - val_accuracy: 0.9429 - 774ms/epoch - 29ms/step
## Epoch 123/200
## 
## Epoch 123: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0681 - accuracy: 0.9817 - val_loss: 0.1785 - val_accuracy: 0.9429 - 776ms/epoch - 29ms/step
## Epoch 124/200
## 
## Epoch 124: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0748 - accuracy: 0.9740 - val_loss: 0.2091 - val_accuracy: 0.9310 - 773ms/epoch - 29ms/step
## Epoch 125/200
## 
## Epoch 125: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0709 - accuracy: 0.9781 - val_loss: 0.1876 - val_accuracy: 0.9357 - 807ms/epoch - 30ms/step
## Epoch 126/200
## 
## Epoch 126: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0807 - accuracy: 0.9734 - val_loss: 0.1761 - val_accuracy: 0.9429 - 766ms/epoch - 28ms/step
## Epoch 127/200
## 
## Epoch 127: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0803 - accuracy: 0.9704 - val_loss: 0.1810 - val_accuracy: 0.9357 - 773ms/epoch - 29ms/step
## Epoch 128/200
## 
## Epoch 128: val_accuracy did not improve from 0.94762
## 27/27 - 1s - loss: 0.0724 - accuracy: 0.9716 - val_loss: 0.1889 - val_accuracy: 0.9333 - 773ms/epoch - 29ms/step
## Epoch 129/200
## 
## Epoch 129: val_accuracy improved from 0.94762 to 0.95238, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0713 - accuracy: 0.9769 - val_loss: 0.1742 - val_accuracy: 0.9524 - 851ms/epoch - 32ms/step
## Epoch 130/200
## 
## Epoch 130: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0685 - accuracy: 0.9752 - val_loss: 0.1856 - val_accuracy: 0.9405 - 794ms/epoch - 29ms/step
## Epoch 131/200
## 
## Epoch 131: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0666 - accuracy: 0.9793 - val_loss: 0.1854 - val_accuracy: 0.9357 - 762ms/epoch - 28ms/step
## Epoch 132/200
## 
## Epoch 132: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0693 - accuracy: 0.9775 - val_loss: 0.1687 - val_accuracy: 0.9405 - 776ms/epoch - 29ms/step
## Epoch 133/200
## 
## Epoch 133: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0678 - accuracy: 0.9775 - val_loss: 0.1702 - val_accuracy: 0.9524 - 776ms/epoch - 29ms/step
## Epoch 134/200
## 
## Epoch 134: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0678 - accuracy: 0.9781 - val_loss: 0.1731 - val_accuracy: 0.9500 - 842ms/epoch - 31ms/step
## Epoch 135/200
## 
## Epoch 135: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0673 - accuracy: 0.9728 - val_loss: 0.1707 - val_accuracy: 0.9476 - 773ms/epoch - 29ms/step
## Epoch 136/200
## 
## Epoch 136: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0687 - accuracy: 0.9734 - val_loss: 0.1881 - val_accuracy: 0.9452 - 760ms/epoch - 28ms/step
## Epoch 137/200
## 
## Epoch 137: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0783 - accuracy: 0.9716 - val_loss: 0.2057 - val_accuracy: 0.9286 - 776ms/epoch - 29ms/step
## Epoch 138/200
## 
## Epoch 138: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0795 - accuracy: 0.9728 - val_loss: 0.1749 - val_accuracy: 0.9429 - 792ms/epoch - 29ms/step
## Epoch 139/200
## 
## Epoch 139: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0675 - accuracy: 0.9763 - val_loss: 0.1773 - val_accuracy: 0.9429 - 793ms/epoch - 29ms/step
## Epoch 140/200
## 
## Epoch 140: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0578 - accuracy: 0.9805 - val_loss: 0.1775 - val_accuracy: 0.9429 - 778ms/epoch - 29ms/step
## Epoch 141/200
## 
## Epoch 141: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0581 - accuracy: 0.9811 - val_loss: 0.1737 - val_accuracy: 0.9381 - 760ms/epoch - 28ms/step
## Epoch 142/200
## 
## Epoch 142: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0695 - accuracy: 0.9769 - val_loss: 0.1813 - val_accuracy: 0.9452 - 794ms/epoch - 29ms/step
## Epoch 143/200
## 
## Epoch 143: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0656 - accuracy: 0.9805 - val_loss: 0.1846 - val_accuracy: 0.9476 - 784ms/epoch - 29ms/step
## Epoch 144/200
## 
## Epoch 144: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0638 - accuracy: 0.9793 - val_loss: 0.1928 - val_accuracy: 0.9405 - 762ms/epoch - 28ms/step
## Epoch 145/200
## 
## Epoch 145: val_accuracy did not improve from 0.95238
## 27/27 - 1s - loss: 0.0677 - accuracy: 0.9805 - val_loss: 0.1735 - val_accuracy: 0.9476 - 774ms/epoch - 29ms/step
## Epoch 146/200
## 
## Epoch 146: val_accuracy improved from 0.95238 to 0.95476, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0607 - accuracy: 0.9823 - val_loss: 0.1686 - val_accuracy: 0.9548 - 826ms/epoch - 31ms/step
## Epoch 147/200
## 
## Epoch 147: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0606 - accuracy: 0.9817 - val_loss: 0.1842 - val_accuracy: 0.9429 - 824ms/epoch - 31ms/step
## Epoch 148/200
## 
## Epoch 148: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0503 - accuracy: 0.9858 - val_loss: 0.1795 - val_accuracy: 0.9524 - 822ms/epoch - 30ms/step
## Epoch 149/200
## 
## Epoch 149: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0524 - accuracy: 0.9870 - val_loss: 0.1841 - val_accuracy: 0.9429 - 779ms/epoch - 29ms/step
## Epoch 150/200
## 
## Epoch 150: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0601 - accuracy: 0.9817 - val_loss: 0.1797 - val_accuracy: 0.9429 - 762ms/epoch - 28ms/step
## Epoch 151/200
## 
## Epoch 151: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0588 - accuracy: 0.9781 - val_loss: 0.1773 - val_accuracy: 0.9452 - 825ms/epoch - 31ms/step
## Epoch 152/200
## 
## Epoch 152: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0548 - accuracy: 0.9829 - val_loss: 0.1744 - val_accuracy: 0.9452 - 761ms/epoch - 28ms/step
## Epoch 153/200
## 
## Epoch 153: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0590 - accuracy: 0.9793 - val_loss: 0.1655 - val_accuracy: 0.9357 - 791ms/epoch - 29ms/step
## Epoch 154/200
## 
## Epoch 154: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0587 - accuracy: 0.9834 - val_loss: 0.1687 - val_accuracy: 0.9500 - 759ms/epoch - 28ms/step
## Epoch 155/200
## 
## Epoch 155: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0664 - accuracy: 0.9787 - val_loss: 0.1782 - val_accuracy: 0.9381 - 775ms/epoch - 29ms/step
## Epoch 156/200
## 
## Epoch 156: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0532 - accuracy: 0.9829 - val_loss: 0.1901 - val_accuracy: 0.9452 - 780ms/epoch - 29ms/step
## Epoch 157/200
## 
## Epoch 157: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0495 - accuracy: 0.9823 - val_loss: 0.2008 - val_accuracy: 0.9357 - 766ms/epoch - 28ms/step
## Epoch 158/200
## 
## Epoch 158: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0644 - accuracy: 0.9805 - val_loss: 0.1699 - val_accuracy: 0.9500 - 780ms/epoch - 29ms/step
## Epoch 159/200
## 
## Epoch 159: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0597 - accuracy: 0.9811 - val_loss: 0.1833 - val_accuracy: 0.9476 - 750ms/epoch - 28ms/step
## Epoch 160/200
## 
## Epoch 160: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0525 - accuracy: 0.9858 - val_loss: 0.1620 - val_accuracy: 0.9524 - 791ms/epoch - 29ms/step
## Epoch 161/200
## 
## Epoch 161: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0581 - accuracy: 0.9811 - val_loss: 0.1838 - val_accuracy: 0.9405 - 856ms/epoch - 32ms/step
## Epoch 162/200
## 
## Epoch 162: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0539 - accuracy: 0.9840 - val_loss: 0.1743 - val_accuracy: 0.9476 - 760ms/epoch - 28ms/step
## Epoch 163/200
## 
## Epoch 163: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0631 - accuracy: 0.9781 - val_loss: 0.1825 - val_accuracy: 0.9381 - 805ms/epoch - 30ms/step
## Epoch 164/200
## 
## Epoch 164: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0526 - accuracy: 0.9829 - val_loss: 0.1708 - val_accuracy: 0.9476 - 758ms/epoch - 28ms/step
## Epoch 165/200
## 
## Epoch 165: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0521 - accuracy: 0.9846 - val_loss: 0.2061 - val_accuracy: 0.9357 - 794ms/epoch - 29ms/step
## Epoch 166/200
## 
## Epoch 166: val_accuracy did not improve from 0.95476
## 27/27 - 1s - loss: 0.0587 - accuracy: 0.9805 - val_loss: 0.1687 - val_accuracy: 0.9429 - 779ms/epoch - 29ms/step
## Epoch 167/200
## 
## Epoch 167: val_accuracy improved from 0.95476 to 0.95714, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0493 - accuracy: 0.9811 - val_loss: 0.1575 - val_accuracy: 0.9571 - 821ms/epoch - 30ms/step
## Epoch 168/200
## 
## Epoch 168: val_accuracy did not improve from 0.95714
## 27/27 - 1s - loss: 0.0404 - accuracy: 0.9882 - val_loss: 0.1633 - val_accuracy: 0.9500 - 776ms/epoch - 29ms/step
## Epoch 169/200
## 
## Epoch 169: val_accuracy improved from 0.95714 to 0.95952, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0438 - accuracy: 0.9852 - val_loss: 0.1526 - val_accuracy: 0.9595 - 824ms/epoch - 31ms/step
## Epoch 170/200
## 
## Epoch 170: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0511 - accuracy: 0.9805 - val_loss: 0.1612 - val_accuracy: 0.9429 - 762ms/epoch - 28ms/step
## Epoch 171/200
## 
## Epoch 171: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0401 - accuracy: 0.9888 - val_loss: 0.1814 - val_accuracy: 0.9357 - 761ms/epoch - 28ms/step
## Epoch 172/200
## 
## Epoch 172: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0499 - accuracy: 0.9840 - val_loss: 0.1535 - val_accuracy: 0.9476 - 1s/epoch - 47ms/step
## Epoch 173/200
## 
## Epoch 173: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0501 - accuracy: 0.9817 - val_loss: 0.1717 - val_accuracy: 0.9452 - 779ms/epoch - 29ms/step
## Epoch 174/200
## 
## Epoch 174: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0622 - accuracy: 0.9793 - val_loss: 0.1629 - val_accuracy: 0.9500 - 806ms/epoch - 30ms/step
## Epoch 175/200
## 
## Epoch 175: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0610 - accuracy: 0.9793 - val_loss: 0.1824 - val_accuracy: 0.9476 - 775ms/epoch - 29ms/step
## Epoch 176/200
## 
## Epoch 176: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0530 - accuracy: 0.9823 - val_loss: 0.1650 - val_accuracy: 0.9524 - 762ms/epoch - 28ms/step
## Epoch 177/200
## 
## Epoch 177: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0430 - accuracy: 0.9864 - val_loss: 0.1778 - val_accuracy: 0.9405 - 780ms/epoch - 29ms/step
## Epoch 178/200
## 
## Epoch 178: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0462 - accuracy: 0.9882 - val_loss: 0.1637 - val_accuracy: 0.9500 - 760ms/epoch - 28ms/step
## Epoch 179/200
## 
## Epoch 179: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0434 - accuracy: 0.9858 - val_loss: 0.1662 - val_accuracy: 0.9500 - 804ms/epoch - 30ms/step
## Epoch 180/200
## 
## Epoch 180: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0426 - accuracy: 0.9876 - val_loss: 0.1713 - val_accuracy: 0.9452 - 775ms/epoch - 29ms/step
## Epoch 181/200
## 
## Epoch 181: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0497 - accuracy: 0.9817 - val_loss: 0.1668 - val_accuracy: 0.9524 - 792ms/epoch - 29ms/step
## Epoch 182/200
## 
## Epoch 182: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0495 - accuracy: 0.9805 - val_loss: 0.2006 - val_accuracy: 0.9357 - 774ms/epoch - 29ms/step
## Epoch 183/200
## 
## Epoch 183: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0590 - accuracy: 0.9817 - val_loss: 0.2014 - val_accuracy: 0.9333 - 776ms/epoch - 29ms/step
## Epoch 184/200
## 
## Epoch 184: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0525 - accuracy: 0.9829 - val_loss: 0.2175 - val_accuracy: 0.9357 - 793ms/epoch - 29ms/step
## Epoch 185/200
## 
## Epoch 185: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0429 - accuracy: 0.9876 - val_loss: 0.1767 - val_accuracy: 0.9500 - 794ms/epoch - 29ms/step
## Epoch 186/200
## 
## Epoch 186: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0478 - accuracy: 0.9829 - val_loss: 0.1820 - val_accuracy: 0.9381 - 786ms/epoch - 29ms/step
## Epoch 187/200
## 
## Epoch 187: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0432 - accuracy: 0.9864 - val_loss: 0.1785 - val_accuracy: 0.9476 - 788ms/epoch - 29ms/step
## Epoch 188/200
## 
## Epoch 188: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0389 - accuracy: 0.9888 - val_loss: 0.1727 - val_accuracy: 0.9476 - 770ms/epoch - 29ms/step
## Epoch 189/200
## 
## Epoch 189: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0399 - accuracy: 0.9870 - val_loss: 0.1755 - val_accuracy: 0.9500 - 781ms/epoch - 29ms/step
## Epoch 190/200
## 
## Epoch 190: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0429 - accuracy: 0.9846 - val_loss: 0.1725 - val_accuracy: 0.9452 - 857ms/epoch - 32ms/step
## Epoch 191/200
## 
## Epoch 191: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0439 - accuracy: 0.9858 - val_loss: 0.1893 - val_accuracy: 0.9405 - 864ms/epoch - 32ms/step
## Epoch 192/200
## 
## Epoch 192: val_accuracy did not improve from 0.95952
## 27/27 - 1s - loss: 0.0443 - accuracy: 0.9870 - val_loss: 0.1777 - val_accuracy: 0.9476 - 823ms/epoch - 30ms/step
## Epoch 193/200
## 
## Epoch 193: val_accuracy improved from 0.95952 to 0.96190, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_check_x.keras
## 27/27 - 1s - loss: 0.0429 - accuracy: 0.9852 - val_loss: 0.1690 - val_accuracy: 0.9619 - 872ms/epoch - 32ms/step
## Epoch 194/200
## 
## Epoch 194: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0330 - accuracy: 0.9888 - val_loss: 0.2210 - val_accuracy: 0.9357 - 871ms/epoch - 32ms/step
## Epoch 195/200
## 
## Epoch 195: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0479 - accuracy: 0.9823 - val_loss: 0.1835 - val_accuracy: 0.9452 - 851ms/epoch - 32ms/step
## Epoch 196/200
## 
## Epoch 196: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0419 - accuracy: 0.9840 - val_loss: 0.1898 - val_accuracy: 0.9357 - 807ms/epoch - 30ms/step
## Epoch 197/200
## 
## Epoch 197: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0364 - accuracy: 0.9882 - val_loss: 0.1963 - val_accuracy: 0.9381 - 804ms/epoch - 30ms/step
## Epoch 198/200
## 
## Epoch 198: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0403 - accuracy: 0.9870 - val_loss: 0.1690 - val_accuracy: 0.9500 - 808ms/epoch - 30ms/step
## Epoch 199/200
## 
## Epoch 199: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0433 - accuracy: 0.9846 - val_loss: 0.1733 - val_accuracy: 0.9381 - 808ms/epoch - 30ms/step
## Epoch 200/200
## 
## Epoch 200: val_accuracy did not improve from 0.96190
## 27/27 - 1s - loss: 0.0406 - accuracy: 0.9852 - val_loss: 0.1839 - val_accuracy: 0.9357 - 793ms/epoch - 29ms/step
summary(model.3)
## Model: "sequential_2"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_7 (Dense)              (None, 120)                3840       
##  dropout_3 (Dropout)          (None, 120)                0          
##  dense_6 (Dense)              (None, 100)                12100      
##  dropout_2 (Dropout)          (None, 100)                0          
##  dense_5 (Dense)              (None, 7)                  707        
## ====================================================================
## Total params: 16647 (65.03 KB)
## Trainable params: 16647 (65.03 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________
plot(history)

# evaluasi model
scores <- model.3 %>% evaluate(test_X, test_y)
## 14/14 - 0s - loss: 0.1839 - accuracy: 0.9357 - 71ms/epoch - 5ms/step
print(scores)
##      loss  accuracy 
## 0.1838573 0.9357143

4.1.3.1 Memuat Model Hasil Checkpoint + Prediksi

# memuat model yang disimpan hasil checkpoint
last.model <- load_model_tf("model_check_x.keras")

pred.3 <- predict(last.model, test_X)
## 14/14 - 0s - 108ms/epoch - 8ms/step
label_pred <- apply(pred.3, 1, which.max)
label_pred
##   [1] 2 7 3 7 7 3 2 2 6 7 2 2 2 1 2 2 2 7 6 2 2 2 2 1 2 7 2 6 3 2 7
##  [32] 7 2 7 7 2 6 3 4 1 7 3 2 6 3 2 4 6 2 2 2 2 2 7 2 2 3 1 7 2 2 2
##  [63] 2 2 1 2 2 2 2 2 3 2 2 2 3 2 2 7 2 2 2 3 6 1 2 1 2 2 7 2 7 2 3
##  [94] 2 2 2 1 2 2 2 2 6 2 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [125] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 6 6 6 6 6
## [156] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
## [187] 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 7
## [218] 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 3 3 3
## [249] 3 3 3 3 3 3 3 7 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [280] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4
## [311] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [342] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [373] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
## [404] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
# label_true <- apply(test_y, 1, which.max)
# label_true

confusionMatrix(as.factor(label_true), as.factor(label_pred))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  1  2  3  4  5  6  7
##          1 50  4  0  0  0  0  0
##          2  3 52  0  0  0  2  0
##          3  0  0 67  0  0  0  3
##          4  0  0  0 59  0  0  0
##          5  0  0  0  0 64  0  0
##          6  0  2  0  0  0 55  1
##          7  0  0  1  0  0  0 57
## 
## Overall Statistics
##                                           
##                Accuracy : 0.9619          
##                  95% CI : (0.9389, 0.9781)
##     No Information Rate : 0.1619          
##     P-Value [Acc > NIR] : < 2.2e-16       
##                                           
##                   Kappa : 0.9555          
##                                           
##  Mcnemar's Test P-Value : NA              
## 
## Statistics by Class:
## 
##                      Class: 1 Class: 2 Class: 3 Class: 4 Class: 5
## Sensitivity            0.9434   0.8966   0.9853   1.0000   1.0000
## Specificity            0.9891   0.9862   0.9915   1.0000   1.0000
## Pos Pred Value         0.9259   0.9123   0.9571   1.0000   1.0000
## Neg Pred Value         0.9918   0.9835   0.9971   1.0000   1.0000
## Prevalence             0.1262   0.1381   0.1619   0.1405   0.1524
## Detection Rate         0.1190   0.1238   0.1595   0.1405   0.1524
## Detection Prevalence   0.1286   0.1357   0.1667   0.1405   0.1524
## Balanced Accuracy      0.9662   0.9414   0.9884   1.0000   1.0000
##                      Class: 6 Class: 7
## Sensitivity            0.9649   0.9344
## Specificity            0.9917   0.9972
## Pos Pred Value         0.9483   0.9828
## Neg Pred Value         0.9945   0.9890
## Prevalence             0.1357   0.1452
## Detection Rate         0.1310   0.1357
## Detection Prevalence   0.1381   0.1381
## Balanced Accuracy      0.9783   0.9658

4.2 Klasifikasi Biner

Note: Agar lebih praktis, pada bagian ini akan kita gunakan dataset yang sama, namun targetnya adalah (Overweight vs Tidak Overweight)

data.biner <- data.frame(dt4)

str(data.biner)
## 'data.frame':    2111 obs. of  17 variables:
##  $ Gender                        : num [1:2111, 1:2] 1 1 0 0 0 0 1 0 0 0 ...
##  $ Age                           : num  21 21 23 27 22 29 23 22 24 22 ...
##  $ Height                        : num  1.62 1.52 1.8 1.8 1.78 1.62 1.5 1.64 1.78 1.72 ...
##  $ Weight                        : num  64 56 77 87 89.8 53 55 53 64 68 ...
##  $ family_history_with_overweight: num [1:2111, 1:2] 0 0 0 1 1 1 0 1 0 0 ...
##  $ FAVC                          : num [1:2111, 1:2] 1 1 1 1 1 0 0 1 0 0 ...
##  $ FCVC                          : num  2 3 2 3 2 2 3 2 3 2 ...
##  $ NCP                           : num  3 3 3 3 1 3 3 3 3 3 ...
##  $ CAEC                          : num [1:2111, 1:4] 0 0 0 0 0 0 0 0 0 0 ...
##  $ SMOKE                         : num [1:2111, 1:2] 1 0 1 1 1 1 1 1 1 1 ...
##  $ CH2O                          : num  2 3 2 2 2 2 2 2 2 2 ...
##  $ SCC                           : num [1:2111, 1:2] 1 0 1 1 1 1 1 1 1 1 ...
##  $ FAF                           : num  0 3 2 2 0 0 1 3 1 1 ...
##  $ TUE                           : num  1 0 1 0 0 0 0 0 1 1 ...
##  $ CALC                          : num [1:2111, 1:4] 0 0 0 0 0 0 0 0 0 0 ...
##  $ MTRANS                        : num [1:2111, 1:5] 0 0 0 0 0 1 0 0 0 0 ...
##  $ NObeyesdad                    : Factor w/ 7 levels "Insufficient_Weight",..: 2 2 2 6 7 2 2 2 2 2 ...
to.binary <- function(level){
  is.overweight <- grepl("Overweight|Obesity", level)
  as.integer(is.overweight)
}

# Mengubah 4 kelas menjadi 2 kelas (0: Tidak Overweight, 1: Overweight)
data.biner$NObeyesdad <- sapply(data.biner$NObeyesdad, to.binary)

str(data.biner)
## 'data.frame':    2111 obs. of  17 variables:
##  $ Gender                        : num [1:2111, 1:2] 1 1 0 0 0 0 1 0 0 0 ...
##  $ Age                           : num  21 21 23 27 22 29 23 22 24 22 ...
##  $ Height                        : num  1.62 1.52 1.8 1.8 1.78 1.62 1.5 1.64 1.78 1.72 ...
##  $ Weight                        : num  64 56 77 87 89.8 53 55 53 64 68 ...
##  $ family_history_with_overweight: num [1:2111, 1:2] 0 0 0 1 1 1 0 1 0 0 ...
##  $ FAVC                          : num [1:2111, 1:2] 1 1 1 1 1 0 0 1 0 0 ...
##  $ FCVC                          : num  2 3 2 3 2 2 3 2 3 2 ...
##  $ NCP                           : num  3 3 3 3 1 3 3 3 3 3 ...
##  $ CAEC                          : num [1:2111, 1:4] 0 0 0 0 0 0 0 0 0 0 ...
##  $ SMOKE                         : num [1:2111, 1:2] 1 0 1 1 1 1 1 1 1 1 ...
##  $ CH2O                          : num  2 3 2 2 2 2 2 2 2 2 ...
##  $ SCC                           : num [1:2111, 1:2] 1 0 1 1 1 1 1 1 1 1 ...
##  $ FAF                           : num  0 3 2 2 0 0 1 3 1 1 ...
##  $ TUE                           : num  1 0 1 0 0 0 0 0 1 1 ...
##  $ CALC                          : num [1:2111, 1:4] 0 0 0 0 0 0 0 0 0 0 ...
##  $ MTRANS                        : num [1:2111, 1:5] 0 0 0 0 0 1 0 0 0 0 ...
##  $ NObeyesdad                    : int  0 0 0 1 1 0 0 0 0 0 ...
table(data.biner$NObeyesdad)
## 
##    0    1 
##  559 1552
# Membagi data menjadi data latih dan data uji
set.seed(111)
train.index <- createDataPartition(data.biner$NObeyesdad, p = 0.7, list = FALSE)
train <- data.biner[train.index, ]
test <- data.biner[-train.index, ]

# Features Scaling MinMax (0, 1)
preprocessParams <- preProcess(train[, -17], method=c("range"))
train_X <- as.matrix(predict(preprocessParams, train[, -17]))
test_X <- as.matrix(predict(preprocessParams, test[, -17]))

# Peubah target sudah dalam bentuk 0 dan 1 
# (tidak perlu one-hot encoding)
train_y = train[, 17]
test_y = test[, 17]

head(train_y)
## [1] 0 1 1 0 0 0

4.2.1 Model 1 (2 hidden layer + dropout + callback)

# Binary Model dengan 2 hidden layers + dropout + checkpoint + earlyStopping

model.bin <- keras_model_sequential() %>%
           layer_dense(units = 120, activation = "relu", input_shape = ncol(train_X)) %>%
           layer_dropout(0.2) %>%
           layer_dense(units = 120, activation = "relu") %>%
           layer_dropout(0.1) %>%
           layer_dense(units = 1, activation = "sigmoid")   # units = 1 dan fungsi aktivasi = sigmoid


# menentukan nama dan path file untuk penyimpanan model
filepath <- "model_bin_check.keras"

# mengatur kriteria checkpoint
# simpan model jika memperoleh skor terbaik
checkpoint <- callback_model_checkpoint(
    filepath=filepath,
    monitor="val_accuracy",
    save_best_only=TRUE,
    mode="max",
    verbose=1,
)

# mengatur kondisi untuk early stopping
early_stopping <- callback_early_stopping(
    monitor="val_accuracy",
    patience=30,
    verbose=1,
)

# kompilasi model
model.bin %>% compile(
  loss = "binary_crossentropy",    # loss : binary_cross_entropy
  optimizer = "adam",
  metrics = c("accuracy")
)

# melatih model
history <- model.bin %>% fit(
  train_X, train_y,
  shuffle = T,
  epochs = 200,
  batch_size = 64,
  # validation_split = 0.2, # atau
  validation_data = list(test_X, test_y),
  callbacks=list(checkpoint, early_stopping),
)
## Epoch 1/200
## 
## Epoch 1: val_accuracy improved from -inf to 0.78831, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 3s - loss: 0.5460 - accuracy: 0.6955 - val_loss: 0.4164 - val_accuracy: 0.7883 - 3s/epoch - 120ms/step
## Epoch 2/200
## 
## Epoch 2: val_accuracy improved from 0.78831 to 0.85940, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.3948 - accuracy: 0.8268 - val_loss: 0.3242 - val_accuracy: 0.8594 - 1s/epoch - 42ms/step
## Epoch 3/200
## 
## Epoch 3: val_accuracy improved from 0.85940 to 0.87046, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.3294 - accuracy: 0.8586 - val_loss: 0.2812 - val_accuracy: 0.8705 - 838ms/epoch - 35ms/step
## Epoch 4/200
## 
## Epoch 4: val_accuracy improved from 0.87046 to 0.89889, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.2823 - accuracy: 0.8802 - val_loss: 0.2606 - val_accuracy: 0.8989 - 851ms/epoch - 35ms/step
## Epoch 5/200
## 
## Epoch 5: val_accuracy improved from 0.89889 to 0.91153, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.2680 - accuracy: 0.8951 - val_loss: 0.2360 - val_accuracy: 0.9115 - 861ms/epoch - 36ms/step
## Epoch 6/200
## 
## Epoch 6: val_accuracy improved from 0.91153 to 0.92259, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.2374 - accuracy: 0.9100 - val_loss: 0.2190 - val_accuracy: 0.9226 - 841ms/epoch - 35ms/step
## Epoch 7/200
## 
## Epoch 7: val_accuracy did not improve from 0.92259
## 24/24 - 1s - loss: 0.2079 - accuracy: 0.9147 - val_loss: 0.2127 - val_accuracy: 0.9210 - 809ms/epoch - 34ms/step
## Epoch 8/200
## 
## Epoch 8: val_accuracy improved from 0.92259 to 0.92575, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1963 - accuracy: 0.9276 - val_loss: 0.2061 - val_accuracy: 0.9258 - 822ms/epoch - 34ms/step
## Epoch 9/200
## 
## Epoch 9: val_accuracy did not improve from 0.92575
## 24/24 - 1s - loss: 0.1883 - accuracy: 0.9276 - val_loss: 0.2074 - val_accuracy: 0.9258 - 833ms/epoch - 35ms/step
## Epoch 10/200
## 
## Epoch 10: val_accuracy improved from 0.92575 to 0.93997, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1727 - accuracy: 0.9364 - val_loss: 0.1749 - val_accuracy: 0.9400 - 838ms/epoch - 35ms/step
## Epoch 11/200
## 
## Epoch 11: val_accuracy improved from 0.93997 to 0.94629, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1557 - accuracy: 0.9459 - val_loss: 0.1598 - val_accuracy: 0.9463 - 809ms/epoch - 34ms/step
## Epoch 12/200
## 
## Epoch 12: val_accuracy improved from 0.94629 to 0.95103, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1475 - accuracy: 0.9459 - val_loss: 0.1433 - val_accuracy: 0.9510 - 839ms/epoch - 35ms/step
## Epoch 13/200
## 
## Epoch 13: val_accuracy did not improve from 0.95103
## 24/24 - 1s - loss: 0.1301 - accuracy: 0.9540 - val_loss: 0.1521 - val_accuracy: 0.9415 - 784ms/epoch - 33ms/step
## Epoch 14/200
## 
## Epoch 14: val_accuracy did not improve from 0.95103
## 24/24 - 1s - loss: 0.1300 - accuracy: 0.9533 - val_loss: 0.1517 - val_accuracy: 0.9415 - 747ms/epoch - 31ms/step
## Epoch 15/200
## 
## Epoch 15: val_accuracy did not improve from 0.95103
## 24/24 - 1s - loss: 0.1159 - accuracy: 0.9526 - val_loss: 0.1329 - val_accuracy: 0.9494 - 795ms/epoch - 33ms/step
## Epoch 16/200
## 
## Epoch 16: val_accuracy improved from 0.95103 to 0.95261, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1157 - accuracy: 0.9601 - val_loss: 0.1315 - val_accuracy: 0.9526 - 812ms/epoch - 34ms/step
## Epoch 17/200
## 
## Epoch 17: val_accuracy improved from 0.95261 to 0.95577, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1058 - accuracy: 0.9648 - val_loss: 0.1228 - val_accuracy: 0.9558 - 820ms/epoch - 34ms/step
## Epoch 18/200
## 
## Epoch 18: val_accuracy did not improve from 0.95577
## 24/24 - 1s - loss: 0.1154 - accuracy: 0.9560 - val_loss: 0.1470 - val_accuracy: 0.9400 - 765ms/epoch - 32ms/step
## Epoch 19/200
## 
## Epoch 19: val_accuracy improved from 0.95577 to 0.96051, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.1012 - accuracy: 0.9648 - val_loss: 0.1154 - val_accuracy: 0.9605 - 824ms/epoch - 34ms/step
## Epoch 20/200
## 
## Epoch 20: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0887 - accuracy: 0.9655 - val_loss: 0.1170 - val_accuracy: 0.9605 - 777ms/epoch - 32ms/step
## Epoch 21/200
## 
## Epoch 21: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.1009 - accuracy: 0.9601 - val_loss: 0.1186 - val_accuracy: 0.9558 - 775ms/epoch - 32ms/step
## Epoch 22/200
## 
## Epoch 22: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0863 - accuracy: 0.9696 - val_loss: 0.1146 - val_accuracy: 0.9589 - 824ms/epoch - 34ms/step
## Epoch 23/200
## 
## Epoch 23: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0861 - accuracy: 0.9709 - val_loss: 0.1100 - val_accuracy: 0.9605 - 766ms/epoch - 32ms/step
## Epoch 24/200
## 
## Epoch 24: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0869 - accuracy: 0.9689 - val_loss: 0.1123 - val_accuracy: 0.9558 - 772ms/epoch - 32ms/step
## Epoch 25/200
## 
## Epoch 25: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0735 - accuracy: 0.9729 - val_loss: 0.1037 - val_accuracy: 0.9558 - 792ms/epoch - 33ms/step
## Epoch 26/200
## 
## Epoch 26: val_accuracy did not improve from 0.96051
## 24/24 - 1s - loss: 0.0642 - accuracy: 0.9763 - val_loss: 0.1134 - val_accuracy: 0.9605 - 761ms/epoch - 32ms/step
## Epoch 27/200
## 
## Epoch 27: val_accuracy improved from 0.96051 to 0.96682, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0756 - accuracy: 0.9702 - val_loss: 0.0936 - val_accuracy: 0.9668 - 856ms/epoch - 36ms/step
## Epoch 28/200
## 
## Epoch 28: val_accuracy did not improve from 0.96682
## 24/24 - 1s - loss: 0.0656 - accuracy: 0.9777 - val_loss: 0.0973 - val_accuracy: 0.9637 - 843ms/epoch - 35ms/step
## Epoch 29/200
## 
## Epoch 29: val_accuracy did not improve from 0.96682
## 24/24 - 1s - loss: 0.0581 - accuracy: 0.9790 - val_loss: 0.1066 - val_accuracy: 0.9589 - 760ms/epoch - 32ms/step
## Epoch 30/200
## 
## Epoch 30: val_accuracy did not improve from 0.96682
## 24/24 - 1s - loss: 0.0618 - accuracy: 0.9817 - val_loss: 0.1210 - val_accuracy: 0.9542 - 775ms/epoch - 32ms/step
## Epoch 31/200
## 
## Epoch 31: val_accuracy did not improve from 0.96682
## 24/24 - 1s - loss: 0.0697 - accuracy: 0.9736 - val_loss: 0.0952 - val_accuracy: 0.9668 - 763ms/epoch - 32ms/step
## Epoch 32/200
## 
## Epoch 32: val_accuracy improved from 0.96682 to 0.96998, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0536 - accuracy: 0.9838 - val_loss: 0.0877 - val_accuracy: 0.9700 - 824ms/epoch - 34ms/step
## Epoch 33/200
## 
## Epoch 33: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0572 - accuracy: 0.9783 - val_loss: 0.0919 - val_accuracy: 0.9668 - 792ms/epoch - 33ms/step
## Epoch 34/200
## 
## Epoch 34: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0506 - accuracy: 0.9817 - val_loss: 0.0887 - val_accuracy: 0.9621 - 790ms/epoch - 33ms/step
## Epoch 35/200
## 
## Epoch 35: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0600 - accuracy: 0.9770 - val_loss: 0.0974 - val_accuracy: 0.9668 - 809ms/epoch - 34ms/step
## Epoch 36/200
## 
## Epoch 36: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0485 - accuracy: 0.9797 - val_loss: 0.0901 - val_accuracy: 0.9700 - 751ms/epoch - 31ms/step
## Epoch 37/200
## 
## Epoch 37: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0465 - accuracy: 0.9804 - val_loss: 0.0895 - val_accuracy: 0.9652 - 764ms/epoch - 32ms/step
## Epoch 38/200
## 
## Epoch 38: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0475 - accuracy: 0.9844 - val_loss: 0.0840 - val_accuracy: 0.9700 - 784ms/epoch - 33ms/step
## Epoch 39/200
## 
## Epoch 39: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0389 - accuracy: 0.9858 - val_loss: 0.0872 - val_accuracy: 0.9700 - 840ms/epoch - 35ms/step
## Epoch 40/200
## 
## Epoch 40: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0415 - accuracy: 0.9844 - val_loss: 0.0876 - val_accuracy: 0.9700 - 790ms/epoch - 33ms/step
## Epoch 41/200
## 
## Epoch 41: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0405 - accuracy: 0.9831 - val_loss: 0.0890 - val_accuracy: 0.9652 - 779ms/epoch - 32ms/step
## Epoch 42/200
## 
## Epoch 42: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0490 - accuracy: 0.9824 - val_loss: 0.0837 - val_accuracy: 0.9684 - 795ms/epoch - 33ms/step
## Epoch 43/200
## 
## Epoch 43: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0434 - accuracy: 0.9824 - val_loss: 0.0887 - val_accuracy: 0.9684 - 813ms/epoch - 34ms/step
## Epoch 44/200
## 
## Epoch 44: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0359 - accuracy: 0.9885 - val_loss: 0.0917 - val_accuracy: 0.9637 - 829ms/epoch - 35ms/step
## Epoch 45/200
## 
## Epoch 45: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0333 - accuracy: 0.9878 - val_loss: 0.1095 - val_accuracy: 0.9558 - 837ms/epoch - 35ms/step
## Epoch 46/200
## 
## Epoch 46: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0350 - accuracy: 0.9858 - val_loss: 0.0862 - val_accuracy: 0.9668 - 760ms/epoch - 32ms/step
## Epoch 47/200
## 
## Epoch 47: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0354 - accuracy: 0.9871 - val_loss: 0.0851 - val_accuracy: 0.9700 - 824ms/epoch - 34ms/step
## Epoch 48/200
## 
## Epoch 48: val_accuracy did not improve from 0.96998
## 24/24 - 1s - loss: 0.0346 - accuracy: 0.9892 - val_loss: 0.0895 - val_accuracy: 0.9684 - 820ms/epoch - 34ms/step
## Epoch 49/200
## 
## Epoch 49: val_accuracy improved from 0.96998 to 0.97156, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0400 - accuracy: 0.9865 - val_loss: 0.0897 - val_accuracy: 0.9716 - 896ms/epoch - 37ms/step
## Epoch 50/200
## 
## Epoch 50: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0393 - accuracy: 0.9831 - val_loss: 0.0880 - val_accuracy: 0.9684 - 801ms/epoch - 33ms/step
## Epoch 51/200
## 
## Epoch 51: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0403 - accuracy: 0.9838 - val_loss: 0.0816 - val_accuracy: 0.9716 - 769ms/epoch - 32ms/step
## Epoch 52/200
## 
## Epoch 52: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0319 - accuracy: 0.9885 - val_loss: 0.1077 - val_accuracy: 0.9526 - 794ms/epoch - 33ms/step
## Epoch 53/200
## 
## Epoch 53: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0280 - accuracy: 0.9912 - val_loss: 0.0888 - val_accuracy: 0.9684 - 763ms/epoch - 32ms/step
## Epoch 54/200
## 
## Epoch 54: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0280 - accuracy: 0.9905 - val_loss: 0.0863 - val_accuracy: 0.9684 - 761ms/epoch - 32ms/step
## Epoch 55/200
## 
## Epoch 55: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0270 - accuracy: 0.9885 - val_loss: 0.0867 - val_accuracy: 0.9652 - 776ms/epoch - 32ms/step
## Epoch 56/200
## 
## Epoch 56: val_accuracy did not improve from 0.97156
## 24/24 - 1s - loss: 0.0258 - accuracy: 0.9912 - val_loss: 0.0846 - val_accuracy: 0.9700 - 767ms/epoch - 32ms/step
## Epoch 57/200
## 
## Epoch 57: val_accuracy improved from 0.97156 to 0.97472, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0244 - accuracy: 0.9912 - val_loss: 0.0772 - val_accuracy: 0.9747 - 809ms/epoch - 34ms/step
## Epoch 58/200
## 
## Epoch 58: val_accuracy did not improve from 0.97472
## 24/24 - 1s - loss: 0.0341 - accuracy: 0.9838 - val_loss: 0.0814 - val_accuracy: 0.9731 - 762ms/epoch - 32ms/step
## Epoch 59/200
## 
## Epoch 59: val_accuracy did not improve from 0.97472
## 24/24 - 1s - loss: 0.0224 - accuracy: 0.9926 - val_loss: 0.0888 - val_accuracy: 0.9668 - 757ms/epoch - 32ms/step
## Epoch 60/200
## 
## Epoch 60: val_accuracy did not improve from 0.97472
## 24/24 - 1s - loss: 0.0201 - accuracy: 0.9912 - val_loss: 0.0887 - val_accuracy: 0.9668 - 793ms/epoch - 33ms/step
## Epoch 61/200
## 
## Epoch 61: val_accuracy did not improve from 0.97472
## 24/24 - 1s - loss: 0.0199 - accuracy: 0.9953 - val_loss: 0.0916 - val_accuracy: 0.9716 - 777ms/epoch - 32ms/step
## Epoch 62/200
## 
## Epoch 62: val_accuracy did not improve from 0.97472
## 24/24 - 1s - loss: 0.0262 - accuracy: 0.9912 - val_loss: 0.0877 - val_accuracy: 0.9700 - 760ms/epoch - 32ms/step
## Epoch 63/200
## 
## Epoch 63: val_accuracy improved from 0.97472 to 0.97630, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0265 - accuracy: 0.9912 - val_loss: 0.0852 - val_accuracy: 0.9763 - 848ms/epoch - 35ms/step
## Epoch 64/200
## 
## Epoch 64: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0203 - accuracy: 0.9959 - val_loss: 0.0866 - val_accuracy: 0.9747 - 760ms/epoch - 32ms/step
## Epoch 65/200
## 
## Epoch 65: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0260 - accuracy: 0.9905 - val_loss: 0.1003 - val_accuracy: 0.9652 - 762ms/epoch - 32ms/step
## Epoch 66/200
## 
## Epoch 66: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0182 - accuracy: 0.9939 - val_loss: 0.1044 - val_accuracy: 0.9573 - 792ms/epoch - 33ms/step
## Epoch 67/200
## 
## Epoch 67: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0279 - accuracy: 0.9892 - val_loss: 0.0843 - val_accuracy: 0.9747 - 780ms/epoch - 32ms/step
## Epoch 68/200
## 
## Epoch 68: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0165 - accuracy: 0.9973 - val_loss: 0.0797 - val_accuracy: 0.9700 - 801ms/epoch - 33ms/step
## Epoch 69/200
## 
## Epoch 69: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0151 - accuracy: 0.9953 - val_loss: 0.0804 - val_accuracy: 0.9747 - 760ms/epoch - 32ms/step
## Epoch 70/200
## 
## Epoch 70: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0142 - accuracy: 0.9966 - val_loss: 0.0950 - val_accuracy: 0.9668 - 887ms/epoch - 37ms/step
## Epoch 71/200
## 
## Epoch 71: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0244 - accuracy: 0.9905 - val_loss: 0.0764 - val_accuracy: 0.9763 - 768ms/epoch - 32ms/step
## Epoch 72/200
## 
## Epoch 72: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0191 - accuracy: 0.9926 - val_loss: 0.0801 - val_accuracy: 0.9716 - 783ms/epoch - 33ms/step
## Epoch 73/200
## 
## Epoch 73: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0180 - accuracy: 0.9939 - val_loss: 0.0786 - val_accuracy: 0.9716 - 837ms/epoch - 35ms/step
## Epoch 74/200
## 
## Epoch 74: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0151 - accuracy: 0.9953 - val_loss: 0.0781 - val_accuracy: 0.9747 - 809ms/epoch - 34ms/step
## Epoch 75/200
## 
## Epoch 75: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0151 - accuracy: 0.9959 - val_loss: 0.0830 - val_accuracy: 0.9731 - 1s/epoch - 50ms/step
## Epoch 76/200
## 
## Epoch 76: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0166 - accuracy: 0.9932 - val_loss: 0.0874 - val_accuracy: 0.9731 - 777ms/epoch - 32ms/step
## Epoch 77/200
## 
## Epoch 77: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0101 - accuracy: 0.9986 - val_loss: 0.0863 - val_accuracy: 0.9731 - 775ms/epoch - 32ms/step
## Epoch 78/200
## 
## Epoch 78: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0141 - accuracy: 0.9973 - val_loss: 0.0860 - val_accuracy: 0.9700 - 773ms/epoch - 32ms/step
## Epoch 79/200
## 
## Epoch 79: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0161 - accuracy: 0.9946 - val_loss: 0.0814 - val_accuracy: 0.9731 - 776ms/epoch - 32ms/step
## Epoch 80/200
## 
## Epoch 80: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0155 - accuracy: 0.9946 - val_loss: 0.0775 - val_accuracy: 0.9747 - 761ms/epoch - 32ms/step
## Epoch 81/200
## 
## Epoch 81: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0147 - accuracy: 0.9939 - val_loss: 0.1026 - val_accuracy: 0.9684 - 776ms/epoch - 32ms/step
## Epoch 82/200
## 
## Epoch 82: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0149 - accuracy: 0.9939 - val_loss: 0.0883 - val_accuracy: 0.9700 - 761ms/epoch - 32ms/step
## Epoch 83/200
## 
## Epoch 83: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0119 - accuracy: 0.9959 - val_loss: 0.0777 - val_accuracy: 0.9747 - 793ms/epoch - 33ms/step
## Epoch 84/200
## 
## Epoch 84: val_accuracy did not improve from 0.97630
## 24/24 - 1s - loss: 0.0102 - accuracy: 0.9973 - val_loss: 0.0724 - val_accuracy: 0.9763 - 796ms/epoch - 33ms/step
## Epoch 85/200
## 
## Epoch 85: val_accuracy improved from 0.97630 to 0.97788, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0142 - accuracy: 0.9946 - val_loss: 0.0747 - val_accuracy: 0.9779 - 867ms/epoch - 36ms/step
## Epoch 86/200
## 
## Epoch 86: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0136 - accuracy: 0.9966 - val_loss: 0.0793 - val_accuracy: 0.9763 - 791ms/epoch - 33ms/step
## Epoch 87/200
## 
## Epoch 87: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0105 - accuracy: 0.9946 - val_loss: 0.0849 - val_accuracy: 0.9747 - 790ms/epoch - 33ms/step
## Epoch 88/200
## 
## Epoch 88: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0097 - accuracy: 0.9973 - val_loss: 0.0810 - val_accuracy: 0.9763 - 772ms/epoch - 32ms/step
## Epoch 89/200
## 
## Epoch 89: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0132 - accuracy: 0.9953 - val_loss: 0.0782 - val_accuracy: 0.9731 - 757ms/epoch - 32ms/step
## Epoch 90/200
## 
## Epoch 90: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0153 - accuracy: 0.9926 - val_loss: 0.0868 - val_accuracy: 0.9700 - 772ms/epoch - 32ms/step
## Epoch 91/200
## 
## Epoch 91: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0219 - accuracy: 0.9912 - val_loss: 0.1658 - val_accuracy: 0.9573 - 761ms/epoch - 32ms/step
## Epoch 92/200
## 
## Epoch 92: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0220 - accuracy: 0.9912 - val_loss: 0.0882 - val_accuracy: 0.9763 - 780ms/epoch - 33ms/step
## Epoch 93/200
## 
## Epoch 93: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0145 - accuracy: 0.9946 - val_loss: 0.0846 - val_accuracy: 0.9763 - 762ms/epoch - 32ms/step
## Epoch 94/200
## 
## Epoch 94: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0104 - accuracy: 0.9980 - val_loss: 0.0868 - val_accuracy: 0.9747 - 791ms/epoch - 33ms/step
## Epoch 95/200
## 
## Epoch 95: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0209 - accuracy: 0.9926 - val_loss: 0.1007 - val_accuracy: 0.9684 - 794ms/epoch - 33ms/step
## Epoch 96/200
## 
## Epoch 96: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0146 - accuracy: 0.9926 - val_loss: 0.0902 - val_accuracy: 0.9684 - 761ms/epoch - 32ms/step
## Epoch 97/200
## 
## Epoch 97: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0169 - accuracy: 0.9932 - val_loss: 0.0951 - val_accuracy: 0.9700 - 762ms/epoch - 32ms/step
## Epoch 98/200
## 
## Epoch 98: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0088 - accuracy: 0.9973 - val_loss: 0.0845 - val_accuracy: 0.9700 - 804ms/epoch - 33ms/step
## Epoch 99/200
## 
## Epoch 99: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0069 - accuracy: 0.9980 - val_loss: 0.0719 - val_accuracy: 0.9716 - 820ms/epoch - 34ms/step
## Epoch 100/200
## 
## Epoch 100: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0105 - accuracy: 0.9953 - val_loss: 0.0822 - val_accuracy: 0.9716 - 779ms/epoch - 32ms/step
## Epoch 101/200
## 
## Epoch 101: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0099 - accuracy: 0.9973 - val_loss: 0.0798 - val_accuracy: 0.9700 - 757ms/epoch - 32ms/step
## Epoch 102/200
## 
## Epoch 102: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0071 - accuracy: 0.9980 - val_loss: 0.0830 - val_accuracy: 0.9684 - 773ms/epoch - 32ms/step
## Epoch 103/200
## 
## Epoch 103: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0076 - accuracy: 0.9980 - val_loss: 0.0889 - val_accuracy: 0.9747 - 824ms/epoch - 34ms/step
## Epoch 104/200
## 
## Epoch 104: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0045 - accuracy: 0.9993 - val_loss: 0.0821 - val_accuracy: 0.9716 - 801ms/epoch - 33ms/step
## Epoch 105/200
## 
## Epoch 105: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0038 - accuracy: 0.9993 - val_loss: 0.0794 - val_accuracy: 0.9747 - 834ms/epoch - 35ms/step
## Epoch 106/200
## 
## Epoch 106: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0056 - accuracy: 0.9980 - val_loss: 0.0819 - val_accuracy: 0.9716 - 810ms/epoch - 34ms/step
## Epoch 107/200
## 
## Epoch 107: val_accuracy did not improve from 0.97788
## 24/24 - 1s - loss: 0.0082 - accuracy: 0.9973 - val_loss: 0.0836 - val_accuracy: 0.9716 - 836ms/epoch - 35ms/step
## Epoch 108/200
## 
## Epoch 108: val_accuracy improved from 0.97788 to 0.97946, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_bin_check.keras
## 24/24 - 1s - loss: 0.0055 - accuracy: 0.9980 - val_loss: 0.0750 - val_accuracy: 0.9795 - 824ms/epoch - 34ms/step
## Epoch 109/200
## 
## Epoch 109: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0077 - accuracy: 0.9980 - val_loss: 0.0800 - val_accuracy: 0.9684 - 824ms/epoch - 34ms/step
## Epoch 110/200
## 
## Epoch 110: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0070 - accuracy: 0.9980 - val_loss: 0.0828 - val_accuracy: 0.9763 - 836ms/epoch - 35ms/step
## Epoch 111/200
## 
## Epoch 111: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0109 - accuracy: 0.9973 - val_loss: 0.0819 - val_accuracy: 0.9684 - 898ms/epoch - 37ms/step
## Epoch 112/200
## 
## Epoch 112: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0157 - accuracy: 0.9939 - val_loss: 0.0832 - val_accuracy: 0.9763 - 852ms/epoch - 35ms/step
## Epoch 113/200
## 
## Epoch 113: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0090 - accuracy: 0.9973 - val_loss: 0.0818 - val_accuracy: 0.9731 - 856ms/epoch - 36ms/step
## Epoch 114/200
## 
## Epoch 114: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0049 - accuracy: 0.9986 - val_loss: 0.0828 - val_accuracy: 0.9716 - 780ms/epoch - 32ms/step
## Epoch 115/200
## 
## Epoch 115: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0057 - accuracy: 0.9986 - val_loss: 0.0795 - val_accuracy: 0.9700 - 787ms/epoch - 33ms/step
## Epoch 116/200
## 
## Epoch 116: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0068 - accuracy: 0.9986 - val_loss: 0.1094 - val_accuracy: 0.9716 - 802ms/epoch - 33ms/step
## Epoch 117/200
## 
## Epoch 117: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0090 - accuracy: 0.9973 - val_loss: 0.0829 - val_accuracy: 0.9747 - 746ms/epoch - 31ms/step
## Epoch 118/200
## 
## Epoch 118: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0171 - accuracy: 0.9939 - val_loss: 0.1019 - val_accuracy: 0.9684 - 778ms/epoch - 32ms/step
## Epoch 119/200
## 
## Epoch 119: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0233 - accuracy: 0.9919 - val_loss: 0.1205 - val_accuracy: 0.9668 - 781ms/epoch - 33ms/step
## Epoch 120/200
## 
## Epoch 120: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0248 - accuracy: 0.9899 - val_loss: 0.0773 - val_accuracy: 0.9684 - 773ms/epoch - 32ms/step
## Epoch 121/200
## 
## Epoch 121: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0129 - accuracy: 0.9953 - val_loss: 0.0789 - val_accuracy: 0.9731 - 793ms/epoch - 33ms/step
## Epoch 122/200
## 
## Epoch 122: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0088 - accuracy: 0.9966 - val_loss: 0.0924 - val_accuracy: 0.9731 - 776ms/epoch - 32ms/step
## Epoch 123/200
## 
## Epoch 123: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0062 - accuracy: 0.9980 - val_loss: 0.0910 - val_accuracy: 0.9700 - 792ms/epoch - 33ms/step
## Epoch 124/200
## 
## Epoch 124: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0103 - accuracy: 0.9973 - val_loss: 0.0817 - val_accuracy: 0.9716 - 794ms/epoch - 33ms/step
## Epoch 125/200
## 
## Epoch 125: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0127 - accuracy: 0.9966 - val_loss: 0.0797 - val_accuracy: 0.9716 - 777ms/epoch - 32ms/step
## Epoch 126/200
## 
## Epoch 126: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0102 - accuracy: 0.9959 - val_loss: 0.0772 - val_accuracy: 0.9716 - 758ms/epoch - 32ms/step
## Epoch 127/200
## 
## Epoch 127: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0212 - accuracy: 0.9919 - val_loss: 0.0726 - val_accuracy: 0.9747 - 808ms/epoch - 34ms/step
## Epoch 128/200
## 
## Epoch 128: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0124 - accuracy: 0.9953 - val_loss: 0.0804 - val_accuracy: 0.9684 - 762ms/epoch - 32ms/step
## Epoch 129/200
## 
## Epoch 129: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0088 - accuracy: 0.9966 - val_loss: 0.0867 - val_accuracy: 0.9684 - 761ms/epoch - 32ms/step
## Epoch 130/200
## 
## Epoch 130: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0100 - accuracy: 0.9973 - val_loss: 0.1032 - val_accuracy: 0.9716 - 791ms/epoch - 33ms/step
## Epoch 131/200
## 
## Epoch 131: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0079 - accuracy: 0.9980 - val_loss: 0.0900 - val_accuracy: 0.9684 - 778ms/epoch - 32ms/step
## Epoch 132/200
## 
## Epoch 132: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0067 - accuracy: 0.9973 - val_loss: 0.0755 - val_accuracy: 0.9747 - 775ms/epoch - 32ms/step
## Epoch 133/200
## 
## Epoch 133: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0047 - accuracy: 0.9993 - val_loss: 0.0742 - val_accuracy: 0.9779 - 777ms/epoch - 32ms/step
## Epoch 134/200
## 
## Epoch 134: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0046 - accuracy: 1.0000 - val_loss: 0.0735 - val_accuracy: 0.9747 - 777ms/epoch - 32ms/step
## Epoch 135/200
## 
## Epoch 135: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0031 - accuracy: 0.9993 - val_loss: 0.0918 - val_accuracy: 0.9684 - 779ms/epoch - 32ms/step
## Epoch 136/200
## 
## Epoch 136: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0032 - accuracy: 0.9980 - val_loss: 0.0797 - val_accuracy: 0.9716 - 765ms/epoch - 32ms/step
## Epoch 137/200
## 
## Epoch 137: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0060 - accuracy: 0.9993 - val_loss: 0.0731 - val_accuracy: 0.9731 - 790ms/epoch - 33ms/step
## Epoch 138/200
## 
## Epoch 138: val_accuracy did not improve from 0.97946
## 24/24 - 1s - loss: 0.0080 - accuracy: 0.9973 - val_loss: 0.0742 - val_accuracy: 0.9747 - 758ms/epoch - 32ms/step
## Epoch 138: early stopping
summary(model.bin)
## Model: "sequential_3"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_10 (Dense)             (None, 120)                3840       
##  dropout_5 (Dropout)          (None, 120)                0          
##  dense_9 (Dense)              (None, 120)                14520      
##  dropout_4 (Dropout)          (None, 120)                0          
##  dense_8 (Dense)              (None, 1)                  121        
## ====================================================================
## Total params: 18481 (72.19 KB)
## Trainable params: 18481 (72.19 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________
plot(history)

# evaluasi model
scores <- model.bin %>% evaluate(test_X, test_y)
## 20/20 - 0s - loss: 0.0742 - accuracy: 0.9747 - 88ms/epoch - 4ms/step
print(scores)
##       loss   accuracy 
## 0.07421406 0.97472352

4.2.1.1 Prediksi Data Uji

# memuat model yang disimpan hasil checkpoint
model.bin.check <- load_model_tf("model_bin_check.keras")

# prediksi
pred.bin <- predict(model.bin.check, test_X)
## 20/20 - 0s - 123ms/epoch - 6ms/step
# karena hasilnya berupa nilai 0-1, dengan cut-off 0.5 kita bisa menggunakan fungsi round saja
label_pred <- round(pred.bin)     

confusionMatrix(as.factor(test_y), as.factor(label_pred))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0 154   7
##          1   6 466
##                                          
##                Accuracy : 0.9795         
##                  95% CI : (0.9651, 0.989)
##     No Information Rate : 0.7472         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.9457         
##                                          
##  Mcnemar's Test P-Value : 1              
##                                          
##             Sensitivity : 0.9625         
##             Specificity : 0.9852         
##          Pos Pred Value : 0.9565         
##          Neg Pred Value : 0.9873         
##              Prevalence : 0.2528         
##          Detection Rate : 0.2433         
##    Detection Prevalence : 0.2543         
##       Balanced Accuracy : 0.9739         
##                                          
##        'Positive' Class : 0              
## 

4.3 Model Regresi

data.ab <-  read.csv("https://raw.githubusercontent.com/Zen-Rofiqy/STA1382-TPM/main/Materi/Prak%2004/abalone.csv", stringsAsFactors = TRUE)
datatable(data.ab)
str(data.ab)
## 'data.frame':    4177 obs. of  9 variables:
##  $ Sex           : Factor w/ 3 levels "F","I","M": 3 3 1 3 2 2 1 1 3 1 ...
##  $ Length        : num  0.455 0.35 0.53 0.44 0.33 0.425 0.53 0.545 0.475 0.55 ...
##  $ Diameter      : num  0.365 0.265 0.42 0.365 0.255 0.3 0.415 0.425 0.37 0.44 ...
##  $ Height        : num  0.095 0.09 0.135 0.125 0.08 0.095 0.15 0.125 0.125 0.15 ...
##  $ Whole.weight  : num  0.514 0.226 0.677 0.516 0.205 ...
##  $ Shucked.weight: num  0.2245 0.0995 0.2565 0.2155 0.0895 ...
##  $ Viscera.weight: num  0.101 0.0485 0.1415 0.114 0.0395 ...
##  $ Shell.weight  : num  0.15 0.07 0.21 0.155 0.055 0.12 0.33 0.26 0.165 0.32 ...
##  $ Rings         : int  15 7 9 10 7 8 20 16 9 19 ...
skim(data.ab)
Table 4.2: Data summary
Name data.ab
Number of rows 4177
Number of columns 9
_______________________
Column type frequency:
factor 1
numeric 8
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Sex 0 1 FALSE 3 M: 1528, I: 1342, F: 1307

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
Length 0 1 0.52 0.12 0.07 0.45 0.54 0.62 0.81 ▁▂▅▇▂
Diameter 0 1 0.41 0.10 0.06 0.35 0.42 0.48 0.65 ▁▂▆▇▁
Height 0 1 0.14 0.04 0.00 0.12 0.14 0.16 1.13 ▇▁▁▁▁
Whole.weight 0 1 0.83 0.49 0.00 0.44 0.80 1.15 2.83 ▇▇▅▁▁
Shucked.weight 0 1 0.36 0.22 0.00 0.19 0.34 0.50 1.49 ▇▇▂▁▁
Viscera.weight 0 1 0.18 0.11 0.00 0.09 0.17 0.25 0.76 ▇▇▂▁▁
Shell.weight 0 1 0.24 0.14 0.00 0.13 0.23 0.33 1.00 ▇▇▂▁▁
Rings 0 1 9.93 3.22 1.00 8.00 9.00 11.00 29.00 ▁▇▂▁▁
# Cek Missing Value
colSums(is.na(data.ab))
##            Sex         Length       Diameter         Height 
##              0              0              0              0 
##   Whole.weight Shucked.weight Viscera.weight   Shell.weight 
##              0              0              0              0 
##          Rings 
##              0

4.3.1 Feature Engineering

# Menambahkan Kolom 'Age'
data.ab$Age <- data.ab$Rings + 1.5

# Menghapus Kolom 'Rings'
data.ab$Rings <- NULL

# One-Hot Encoding Kolom 'Sex'
data.ab$Sex <- to_categorical(as.integer(data.ab$Sex) - 1)

4.3.2 Splitting & Scaling

set.seed(123)

train.index <- createDataPartition(data.ab$Age, p = 0.8, list = FALSE)
train <- data.ab[train.index, ]
test <- data.ab[-train.index, ]

# Melakukan Feature Scaling min max (0, 1)
preprocessParams <- preProcess(train[, -9], method=c("range"))
train_X <- as.matrix(predict(preprocessParams, train[, -9]))
test_X <- as.matrix(predict(preprocessParams, test[, -9]))

train_y <- train[, 9]
test_y <- test[, 9]

4.3.3 Pemodelan

# Membuat model neural network dengan 2 hidden layer
model.reg <- keras_model_sequential() %>%
   layer_dense(units = 64, activation = "relu", input_shape = ncol(train_X)) %>%
   layer_dropout(0.2) %>%
   layer_dense(units = 64, activation = "relu") %>%
   layer_dropout(0.2) %>%
   layer_dense(units = 1, activation = "linear")      # units = 1 dan activation = "linear"

# menentukan nama dan path file untuk penyimpanan model
filepath <- "model_reg_check.keras"

# mengatur kriteria checkpoint
# simpan model jika memperoleh skor terbaik
checkpoint <- callback_model_checkpoint(
    filepath=filepath,
    monitor="val_loss",
    save_best_only=TRUE,
    mode="min",           # minimum loss
    verbose=1,
)

# mengatur kondisi untuk early stopping
early_stopping <- callback_early_stopping(
    monitor="val_loss",
    patience=15,
    verbose=1,
)


# Kompilasi model
model.reg %>% compile(
  loss = "mean_squared_error",
  optimizer = "adam",
  metrics = list("mean_squared_error", "mean_absolute_error")
)
# Melakukan tahapan pelatihan model
history <- model.reg %>% fit(
  train_X, train_y,
  shuffle = T,
  epochs = 100,
  batch_size = 32,
  validation_split = 0.2,
  callbacks=list(checkpoint, early_stopping),
  verbose = F
)
## 
## Epoch 1: val_loss improved from inf to 6.68073, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 2: val_loss improved from 6.68073 to 5.22620, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 3: val_loss improved from 5.22620 to 5.02943, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 4: val_loss improved from 5.02943 to 5.01410, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 5: val_loss improved from 5.01410 to 4.94047, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 6: val_loss improved from 4.94047 to 4.67202, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 7: val_loss improved from 4.67202 to 4.63101, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 8: val_loss did not improve from 4.63101
## 
## Epoch 9: val_loss improved from 4.63101 to 4.49598, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 10: val_loss improved from 4.49598 to 4.28362, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 11: val_loss did not improve from 4.28362
## 
## Epoch 12: val_loss did not improve from 4.28362
## 
## Epoch 13: val_loss did not improve from 4.28362
## 
## Epoch 14: val_loss improved from 4.28362 to 4.13581, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 15: val_loss improved from 4.13581 to 4.09316, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 16: val_loss did not improve from 4.09316
## 
## Epoch 17: val_loss improved from 4.09316 to 4.01680, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 18: val_loss did not improve from 4.01680
## 
## Epoch 19: val_loss did not improve from 4.01680
## 
## Epoch 20: val_loss did not improve from 4.01680
## 
## Epoch 21: val_loss did not improve from 4.01680
## 
## Epoch 22: val_loss did not improve from 4.01680
## 
## Epoch 23: val_loss improved from 4.01680 to 3.88020, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 24: val_loss did not improve from 3.88020
## 
## Epoch 25: val_loss improved from 3.88020 to 3.82043, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 26: val_loss improved from 3.82043 to 3.78797, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 27: val_loss did not improve from 3.78797
## 
## Epoch 28: val_loss did not improve from 3.78797
## 
## Epoch 29: val_loss did not improve from 3.78797
## 
## Epoch 30: val_loss did not improve from 3.78797
## 
## Epoch 31: val_loss did not improve from 3.78797
## 
## Epoch 32: val_loss did not improve from 3.78797
## 
## Epoch 33: val_loss improved from 3.78797 to 3.72414, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 34: val_loss did not improve from 3.72414
## 
## Epoch 35: val_loss improved from 3.72414 to 3.69076, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 36: val_loss did not improve from 3.69076
## 
## Epoch 37: val_loss did not improve from 3.69076
## 
## Epoch 38: val_loss did not improve from 3.69076
## 
## Epoch 39: val_loss did not improve from 3.69076
## 
## Epoch 40: val_loss did not improve from 3.69076
## 
## Epoch 41: val_loss did not improve from 3.69076
## 
## Epoch 42: val_loss did not improve from 3.69076
## 
## Epoch 43: val_loss did not improve from 3.69076
## 
## Epoch 44: val_loss improved from 3.69076 to 3.66585, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 45: val_loss improved from 3.66585 to 3.64229, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 46: val_loss did not improve from 3.64229
## 
## Epoch 47: val_loss improved from 3.64229 to 3.62209, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 48: val_loss did not improve from 3.62209
## 
## Epoch 49: val_loss did not improve from 3.62209
## 
## Epoch 50: val_loss did not improve from 3.62209
## 
## Epoch 51: val_loss did not improve from 3.62209
## 
## Epoch 52: val_loss did not improve from 3.62209
## 
## Epoch 53: val_loss did not improve from 3.62209
## 
## Epoch 54: val_loss did not improve from 3.62209
## 
## Epoch 55: val_loss did not improve from 3.62209
## 
## Epoch 56: val_loss improved from 3.62209 to 3.59576, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 57: val_loss did not improve from 3.59576
## 
## Epoch 58: val_loss improved from 3.59576 to 3.57944, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 59: val_loss did not improve from 3.57944
## 
## Epoch 60: val_loss did not improve from 3.57944
## 
## Epoch 61: val_loss did not improve from 3.57944
## 
## Epoch 62: val_loss did not improve from 3.57944
## 
## Epoch 63: val_loss did not improve from 3.57944
## 
## Epoch 64: val_loss improved from 3.57944 to 3.55370, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 65: val_loss did not improve from 3.55370
## 
## Epoch 66: val_loss did not improve from 3.55370
## 
## Epoch 67: val_loss did not improve from 3.55370
## 
## Epoch 68: val_loss did not improve from 3.55370
## 
## Epoch 69: val_loss did not improve from 3.55370
## 
## Epoch 70: val_loss did not improve from 3.55370
## 
## Epoch 71: val_loss did not improve from 3.55370
## 
## Epoch 72: val_loss did not improve from 3.55370
## 
## Epoch 73: val_loss did not improve from 3.55370
## 
## Epoch 74: val_loss did not improve from 3.55370
## 
## Epoch 75: val_loss did not improve from 3.55370
## 
## Epoch 76: val_loss improved from 3.55370 to 3.52689, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 77: val_loss improved from 3.52689 to 3.50630, saving model to C:\Users\Fathan\Documents\Obsidian Vault\2. Kuliah\Smt 6\2. Teknik Pembelajaran Mesin\Project\model_reg_check.keras
## 
## Epoch 78: val_loss did not improve from 3.50630
## 
## Epoch 79: val_loss did not improve from 3.50630
## 
## Epoch 80: val_loss did not improve from 3.50630
## 
## Epoch 81: val_loss did not improve from 3.50630
## 
## Epoch 82: val_loss did not improve from 3.50630
## 
## Epoch 83: val_loss did not improve from 3.50630
## 
## Epoch 84: val_loss did not improve from 3.50630
## 
## Epoch 85: val_loss did not improve from 3.50630
## 
## Epoch 86: val_loss did not improve from 3.50630
## 
## Epoch 87: val_loss did not improve from 3.50630
## 
## Epoch 88: val_loss did not improve from 3.50630
## 
## Epoch 89: val_loss did not improve from 3.50630
## 
## Epoch 90: val_loss did not improve from 3.50630
## 
## Epoch 91: val_loss did not improve from 3.50630
## 
## Epoch 92: val_loss did not improve from 3.50630
## Epoch 92: early stopping
summary(model.reg)
## Model: "sequential_4"
## ____________________________________________________________________
##  Layer (type)                 Output Shape               Param #    
## ====================================================================
##  dense_13 (Dense)             (None, 64)                 704        
##  dropout_7 (Dropout)          (None, 64)                 0          
##  dense_12 (Dense)             (None, 64)                 4160       
##  dropout_6 (Dropout)          (None, 64)                 0          
##  dense_11 (Dense)             (None, 1)                  65         
## ====================================================================
## Total params: 4929 (19.25 KB)
## Trainable params: 4929 (19.25 KB)
## Non-trainable params: 0 (0.00 Byte)
## ____________________________________________________________________
plot(history)

# Mengevaluasi model menggunakan data uji
scores <- model.reg %>% evaluate(test_X, test_y)
## 27/27 - 0s - loss: 4.9077 - mean_squared_error: 4.9077 - mean_absolute_error: 1.4498 - 79ms/epoch - 3ms/step
print(scores)
##                loss  mean_squared_error mean_absolute_error 
##            4.907651            4.907651            1.449765
cat("RMSE:", scores[2]^0.5, "\n")
## RMSE: 2.215322
cat("MAE:", scores[3], "\n")
## MAE: 1.449765

4.3.4 Prediksi

# Melakukan prediksi
prediksi <- predict(model.reg, test_X)
## 27/27 - 0s - 170ms/epoch - 6ms/step
# menampilkan 10 hasil prediksi pertama
# disandingkan dengan nilai aslinya
head(cbind("True" = test_y, "Pred"= prediksi), 20)
##       True          
##  [1,] 10.5 12.573493
##  [2,]  9.5  9.212999
##  [3,] 10.5 10.759621
##  [4,] 12.5 11.769635
##  [5,] 10.5  9.635687
##  [6,] 11.5 11.482162
##  [7,] 13.5 12.119763
##  [8,] 16.5 12.653934
##  [9,] 19.5 11.936749
## [10,] 12.5 11.589370
## [11,] 10.5 10.019670
## [12,]  9.5 10.650457
## [13,]  8.5  9.629473
## [14,] 11.5 10.992085
## [15,]  8.5 11.443769
## [16,]  8.5  9.978625
## [17,]  9.5 10.223392
## [18,] 15.5 12.821776
## [19,] 13.5 21.256840
## [20,] 14.5 13.675249

4.3.5 Evaluasi Model

# Mengevaluasi model menggunakan data uji
scores <- model.reg %>% evaluate(test_X, test_y)
## 27/27 - 0s - loss: 4.9077 - mean_squared_error: 4.9077 - mean_absolute_error: 1.4498 - 83ms/epoch - 3ms/step
print(scores)
##                loss  mean_squared_error mean_absolute_error 
##            4.907651            4.907651            1.449765
keras_train <- model.reg %>% predict(train_X)
## 105/105 - 0s - 176ms/epoch - 2ms/step
keras_test <- model.reg %>% predict(test_X)
## 27/27 - 0s - 73ms/epoch - 3ms/step
# Training Evaluation
postResample(keras_train[,1], train$Age)
##      RMSE  Rsquared       MAE 
## 2.1799429 0.5623665 1.4940162
# Testing Evaluation
postResample(keras_test[,1], test$Age)
##      RMSE  Rsquared       MAE 
## 2.2153218 0.5184292 1.4497654