BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Machine learning (pembelajaran mesin) adalah cabang kecerdasan buatan yang memungkinkan komputer mempelajari pola dari data dan menggunakannya untuk membuat prediksi atau keputusan tanpa harus diprogram secara eksplisit untuk setiap aturan. Pada pembelajaran terawasi (supervised learning), model dilatih menggunakan data yang telah memiliki respons, baik berupa nilai numerik (regresi) maupun kategori (klasifikasi) (Fransiska, 2026). Seiring perkembangan teknologi digital, jumlah dan kompleksitas data terus meningkat sehingga mendorong lahirnya model-model prediksi yang semakin beragam, mulai dari model sederhana yang mengasumsikan hubungan linear hingga model yang mampu mengenali pola nonlinear yang sulit diidentifikasi secara manual. Jaringan saraf tiruan merupakan salah satu jenis sistem pembelajaran mesin yang berkembang dan banyak digunakan untuk tujuan tersebut (Fitriani & Bahri, 2024).

Artificial Neural Network (ANN) atau jaringan saraf tiruan merupakan model komputasi yang terinspirasi dari kerja otak manusia, di mana sejumlah neuron saling terhubung untuk memproses informasi dan mempelajari pola dari data. ANN tersusun atas lapisan masukan (input layer), lapisan tersembunyi (hidden layer), dan lapisan keluaran (output layer) (Fransiska, 2026). Setiap neuron menerima masukan yang dikalikan dengan bobot, ditambahkan bias, lalu diproses melalui fungsi aktivasi untuk menghasilkan keluaran, sehingga ANN mampu mempelajari pola nonlinear yang kompleks dan dapat digunakan untuk kasus regresi maupun klasifikasi (Anggraini dkk., 2026).

Kinerja ANN dipengaruhi oleh pengaturan parameter pelatihan, seperti jumlah neuron pada lapisan tersembunyi, learning rate, dan jumlah iterasi. Oleh karena itu, praktikum ini dilakukan untuk memahami konsep ANN, mengimplementasikan ANN untuk regresi dan klasifikasi menggunakan R, serta mengevaluasi kinerja model menggunakan ukuran evaluasi yang sesuai (Supriyanto dkk., 2022.

1.2 Rumusan Masalah

  1. Apa yang dimaksud dengan Artificial Neural Network (ANN) dan bagaimana cara mengimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahasa pemrograman R?
  2. Bagaimana cara mengevaluasi performa model ANN menggunakan umetrik evaluasi MSE dan MAPE untuk regresi, serta akurasi dan presisi untuk klasifikasi?

1.3 Tujuan Praktikum

  1. Mahasiswa dapat memahami konsep dan mengimplementasikan model Artificial Neural Network (ANN) untuk regresi dan klasifikasi menggunakan bahasa pemrograman R.
  2. Mahasiswa dapat mengevaluasi performa model ANN menggunakan metrik evaluasi MSE dan MAPE untuk regresi, serta akurasi dan presisi untuk klasifikasi.

1.4 Batasan Masalah

Adapun batasan masalah yang ditentukan pada penelitian ini, yaitu lakukan ANN Klasifikasi dengan hidden neuron = 10, 20, dan 30 dengan data training 80% dan testing 20% serta data training 60% dan testing 40%, kemudian interpretasikan masing-masing output dengan jelas. Data yang digunakan adalah data Iris.

BAB II TINJAUAN PUSTAKA

2.1 Konsep Artificial Neural Network (ANN)

Artificial Neural Network (ANN) merupakan model komputasi yang terinspirasi dari kerja otak manusia, di mana sejumlah neuron saling terhubung untuk memproses informasi dan mempelajari pola dari data. Informasi masukan diterima oleh neuron pada lapisan masukan, diteruskan melalui lapisan tersembunyi, diolah melalui serangkaian perhitungan matematis, dan menghasilkan keluaran pada lapisan keluaran. Setiap koneksi antar neuron memiliki bobot yang menentukan seberapa penting suatu masukan, dan selama pelatihan bobot tersebut diperbarui berdasarkan data (Fitriani & Bahri, 2024).

Setiap neuron menerima masukan yang dikalikan dengan bobot tertentu, kemudian ditambahkan bias dan diproses melalui fungsi aktivasi untuk menghasilkan keluaran. Secara matematis, proses pengolahan informasi pada suatu neuron dapat dinyatakan sebagai (Fransiska, 2026):

\[ y = f\left(\sum_{i=1}^{p} w_i x_i + b\right) \]

dengan \(x_i\) merupakan masukan ke-\(i\), \(w_i\) bobot yang menghubungkan masukan ke-\(i\) dengan neuron, \(b\) adalah bias, \(f\) merupakan fungsi aktivasi, dan \(y\) adalah keluaran neuron. ANN memiliki tiga komponen utama, yaitu arsitektur jaringan yang menggambarkan pola hubungan antar neuron, algoritma pembelajaran yang digunakan untuk menyesuaikan bobot jaringan, serta fungsi aktivasi yang menentukan keluaran setiap neuron (Fransiska, 2026).

2.2 Arsitektur Jaringan

Arsitektur ANN dapat dibedakan menjadi dua jenis, yaitu Single Layer Perceptron (SLP) dan Multi-Layer Perceptron (MLP) (Fransiska, 2026). Perbedaan keduanya dirangkum pada Tabel 1.

Tabel 1. Arsitektur Jaringan ANN

Arsitektur Jaringan Fungsi
Single Layer Perceptron (SLP) Jaringan tanpa lapisan tersembunyi yang digunakan untuk mempelajari hubungan linear dan menyelesaikan klasifikasi yang dapat dipisahkan secara linear
Multi-Layer Perceptron (MLP) Jaringan dengan satu atau lebih lapisan tersembunyi yang mampu mempelajari hubungan nonlinear untuk pemodelan regresi dan klasifikasi

Pada praktikum ini digunakan MLP dengan satu lapisan tersembunyi, yang dibentuk menggunakan fungsi nnet() pada paket nnet. Jumlah neuron pada lapisan tersembunyi (hidden neuron) ditentukan melalui argumen size.

2.3 ANN untuk Regresi

ANN regresi digunakan untuk memprediksi variabel respons berupa nilai numerik kontinu. Lapisan keluaran umumnya menggunakan fungsi aktivasi linear agar jaringan dapat menghasilkan nilai prediksi sesuai dengan rentang variabel respons; pada fungsi nnet() hal ini diatur dengan argumen linout = TRUE. Evaluasi ANN regresi dilakukan dengan membandingkan nilai aktual dan nilai prediksi menggunakan Mean Squared Error (MSE) dan Mean Absolute Percentage Error (MAPE) (Fransiska, 2026):

\[ MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2, \qquad MAPE = \frac{1}{n}\sum_{i=1}^{n}\left|\frac{y_i - \hat{y}_i}{y_i}\right| \times 100\% \]

2.4 ANN untuk Klasifikasi

ANN klasifikasi digunakan untuk memprediksi variabel respons berupa kategori. Berdasarkan jumlah kelasnya, ANN klasifikasi dibedakan menjadi dua jenis (Fransiska, 2026):

  • Klasifikasi biner, yaitu klasifikasi dengan dua kategori. Lapisan keluaran umumnya menggunakan satu neuron dengan fungsi sigmoid untuk menghasilkan probabilitas antara 0 dan 1.
  • Klasifikasi multikelas, yaitu klasifikasi dengan lebih dari dua kategori. Lapisan keluaran umumnya menggunakan fungsi softmax untuk menghasilkan probabilitas setiap kelas, dengan jumlah probabilitas seluruh kelas sama dengan 1.

Fungsi softmax untuk \(K\) kelas dinyatakan sebagai:

\[ \hat{y}_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}}, \qquad k = 1, 2, \dots, K \]

