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.
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.
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).
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.
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\% \]
ANN klasifikasi digunakan untuk memprediksi variabel respons berupa kategori. Berdasarkan jumlah kelasnya, ANN klasifikasi dibedakan menjadi dua jenis (Fransiska, 2026):
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.
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):
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.
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.
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).
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.
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 |
nnet
untuk membangun model ANN, NeuralNetTools untuk visualisasi
dan interpretasi jaringan, serta knitr untuk menampilkan
tabel.sample() dengan
set.seed(917).nnet() dengan rumus Species ~ . dan jumlah
hidden neuron sebesar 10, 20, dan 30 pada setiap skenario
sehingga terbentuk 6 model.predict() dengan type = "class".plotnet() dan
olden().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
## '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 ...
## 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
##
##
##
##
## 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.
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.
## [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
## [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
## [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")| 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.
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.
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")| 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.
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.
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")| 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.
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)")| 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).
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.
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.
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.