dengan \(z_k\) merupakan masukan terbobot pada neuron keluaran ke-\(k\). Kelas dengan probabilitas tertinggi menjadi kelas hasil prediksi (Faturrahman dkk., 2025). Pada fungsi nnet(), respons berupa faktor dengan lebih dari dua kelas, seperti variabel Species pada data Iris, secara otomatis dimodelkan dengan keluaran softmax, sehingga jumlah neuron keluaran sama dengan jumlah kelas.

2.5 Proses Pembelajaran dan Backpropagation

Backpropagation merupakan algoritma pembelajaran pada ANN yang digunakan untuk menyesuaikan bobot jaringan berdasarkan kesalahan prediksi. Secara umum, proses pembelajaran terdiri atas tiga tahap, yaitu (Fransiska, 2026):

  1. Forward propagation: menghitung keluaran jaringan berdasarkan masukan, bobot, dan fungsi aktivasi.
  2. Backward propagation: menghitung gradien kesalahan terhadap bobot jaringan.
  3. Pembaruan bobot: memperbarui bobot berdasarkan gradien untuk mengurangi kesalahan prediksi.

Proses pembelajaran ANN klasifikasi dilakukan dengan meminimalkan fungsi kerugian, salah satunya cross-entropy loss yang mengukur perbedaan antara probabilitas prediksi dan kelas aktual (Fransiska, 2026). Untuk klasifikasi multikelas, categorical cross-entropy dinyatakan sebagai:

\[ L = -\frac{1}{n}\sum_{i=1}^{n}\sum_{k=1}^{K} y_{ik}\log(\hat{y}_{ik}) \]

dengan \(y_{ik}\) adalah label aktual dan \(\hat{y}_{ik}\) adalah probabilitas prediksi model. Pembaruan bobot menggunakan gradient descent dituliskan sebagai:

\[ w_{ij}^{(t+1)} = w_{ij}^{(t)} - \eta \frac{\partial L}{\partial w_{ij}} \]

dengan \(\eta\) adalah laju pembelajaran (learning rate). Proses pelatihan diulang hingga kondisi berhenti terpenuhi, misalnya jumlah iterasi (epoch) maksimum atau target galat tercapai (Supriyanto dkk., 2022). Pada paket nnet, bobot dioptimasi menggunakan metode BFGS dengan batas jumlah iterasi yang diatur melalui argumen maxit.

2.6 Fungsi Aktivasi

Fungsi aktivasi digunakan untuk menentukan keluaran neuron dan membantu jaringan mempelajari pola nonlinear (Fransiska, 2026). Fungsi aktivasi yang umum digunakan dirangkum pada Tabel 2.

Tabel 2. Fungsi Aktivasi pada ANN

Fungsi Rumus Penggunaan
Sigmoid \(f(x) = \dfrac{1}{1 + e^{-x}}\) Menghasilkan nilai antara 0 dan 1; cocok untuk klasifikasi biner
Hyperbolic Tangent (Tanh) \(f(x) = \dfrac{1 - e^{-2x}}{1 + e^{-2x}} = \tanh(x)\) Menghasilkan keluaran antara -1 dan 1
Rectified Linear Unit (ReLU) \(f(x) = \max(0, x)\) Mempercepat konvergensi dan mengurangi masalah vanishing gradient
Softmax \(f_k(x) = \dfrac{e^{x_k}}{\sum_{j=1}^{K} e^{x_j}}\) Menghasilkan probabilitas setiap kelas pada klasifikasi multikelas

Pada fungsi nnet(), neuron pada lapisan tersembunyi menggunakan fungsi aktivasi sigmoid (logistik), sedangkan keluaran bersifat linear untuk regresi (linout = TRUE), logistik untuk klasifikasi biner, dan softmax untuk klasifikasi multikelas.

2.7 Evaluasi Model Klasifikasi

Evaluasi ANN klasifikasi dilakukan dengan membandingkan kelas aktual dan kelas hasil prediksi. Hasil perbandingan tersebut disajikan dalam confusion matrix (Fransiska, 2026). Untuk klasifikasi biner, struktur confusion matrix disajikan pada Tabel 4.

Tabel 4. Confusion Matrix Klasifikasi Biner

Predicted Positive Predicted Negative
Actual Positive True Positive (TP) False Negative (FN)
Actual Negative False Positive (FP) True Negative (TN)

Berdasarkan confusion matrix, ukuran evaluasi yang dapat dihitung adalah (Fransiska, 2026):

\[ Accuracy = \frac{TP + TN}{TP + TN + FP + FN}, \qquad Precision = \frac{TP}{TP + FP}, \qquad Recall = \frac{TP}{TP + FN} \]

\[ Specificity = \frac{TN}{TN + FP}, \qquad F1\text{-}Score = 2\left(\frac{Precision \times Recall}{Precision + Recall}\right) \]

Pada klasifikasi multikelas, confusion matrix berukuran \(K \times K\). Akurasi dihitung sebagai jumlah elemen diagonal dibagi jumlah seluruh data, sedangkan presisi, recall, dan F1-score dihitung untuk setiap kelas (satu kelas dibandingkan dengan kelas lainnya), kemudian dirata-ratakan (macro average) agar diperoleh satu nilai ringkasan model. Ukuran evaluasi berbasis confusion matrix seperti akurasi, presisi, recall, dan F1-score juga digunakan pada klasifikasi multikelas oleh Anggraini dkk. (2026).

BAB III METODE PENELITIAN

3.1 Jenis dan Sumber Data

Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif, yaitu data berbentuk angka yang dapat diolah dan dianalisis secara statistik. Sumber data yang digunakan adalah data Iris (iris) yang tersedia pada perangkat lunak R, sesuai dengan arahan modul praktikum (Fransiska, 2026). Dataset ini terdiri dari 150 pengamatan dengan satu variabel respons berupa kategori (Species) yang memiliki tiga kelas dan empat variabel prediktor numerik. Data digunakan untuk membangun model Artificial Neural Network klasifikasi dengan jumlah hidden neuron sebesar 10, 20, dan 30.

3.2 Variabel Penelitian

Tabel 5. Variabel Penelitian

No Variabel Keterangan Tipe Data Peran
1 Species Jenis bunga iris yang terdiri atas tiga kelas, yaitu setosa, versicolor, dan virginica Kategorik Respons
2 Sepal.Length Panjang kelopak bunga (sepal) dalam cm Numerik Prediktor
3 Sepal.Width Lebar kelopak bunga (sepal) dalam cm Numerik Prediktor
4 Petal.Length Panjang mahkota bunga (petal) dalam cm Numerik Prediktor
5 Petal.Width Lebar mahkota bunga (petal) dalam cm Numerik Prediktor

3.3 Langkah-langkah Analisis

  1. Memanggil package yang dibutuhkan, yaitu nnet untuk membangun model ANN, NeuralNetTools untuk visualisasi dan interpretasi jaringan, serta knitr untuk menampilkan tabel.
  2. Memuat data Iris dan memeriksa struktur serta ringkasan datanya.
  3. Membagi data menjadi dua skenario, yaitu 80% training dan 20% testing, serta 60% training dan 40% testing, menggunakan fungsi sample() dengan set.seed(917).
  4. Membentuk model ANN klasifikasi menggunakan fungsi nnet() dengan rumus Species ~ . dan jumlah hidden neuron sebesar 10, 20, dan 30 pada setiap skenario sehingga terbentuk 6 model.
  5. Memprediksi kelas pada data testing menggunakan fungsi predict() dengan type = "class".
  6. Menyusun confusion matrix untuk setiap model, kemudian menghitung accuracy, precision, recall, dan F1-score.
  7. Membandingkan hasil evaluasi seluruh model untuk menentukan pengaruh jumlah hidden neuron dan proporsi data training-testing, serta menentukan model terbaik.
  8. Mengeksplorasi model terbaik menggunakan plotnet() dan olden().
  9. Menginterpretasikan hasil dan menarik kesimpulan.

3.4 Diagram Alir Penelitian

BAB IV Hasil dan Pembahasan

4.1 Persiapan Data

Tahap awal adalah memanggil package yang dibutuhkan, yaitu nnet untuk membangun model ANN, NeuralNetTools untuk visualisasi dan interpretasi jaringan, serta knitr untuk menampilkan tabel. Kemudian data Iris dimuat dan diperiksa struktur serta ringkasannya.

library(nnet)
library(NeuralNetTools)
library(knitr)

# Pengaman: memastikan fungsi nnet.formula() dapat dipanggil langsung
if (!exists("nnet.formula")) nnet.formula <- getFromNamespace("nnet.formula", "nnet")

data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris)
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
table(iris$Species)
## 
##     setosa versicolor  virginica 
##         50         50         50

Interpretasi:

Berdasarkan hasil pemeriksaan data, data Iris terdiri atas 150 pengamatan dan 5 variabel, yaitu empat variabel prediktor numerik (Sepal.Length, Sepal.Width, Petal.Length, dan Petal.Width) dan satu variabel respons kategorik (Species). Variabel respons terdiri atas tiga kelas dengan jumlah pengamatan setosa = 50, versicolor = 50, virginica = 50, sehingga sebaran kelas seimbang. Rata-rata keempat prediktor berturut-turut adalah 5,843, 3,057, 3,758, dan 1,199 cm. Karena respons berupa kategori dengan tiga kelas, kasus yang dianalisis adalah klasifikasi multikelas.

4.2 Pembagian Data Training dan Testing

Data dibagi menjadi dua skenario, yaitu 80% data training dan 20% data testing (skenario 80:20) serta 60% data training dan 40% data testing (skenario 60:40). Pembagian dilakukan dengan mengambil sampel acak menggunakan fungsi sample() dengan set.seed(917) agar hasil dapat direproduksi. Rumus model Species ~ . disusun dari seluruh variabel selain Species.

#Divide the data into train and test
set.seed(917)
nrow(iris)
## [1] 150
# Skenario 1: training 80% dan testing 20%
#Mengambil secara acak data untuk sampel sebanyak 120 data
index80 <- sample(1:nrow(iris), round(0.8*nrow(iris)))
train80 <- iris[index80,]; nrow(train80)
## [1] 120
test80  <- iris[-index80,]; nrow(test80)
## [1] 30
# Skenario 2: training 60% dan testing 40%
set.seed(917)
#Mengambil secara acak data untuk sampel sebanyak 90 data
index60 <- sample(1:nrow(iris), round(0.6*nrow(iris)))
train60 <- iris[index60,]; nrow(train60)
## [1] 90
test60  <- iris[-index60,]; nrow(test60)
## [1] 60
# Sintaks ANN
i <- names(train80)
form <- as.formula(paste("Species ~", paste(i[!i %in% "Species"], collapse = " + ")))
form
## Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
dist_df <- data.frame(
  Skenario = c("80:20", "60:40"),
  Training = c(nrow(train80), nrow(train60)),
  Testing  = c(nrow(test80), nrow(test60)),
  rbind(table(test80$Species), table(test60$Species))
)
colnames(dist_df)[4:6] <- paste0("Testing_", levels(iris$Species))

kable(dist_df, align = "c",
      caption = "Tabel 6. Ukuran Data dan Sebaran Kelas pada Data Testing")
Tabel 6. Ukuran Data dan Sebaran Kelas pada Data Testing
Skenario Training Testing Testing_setosa Testing_versicolor Testing_virginica
80:20 120 30 8 10 12
60:40 90 60 17 24 19

Interpretasi:

Berdasarkan hasil pembagian data, dari 150 pengamatan, skenario 80:20 menghasilkan 120 data training dan 30 data testing, sedangkan skenario 60:40 menghasilkan 90 data training dan 60 data testing (Tabel 6). Rumus model yang terbentuk adalah Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, yaitu Species sebagai respons dan empat variabel lainnya sebagai prediktor. Data training digunakan untuk melatih bobot jaringan, sedangkan data testing digunakan untuk mengukur kemampuan model memprediksi data yang belum pernah digunakan selama pelatihan.

4.3 ANN Klasifikasi Skenario 80:20

Pada skenario ini model dilatih menggunakan train80 (120 data) dan diuji menggunakan test80 (30 data). Model dibuat untuk hidden neuron sebesar 10, 20, dan 30.

4.3.1 Hidden Neuron = 10 (Skenario 80:20)

Model dibangun dengan size = 10, yaitu 10 neuron pada lapisan tersembunyi, menggunakan data training 80%.

# ---------- Hidden Neuron = 10 ----------
set.seed(917)
nn80_10 <- nnet.formula(form, size = 10, data = train80, trace = FALSE) #size=10 artinya ada 10 hidden neuron
nn80_10
## a 4-10-3 network with 83 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class80_10 <- factor(predict(nn80_10, newdata = test80, type = "class"),
                           levels = levels(iris$Species))
predict_class80_10
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     versicolor versicolor versicolor versicolor
## [13] versicolor versicolor versicolor versicolor versicolor versicolor
## [19] virginica  virginica  virginica  virginica  virginica  virginica 
## [25] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab80_10 <- table(Aktual = test80$Species, Prediksi = predict_class80_10)
tab80_10
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa          8          0         0
##   versicolor      0         10         0
##   virginica       0          0        12
#Classification rate
sum(diag(tab80_10))/nrow(test80)
## [1] 1
#Presisi tiap kelas
diag(tab80_10)/colSums(tab80_10)
##     setosa versicolor  virginica 
##          1          1          1

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran nn80_10 merupakan ringkasan model, yaitu jenis jaringan (a 4-10-3 network), jumlah bobot yang diestimasi, dan jenis keluaran (softmax modelling karena respons terdiri atas tiga kelas). Objek predict_class80_10 berisi kelas prediksi untuk setiap data testing. Classification table membandingkan kelas aktual (baris) dengan kelas prediksi (kolom). Classification rate adalah jumlah elemen diagonal dibagi jumlah data testing (akurasi), sedangkan presisi setiap kelas adalah elemen diagonal dibagi jumlah kolom kelas tersebut, yaitu proporsi prediksi suatu kelas yang benar-benar berasal dari kelas tersebut. Model ini berarsitektur 4-10-3 dengan 83 bobot. Dari 30 data testing, 30 data diklasifikasikan dengan benar dan 0 data salah, sehingga classification rate (akurasi) sebesar 100,00%. Tidak terdapat kesalahan klasifikasi. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 100,00%, virginica sebesar 100,00%, dengan presisi rata-rata 100,00%.

##Eksplorasi
# Plot Neural Network
plotnet(nn80_10)

Interpretasi plotnet():

Plot plotnet() menggambarkan arsitektur jaringan yang terdiri atas neuron masukan (keempat variabel prediktor), neuron tersembunyi, neuron keluaran (tiga kelas Species), dan neuron bias. Garis hitam menunjukkan bobot positif dan garis abu-abu menunjukkan bobot negatif, dengan ketebalan garis sebanding dengan besar bobot. Pada model ini terdapat 4 neuron masukan, 10 neuron tersembunyi, dan 3 neuron keluaran dengan total 83 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya.

#get the neural weights
bobot80_10 <- neuralweights(nn80_10)
str(bobot80_10, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn80_10) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 10 3
##  $ wts   :List of 13
##   ..$ hidden 1 1 : num [1:5] 1.78 8.31 2.94 6.13 2.22
##   ..$ hidden 1 2 : num [1:5] -1.77 -4.78 -4.56 3.31 1.34
##   ..$ hidden 1 3 : num [1:5] 12098 2602 2941 -5652 -5379
##   .. [list output truncated]

Interpretasi neuralweights():

Fungsi neuralweights() mengekstrak bobot jaringan. Hasilnya berupa list yang memuat bobot untuk setiap neuron (bias dan koneksi dari lapisan sebelumnya) serta struktur jaringan. Karena jumlah bobot besar, keluaran diringkas dengan str() agar laporan tetap terbaca; seluruh bobot dapat dilihat dengan memanggil neuralweights() secara langsung. Struktur jaringan 4-10-3 menghasilkan jumlah bobot \((4+1) \times 10 + (10+1) \times 3 =\) 83, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn80_10)

Kelas Variabel Importance
setosa Petal.Length -5567725
versicolor Petal.Length -13147630
virginica Petal.Length 18719615

Interpretasi olden():

Plot olden() pada model multikelas menampilkan importance untuk satu neuron keluaran, sehingga importance setiap kelas dihitung terpisah menggunakan argumen out_var (tabel di atas). Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Length, versicolor adalah Petal.Length, virginica adalah Petal.Length..

4.3.2 Hidden Neuron = 20 (Skenario 80:20)

Model dibangun dengan size = 20, yaitu 20 neuron pada lapisan tersembunyi, menggunakan data training 80%.

# ---------- Hidden Neuron = 20 ----------
set.seed(917)
nn80_20 <- nnet.formula(form, size = 20, data = train80, trace = FALSE) #size=20 artinya ada 20 hidden neuron
nn80_20
## a 4-20-3 network with 163 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class80_20 <- factor(predict(nn80_20, newdata = test80, type = "class"),
                           levels = levels(iris$Species))
predict_class80_20
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     versicolor versicolor versicolor versicolor
## [13] versicolor versicolor versicolor versicolor versicolor versicolor
## [19] virginica  versicolor versicolor virginica  versicolor virginica 
## [25] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab80_20 <- table(Aktual = test80$Species, Prediksi = predict_class80_20)
tab80_20
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa          8          0         0
##   versicolor      0         10         0
##   virginica       0          3         9
#Classification rate
sum(diag(tab80_20))/nrow(test80)
## [1] 0.9
#Presisi tiap kelas
diag(tab80_20)/colSums(tab80_20)
##     setosa versicolor  virginica 
##  1.0000000  0.7692308  1.0000000

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran model, classification table, classification rate, dan presisi dibaca dengan cara yang sama seperti pada model pertama. Model ini berarsitektur 4-20-3 dengan 163 bobot. Dari 30 data testing, 27 data diklasifikasikan dengan benar dan 3 data salah, sehingga classification rate (akurasi) sebesar 90,00%. Kesalahan klasifikasi yang terjadi: 3 data virginica diprediksi sebagai versicolor. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 76,92%, virginica sebesar 100,00%, dengan presisi rata-rata 92,31%. Akurasi menurun dibandingkan model dengan 10 hidden neuron (100,00%), sehingga penambahan neuron tidak selalu meningkatkan kinerja dan dapat berkaitan dengan kompleksitas model yang berlebih.

##Eksplorasi
# Plot Neural Network
plotnet(nn80_20)

Interpretasi plotnet():

Pada model ini terdapat 4 neuron masukan, 20 neuron tersembunyi, dan 3 neuron keluaran dengan total 163 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya. Dengan neuron tersembunyi yang lebih banyak, jaringan tampak semakin rapat sehingga sulit dibaca secara visual, tetapi kapasitas model untuk mempelajari pola nonlinear bertambah.

#get the neural weights
bobot80_20 <- neuralweights(nn80_20)
str(bobot80_20, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn80_20) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 20 3
##  $ wts   :List of 23
##   ..$ hidden 1 1 : num [1:5] 1.605 7.216 0.796 4.225 4.021
##   ..$ hidden 1 2 : num [1:5] -473 -142 -216 315 260
##   ..$ hidden 1 3 : num [1:5] 837.6 20.5 -113.1 56.6 -540.3
##   .. [list output truncated]

Interpretasi neuralweights():

Struktur jaringan 4-20-3 menghasilkan jumlah bobot \((4+1) \times 20 + (20+1) \times 3 =\) 163, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn80_20)

Kelas Variabel Importance
setosa Petal.Width -36029,73
versicolor Petal.Width -178039,81
virginica Petal.Width 214094,26

Interpretasi olden():

Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Width, versicolor adalah Petal.Width, virginica adalah Petal.Width. Pembacaan ini bersifat eksploratif karena bobot jaringan bergantung pada bobot awal yang dibangkitkan secara acak.

4.3.3 Hidden Neuron = 30 (Skenario 80:20)

Model dibangun dengan size = 30, yaitu 30 neuron pada lapisan tersembunyi, menggunakan data training 80%.

# ---------- Hidden Neuron = 30 ----------
set.seed(917)
nn80_30 <- nnet.formula(form, size = 30, data = train80, trace = FALSE) #size=30 artinya ada 30 hidden neuron
nn80_30
## a 4-30-3 network with 243 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class80_30 <- factor(predict(nn80_30, newdata = test80, type = "class"),
                           levels = levels(iris$Species))
predict_class80_30
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     virginica  versicolor versicolor versicolor
## [13] versicolor virginica  versicolor versicolor versicolor versicolor
## [19] virginica  virginica  virginica  virginica  versicolor virginica 
## [25] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab80_30 <- table(Aktual = test80$Species, Prediksi = predict_class80_30)
tab80_30
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa          8          0         0
##   versicolor      0          8         2
##   virginica       0          1        11
#Classification rate
sum(diag(tab80_30))/nrow(test80)
## [1] 0.9
#Presisi tiap kelas
diag(tab80_30)/colSums(tab80_30)
##     setosa versicolor  virginica 
##  1.0000000  0.8888889  0.8461538

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran model, classification table, classification rate, dan presisi dibaca dengan cara yang sama seperti pada model pertama. Model ini berarsitektur 4-30-3 dengan 243 bobot. Dari 30 data testing, 27 data diklasifikasikan dengan benar dan 3 data salah, sehingga classification rate (akurasi) sebesar 90,00%. Kesalahan klasifikasi yang terjadi: 1 data virginica diprediksi sebagai versicolor; 2 data versicolor diprediksi sebagai virginica. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 88,89%, virginica sebesar 84,62%, dengan presisi rata-rata 91,17%. Akurasi sama dengan model dengan 20 hidden neuron (90,00%), sehingga penambahan neuron tidak mengubah kinerja pada data testing.

##Eksplorasi
# Plot Neural Network
plotnet(nn80_30)

Interpretasi plotnet():

Plot arsitektur dibaca dengan cara yang sama seperti pada model pertama. Pada model ini terdapat 4 neuron masukan, 30 neuron tersembunyi, dan 3 neuron keluaran dengan total 243 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya. Dengan neuron tersembunyi yang lebih banyak, jaringan tampak semakin rapat sehingga sulit dibaca secara visual, tetapi kapasitas model untuk mempelajari pola nonlinear bertambah.

#get the neural weights
bobot80_30 <- neuralweights(nn80_30)
str(bobot80_30, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn80_30) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 30 3
##  $ wts   :List of 33
##   ..$ hidden 1 1 : num [1:5] -21.712 12.23 -16.937 -0.562 -1.927
##   ..$ hidden 1 2 : num [1:5] -123.9 -43 73 37.1 19.9
##   ..$ hidden 1 3 : num [1:5] 0.542 1.366 0.834 -0.26 -0.602
##   .. [list output truncated]

Interpretasi neuralweights():

Keluaran neuralweights() dibaca seperti pada model pertama. Struktur jaringan 4-30-3 menghasilkan jumlah bobot \((4+1) \times 30 + (30+1) \times 3 =\) 243, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn80_30)

Kelas Variabel Importance
setosa Petal.Length -5097,189
versicolor Petal.Length -6016,691
virginica Petal.Length 11117,545

Interpretasi olden():

Plot dan tabel importance Olden dibaca seperti pada model pertama. Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Length, versicolor adalah Petal.Length, virginica adalah Petal.Length. Pembacaan ini bersifat eksploratif karena bobot jaringan bergantung pada bobot awal yang dibangkitkan secara acak.

4.3.4 Ringkasan Skenario 80:20

rekap80 <- rekap(list(tab80_10, tab80_20, tab80_30), c(10, 20, 30))
kable(rekap80, digits = 4, align = "c",
      format.args = list(decimal.mark = ","),
      caption = "Tabel 7. Ringkasan Kinerja ANN Klasifikasi Skenario 80:20 pada Data Testing")
Tabel 7. Ringkasan Kinerja ANN Klasifikasi Skenario 80:20 pada Data Testing
Hidden Benar Salah Accuracy Precision Recall F1
10 30 0 1,0 1,0000 1,0000 1,0000
20 27 3 0,9 0,9231 0,9167 0,9089
30 27 3 0,9 0,9117 0,9056 0,9074

Interpretasi:

Berdasarkan Tabel 7, akurasi data testing pada skenario 80:20 untuk model dengan 10, 20, dan 30 hidden neuron berturut-turut adalah 100,00%, 90,00%, dan 90,00%, dengan jumlah kesalahan klasifikasi berturut-turut 0, 3, dan 3 dari 30 data. Model dengan akurasi tertinggi adalah model dengan 10 hidden neuron (presisi 100,00%, recall 100,00%, F1-score 100,00%). Model tersebut memiliki akurasi tertinggi sendiri pada skenario ini.

4.4 ANN Klasifikasi Skenario 60:40

Pada skenario ini model dilatih menggunakan train60 (90 data) dan diuji menggunakan test60 (60 data). Model dibuat untuk hidden neuron sebesar 10, 20, dan 30.

4.4.1 Hidden Neuron = 10 (Skenario 60:40)

Model dibangun dengan size = 10, yaitu 10 neuron pada lapisan tersembunyi, menggunakan data training 60%.

# ---------- Hidden Neuron = 10 ----------
set.seed(917)
nn60_10 <- nnet.formula(form, size = 10, data = train60, trace = FALSE) #size=10 artinya ada 10 hidden neuron
nn60_10
## a 4-10-3 network with 83 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class60_10 <- factor(predict(nn60_10, newdata = test60, type = "class"),
                           levels = levels(iris$Species))
predict_class60_10
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     setosa     setosa     setosa     setosa    
## [13] setosa     setosa     setosa     setosa     setosa     versicolor
## [19] versicolor versicolor versicolor versicolor versicolor versicolor
## [25] versicolor versicolor versicolor versicolor virginica  versicolor
## [31] versicolor versicolor versicolor versicolor versicolor versicolor
## [37] versicolor versicolor versicolor versicolor versicolor virginica 
## [43] virginica  virginica  virginica  virginica  versicolor virginica 
## [49] virginica  virginica  virginica  virginica  versicolor virginica 
## [55] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab60_10 <- table(Aktual = test60$Species, Prediksi = predict_class60_10)
tab60_10
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa         17          0         0
##   versicolor      0         23         1
##   virginica       0          2        17
#Classification rate
sum(diag(tab60_10))/nrow(test60)
## [1] 0.95
#Presisi tiap kelas
diag(tab60_10)/colSums(tab60_10)
##     setosa versicolor  virginica 
##  1.0000000  0.9200000  0.9444444

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran model, classification table, classification rate, dan presisi dibaca dengan cara yang sama seperti pada model pertama. Model ini berarsitektur 4-10-3 dengan 83 bobot. Dari 60 data testing, 57 data diklasifikasikan dengan benar dan 3 data salah, sehingga classification rate (akurasi) sebesar 95,00%. Kesalahan klasifikasi yang terjadi: 2 data virginica diprediksi sebagai versicolor; 1 data versicolor diprediksi sebagai virginica. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 92,00%, virginica sebesar 94,44%, dengan presisi rata-rata 95,48%.

##Eksplorasi
# Plot Neural Network
plotnet(nn60_10)

Interpretasi plotnet():

Plot arsitektur dibaca dengan cara yang sama seperti pada model pertama. Pada model ini terdapat 4 neuron masukan, 10 neuron tersembunyi, dan 3 neuron keluaran dengan total 83 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya.

#get the neural weights
bobot60_10 <- neuralweights(nn60_10)
str(bobot60_10, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn60_10) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 10 3
##  $ wts   :List of 13
##   ..$ hidden 1 1 : num [1:5] 1.446 5.172 2.953 1.202 0.598
##   ..$ hidden 1 2 : num [1:5] -3.69 -21.97 -8.41 -19.79 -7.74
##   ..$ hidden 1 3 : num [1:5] 0.0837 -0.3701 -0.8156 0.5816 -0.018
##   .. [list output truncated]

Interpretasi neuralweights():

Keluaran neuralweights() dibaca seperti pada model pertama. Struktur jaringan 4-10-3 menghasilkan jumlah bobot \((4+1) \times 10 + (10+1) \times 3 =\) 83, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn60_10)

Kelas Variabel Importance
setosa Petal.Width -3966,614
versicolor Petal.Width -1797,171
virginica Petal.Width 5791,224

Interpretasi olden():

Plot dan tabel importance Olden dibaca seperti pada model pertama. Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Width, versicolor adalah Petal.Width, virginica adalah Petal.Width. Pembacaan ini bersifat eksploratif karena bobot jaringan bergantung pada bobot awal yang dibangkitkan secara acak.

4.4.2 Hidden Neuron = 20 (Skenario 60:40)

Model dibangun dengan size = 20, yaitu 20 neuron pada lapisan tersembunyi, menggunakan data training 60%.

# ---------- Hidden Neuron = 20 ----------
set.seed(917)
nn60_20 <- nnet.formula(form, size = 20, data = train60, trace = FALSE) #size=20 artinya ada 20 hidden neuron
nn60_20
## a 4-20-3 network with 163 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class60_20 <- factor(predict(nn60_20, newdata = test60, type = "class"),
                           levels = levels(iris$Species))
predict_class60_20
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     setosa     setosa     setosa     setosa    
## [13] setosa     setosa     setosa     setosa     setosa     versicolor
## [19] versicolor versicolor versicolor versicolor versicolor versicolor
## [25] versicolor versicolor versicolor versicolor virginica  versicolor
## [31] versicolor versicolor versicolor versicolor versicolor versicolor
## [37] versicolor versicolor versicolor versicolor versicolor virginica 
## [43] virginica  virginica  virginica  virginica  versicolor virginica 
## [49] virginica  virginica  virginica  virginica  versicolor virginica 
## [55] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab60_20 <- table(Aktual = test60$Species, Prediksi = predict_class60_20)
tab60_20
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa         17          0         0
##   versicolor      0         23         1
##   virginica       0          2        17
#Classification rate
sum(diag(tab60_20))/nrow(test60)
## [1] 0.95
#Presisi tiap kelas
diag(tab60_20)/colSums(tab60_20)
##     setosa versicolor  virginica 
##  1.0000000  0.9200000  0.9444444

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran model, classification table, classification rate, dan presisi dibaca dengan cara yang sama seperti pada model pertama. Model ini berarsitektur 4-20-3 dengan 163 bobot. Dari 60 data testing, 57 data diklasifikasikan dengan benar dan 3 data salah, sehingga classification rate (akurasi) sebesar 95,00%. Kesalahan klasifikasi yang terjadi: 2 data virginica diprediksi sebagai versicolor; 1 data versicolor diprediksi sebagai virginica. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 92,00%, virginica sebesar 94,44%, dengan presisi rata-rata 95,48%. Akurasi sama dengan model dengan 10 hidden neuron (95,00%), sehingga penambahan neuron tidak mengubah kinerja pada data testing.

##Eksplorasi
# Plot Neural Network
plotnet(nn60_20)

Interpretasi plotnet():

Pada model ini terdapat 4 neuron masukan, 20 neuron tersembunyi, dan 3 neuron keluaran dengan total 163 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya. Dengan neuron tersembunyi yang lebih banyak, jaringan tampak semakin rapat sehingga sulit dibaca secara visual, tetapi kapasitas model untuk mempelajari pola nonlinear bertambah.

#get the neural weights
bobot60_20 <- neuralweights(nn60_20)
str(bobot60_20, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn60_20) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 20 3
##  $ wts   :List of 23
##   ..$ hidden 1 1 : num [1:5] -2.0699 -11.3909 -11.0128 -6.056 -0.0979
##   ..$ hidden 1 2 : num [1:5] -0.741 -1.465 -0.508 -0.076 -0.465
##   ..$ hidden 1 3 : num [1:5] -0.0182 -1.2624 -1.1739 -0.4083 -0.423
##   .. [list output truncated]

Interpretasi neuralweights():

Keluaran neuralweights() dibaca seperti pada model pertama. Struktur jaringan 4-20-3 menghasilkan jumlah bobot \((4+1) \times 20 + (20+1) \times 3 =\) 163, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn60_20)

Kelas Variabel Importance
setosa Petal.Width -1101,601
versicolor Petal.Width -2616,551
virginica Petal.Width 3723,957

Interpretasi olden():

Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Width, versicolor adalah Petal.Width, virginica adalah Petal.Width. Pembacaan ini bersifat eksploratif karena bobot jaringan bergantung pada bobot awal yang dibangkitkan secara acak.

4.4.3 Hidden Neuron = 30 (Skenario 60:40)

Model dibangun dengan size = 30, yaitu 30 neuron pada lapisan tersembunyi, menggunakan data training 60%.

# ---------- Hidden Neuron = 30 ----------
set.seed(917)
nn60_30 <- nnet.formula(form, size = 30, data = train60, trace = FALSE) #size=30 artinya ada 30 hidden neuron
nn60_30
## a 4-30-3 network with 243 weights
## inputs: Sepal.Length Sepal.Width Petal.Length Petal.Width 
## output(s): Species 
## options were - softmax modelling
# Hasil Prediksi
predict_class60_30 <- factor(predict(nn60_30, newdata = test60, type = "class"),
                           levels = levels(iris$Species))
predict_class60_30
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     setosa     setosa     setosa     setosa    
## [13] setosa     setosa     setosa     setosa     setosa     versicolor
## [19] versicolor versicolor versicolor versicolor versicolor versicolor
## [25] versicolor versicolor versicolor versicolor versicolor versicolor
## [31] versicolor versicolor versicolor versicolor versicolor versicolor
## [37] versicolor versicolor versicolor versicolor versicolor virginica 
## [43] virginica  virginica  virginica  virginica  versicolor virginica 
## [49] virginica  virginica  virginica  virginica  versicolor versicolor
## [55] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
#Classification table
tab60_30 <- table(Aktual = test60$Species, Prediksi = predict_class60_30)
tab60_30
##             Prediksi
## Aktual       setosa versicolor virginica
##   setosa         17          0         0
##   versicolor      0         24         0
##   virginica       0          3        16
#Classification rate
sum(diag(tab60_30))/nrow(test60)
## [1] 0.95
#Presisi tiap kelas
diag(tab60_30)/colSums(tab60_30)
##     setosa versicolor  virginica 
##  1.0000000  0.8888889  1.0000000

Interpretasi hasil prediksi, classification table, dan classification rate:

Keluaran model, classification table, classification rate, dan presisi dibaca dengan cara yang sama seperti pada model pertama. Model ini berarsitektur 4-30-3 dengan 243 bobot. Dari 60 data testing, 57 data diklasifikasikan dengan benar dan 3 data salah, sehingga classification rate (akurasi) sebesar 95,00%. Kesalahan klasifikasi yang terjadi: 3 data virginica diprediksi sebagai versicolor. Presisi untuk kelas setosa sebesar 100,00%, versicolor sebesar 88,89%, virginica sebesar 100,00%, dengan presisi rata-rata 96,30%. Akurasi sama dengan model dengan 20 hidden neuron (95,00%), sehingga penambahan neuron tidak mengubah kinerja pada data testing.

##Eksplorasi
# Plot Neural Network
plotnet(nn60_30)

Interpretasi plotnet():

Pada model ini terdapat 4 neuron masukan, 30 neuron tersembunyi, dan 3 neuron keluaran dengan total 243 bobot (termasuk bias). Setiap neuron pada suatu lapisan terhubung ke seluruh neuron pada lapisan berikutnya. Dengan neuron tersembunyi yang lebih banyak, jaringan tampak semakin rapat sehingga sulit dibaca secara visual, tetapi kapasitas model untuk mempelajari pola nonlinear bertambah.

#get the neural weights
bobot60_30 <- neuralweights(nn60_30)
str(bobot60_30, max.level = 2, list.len = 3)  # ringkasan; gunakan neuralweights(nn60_30) untuk melihat seluruh bobot
## List of 2
##  $ struct: num [1:3] 4 30 3
##  $ wts   :List of 33
##   ..$ hidden 1 1 : num [1:5] 0.366 -0.492 -1.202 -0.859 -0.209
##   ..$ hidden 1 2 : num [1:5] -0.5462 -0.0132 0.1335 1.8521 0.4062
##   ..$ hidden 1 3 : num [1:5] 0.0441 -1.0731 -0.8453 -0.6683 -0.5157
##   .. [list output truncated]

Interpretasi neuralweights():

Keluaran neuralweights() dibaca seperti pada model pertama. Struktur jaringan 4-30-3 menghasilkan jumlah bobot \((4+1) \times 30 + (30+1) \times 3 =\) 243, sesuai dengan keluaran model. Bobot yang bernilai besar (baik positif maupun negatif) menandakan koneksi yang kuat, sedangkan bobot mendekati nol menandakan koneksi yang hampir tidak berpengaruh.

# Plot the importance
olden(nn60_30)

Kelas Variabel Importance
setosa Petal.Width -1534,294
versicolor Petal.Width -2012,429
virginica Petal.Width 3512,516

Interpretasi olden():

Berdasarkan nilai importance Olden per kelas, variabel yang paling berpengaruh untuk kelas setosa adalah Petal.Width, versicolor adalah Petal.Width, virginica adalah Petal.Width. Pembacaan ini bersifat eksploratif karena bobot jaringan bergantung pada bobot awal yang dibangkitkan secara acak.

4.4.4 Ringkasan Skenario 60:40

rekap60 <- rekap(list(tab60_10, tab60_20, tab60_30), c(10, 20, 30))
kable(rekap60, digits = 4, align = "c",
      format.args = list(decimal.mark = ","),
      caption = "Tabel 8. Ringkasan Kinerja ANN Klasifikasi Skenario 60:40 pada Data Testing")
Tabel 8. Ringkasan Kinerja ANN Klasifikasi Skenario 60:40 pada Data Testing
Hidden Benar Salah Accuracy Precision Recall F1
10 57 3 0,95 0,9548 0,9510 0,9526
20 57 3 0,95 0,9548 0,9510 0,9526
30 57 3 0,95 0,9630 0,9474 0,9518

Interpretasi:

Berdasarkan Tabel 8, akurasi data testing pada skenario 60:40 untuk model dengan 10, 20, dan 30 hidden neuron berturut-turut adalah 95,00%, 95,00%, dan 95,00%, dengan jumlah kesalahan klasifikasi berturut-turut 3, 3, dan 3 dari 60 data. Model dengan akurasi tertinggi adalah model dengan 10 hidden neuron (presisi 95,48%, recall 95,10%, F1-score 95,26%). Terdapat 3 dari 3 model dengan akurasi yang sama; pada kondisi demikian model dengan hidden neuron lebih sedikit lebih diutamakan karena lebih sederhana dan berisiko overfitting lebih kecil.

4.5 Perbandingan Seluruh Model

Seluruh model dibandingkan menggunakan ukuran evaluasi pada data testing. Akurasi data training ditampilkan sebagai pembanding untuk mendeteksi indikasi overfitting, yaitu apabila akurasi training jauh lebih tinggi daripada akurasi testing.

nn_all <- list(nn80_10, nn80_20, nn80_30, nn60_10, nn60_20, nn60_30)
tr_all <- list(train80, train80, train80, train60, train60, train60)

acc_tr <- function(nn, tr) {
  mean(as.character(predict(nn, newdata = tr, type = "class")) == as.character(tr$Species))
}

metrik_df <- rbind(cbind(Skenario = "80:20", rekap80),
                   cbind(Skenario = "60:40", rekap60))
metrik_df$Model        <- paste0("Split ", metrik_df$Skenario, ", hidden=", metrik_df$Hidden)
metrik_df$Acc_Training <- mapply(acc_tr, nn_all, tr_all)
metrik_df$Selisih      <- metrik_df$Acc_Training - metrik_df$Accuracy
metrik_df <- metrik_df[, c("Model", "Skenario", "Hidden", "Acc_Training",
                           "Accuracy", "Precision", "Recall", "F1", "Selisih")]
rownames(metrik_df) <- NULL

kable(metrik_df, digits = 4, align = "c",
      format.args = list(decimal.mark = ","),
      caption = "Tabel 9. Perbandingan Seluruh Model ANN Klasifikasi (Accuracy, Precision, Recall, dan F1 pada Data Testing)")
Tabel 9. Perbandingan Seluruh Model ANN Klasifikasi (Accuracy, Precision, Recall, dan F1 pada Data Testing)
Model Skenario Hidden Acc_Training Accuracy Precision Recall F1 Selisih
Split 80:20, hidden=10 80:20 10 0,9917 1,00 1,0000 1,0000 1,0000 -0,0083
Split 80:20, hidden=20 80:20 20 1,0000 0,90 0,9231 0,9167 0,9089 0,1000
Split 80:20, hidden=30 80:20 30 1,0000 0,90 0,9117 0,9056 0,9074 0,1000
Split 60:40, hidden=10 60:40 10 1,0000 0,95 0,9548 0,9510 0,9526 0,0500
Split 60:40, hidden=20 60:40 20 1,0000 0,95 0,9548 0,9510 0,9526 0,0500
Split 60:40, hidden=30 60:40 30 1,0000 0,95 0,9630 0,9474 0,9518 0,0500

Interpretasi:

Berdasarkan Tabel 9, model terbaik secara keseluruhan adalah Split 80:20, hidden=10 dengan akurasi 100,00%, presisi 100,00%, recall 100,00%, dan F1-score 100,00%. Rata-rata akurasi testing pada skenario 80:20 sebesar 93,33% dan pada skenario 60:40 sebesar 95,00%. Skenario 60:40 memberikan akurasi rata-rata yang lebih tinggi; hal ini dapat terjadi karena data testing yang lebih banyak membuat penilaian lebih stabil, atau karena data iris relatif mudah dipisahkan sehingga data training yang lebih sedikit pun sudah cukup. Perbandingan antar skenario perlu dibaca hati-hati karena satu kesalahan klasifikasi mengubah akurasi sebesar 3,33 poin pada skenario 80:20 dan 1,67 poin pada skenario 60:40.

Berdasarkan jumlah hidden neuron, rata-rata akurasi testing untuk 10, 20, dan 30 hidden neuron berturut-turut adalah 97,50%, 92,50%, dan 92,50%. Perbedaan tersebut cukup terlihat, sehingga jumlah hidden neuron memengaruhi kinerja model. Selisih akurasi training dan testing terbesar adalah 10,00 poin pada model Split 80:20, hidden=20. Selisih yang cukup besar tersebut menjadi indikasi overfitting, yaitu model sangat baik pada data training tetapi lebih rendah pada data testing.

hidden_set <- c(10, 20, 30)
sk_set <- c("80:20", "60:40")
cols   <- c("steelblue", "darkorange")

plot(NULL, xlim = range(hidden_set),
     ylim = c(max(0, min(metrik_df$Accuracy, metrik_df$Acc_Training) - 0.03), 1),
     xlab = "Jumlah hidden neuron", ylab = "Akurasi", xaxt = "n",
     main = "Akurasi Training dan Testing menurut Hidden Neuron")
axis(1, at = hidden_set)
for (j in seq_along(sk_set)) {
  d <- metrik_df[metrik_df$Skenario == sk_set[j], ]
  lines(d$Hidden, d$Accuracy, type = "b", pch = 19, lwd = 2, col = cols[j])
  lines(d$Hidden, d$Acc_Training, type = "b", pch = 1, lwd = 2, lty = 2, col = cols[j])
}
legend("bottomleft",
       legend = c(paste("Testing", sk_set), paste("Training", sk_set)),
       col = c(cols, cols), lty = c(1, 1, 2, 2), pch = c(19, 19, 1, 1),
       lwd = 2, cex = 0.8)

Interpretasi:

Plot di atas membandingkan akurasi testing (garis tegas) dan akurasi training (garis putus-putus) pada masing-masing skenario. Jika garis training berada jauh di atas garis testing seiring bertambahnya hidden neuron, hal itu menunjukkan model mulai menghafal data training (overfitting); sebaliknya, garis yang saling berdekatan menunjukkan model mampu menggeneralisasi dengan baik. Garis yang relatif mendatar menunjukkan bahwa penambahan hidden neuron tidak banyak mengubah kinerja model, sejalan dengan pengamatan bahwa jumlah neuron memengaruhi kapasitas dan kestabilan pelatihan jaringan (Faturrahman dkk., 2025).

5.1 Kesimpulan

Artificial Neural Network (ANN) adalah model komputasi yang terinspirasi dari kerja otak manusia, terdiri atas lapisan masukan, lapisan tersembunyi, dan lapisan keluaran yang tersusun dari neuron-neuron yang saling terhubung melalui bobot. Setiap neuron memproses masukan dengan menjumlahkan hasil kali masukan dan bobot, menambahkan bias, lalu meneruskannya melalui fungsi aktivasi. ANN memiliki tiga komponen utama, yaitu arsitektur jaringan, algoritma pembelajaran, dan fungsi aktivasi. Arsitektur dibedakan menjadi Single Layer Perceptron untuk hubungan linear dan Multi-Layer Perceptron untuk hubungan nonlinear. Bobot jaringan dipelajari melalui algoritma backpropagation yang terdiri atas forward propagation, backward propagation, dan pembaruan bobot untuk mengurangi kesalahan prediksi. ANN dapat diimplementasikan menggunakan R melalui paket nnet untuk kasus regresi maupun klasifikasi dengan tahapan persiapan data, pembagian data training dan testing, pembentukan model, prediksi, dan evaluasi. Pada regresi, lapisan keluaran bersifat linear sehingga menghasilkan nilai numerik kontinu. Pada klasifikasi, lapisan keluaran menggunakan fungsi sigmoid untuk kasus biner dan softmax untuk kasus multikelas. Kinerja model dipengaruhi oleh pengaturan parameter seperti jumlah hidden neuron dan jumlah iterasi: jumlah neuron yang terlalu sedikit berisiko underfitting, sedangkan jumlah neuron yang terlalu banyak berisiko overfitting dan menambah beban komputasi.

Performa model ANN dievaluasi dengan membandingkan nilai aktual dan hasil prediksi pada data testing. Pada regresi digunakan MSE dan MAPE, di mana nilai yang semakin kecil menunjukkan model yang semakin baik. Pada klasifikasi digunakan confusion matrix beserta akurasi, presisi, recall, dan F1-score, di mana nilai yang semakin tinggi menunjukkan model yang semakin baik. Evaluasi sebaiknya tidak hanya melihat akurasi pada data testing, tetapi juga membandingkannya dengan akurasi pada data training untuk mendeteksi overfitting, serta dilengkapi eksplorasi arsitektur jaringan dan pentingnya variabel prediktor agar model dapat diinterpretasikan dengan jelas.

Berdasarkan hasil analisis ANN klasifikasi pada data Iris (150 pengamatan, empat prediktor numerik, dan tiga kelas Species) dengan 6 model dari kombinasi skenario 80:20 dan 60:40 serta 10, 20, dan 30 hidden neuron, diperoleh akurasi data testing berkisar antara 90,00% sampai 100,00%, dengan rata-rata 93,33% pada skenario 80:20 dan 95,00% pada skenario 60:40. Model terbaik adalah Split 80:20, hidden=10 dengan akurasi 100,00%, presisi 100,00%, recall 100,00%, dan F1-score 100,00%. Kelas setosa terklasifikasi sempurna pada seluruh model, sedangkan kesalahan klasifikasi, bila ada, terjadi pada kelas yang karakteristiknya lebih mirip. Jumlah hidden neuron terlihat memengaruhi kinerja model, dan terdapat indikasi overfitting pada selisih akurasi training dan testing. Dengan demikian, ANN klasifikasi mampu mengklasifikasikan jenis bunga iris dengan baik, dan pemilihan model sebaiknya mempertimbangkan akurasi data testing, selisihnya dengan data training, serta kesederhanaan arsitektur jaringan.

5.2 Saran

Pada praktikum Machine Learning berikutnya, disarankan agar praktikan lebih teliti dalam memasukkan dan mengolah data menggunakan RStudio, terutama dalam penggunaan sintaks serta interpretasi Artificial Neural Network. Pemilihan jumlah hidden neuron, batas iterasi (maxit), dan proporsi data training dan testing perlu diperhatikan agar model tidak mengalami underfitting maupun overfitting dan waktu komputasi tetap wajar. Untuk penelitian selanjutnya, perbandingan dapat diperluas dengan melakukan normalisasi data, mencoba nilai decay dan maxit yang berbeda, mengulang pelatihan dengan beberapa nilai seed atau menggunakan validasi silang agar hasil lebih stabil, serta membandingkannya dengan metode lain seperti Random Forest atau Boosting.

DAFTAR PUSTAKA

Anggraini, R., Hafiz, M., Lestari, W. A., & Pangesti, R. D. (2026). Penerapan artificial neural network (ANN) untuk klasifikasi jenis biji gandum. MATHunesa: Jurnal Ilmiah Matematika, 14(1), 542–548.

Faturrahman, B., Endrasmono, J., Ardiana, M., Khumaidi, A., Putra, Z. M. A., & Annisa, A. R. (2025). Klasifikasi profil roasting biji kopi menggunakan neural network. Jurnal Elkolind, 12(3), 397–408.

Fitriani, D. N., & Bahri, S. (2024). Prediksi tingkat obesitas menggunakan neural network: Pendekatan klasifikasi biner. PARAMETER: Jurnal Matematika, Statistika dan Terapannya, 3(1), 85–92.

Fransiska, H. (2026). Modul Praktikum Machine Learning. Universitas Bengkulu.

Supriyanto, Sunardi, & Riadi, I. (2022). Pengaruh nilai hidden layer dan learning rate terhadap kecepatan pelatihan jaringan syaraf tiruan backpropagation. JIKO (Jurnal Informatika dan Komputer), 6(1), 27–33.