Neural Network Regression

Ketika Garis Lurus Saja Tidak Cukup

1. Bedanya dengan Regresi Linear Biasa?

Regresi Linear

Hanya bisa membuat Garis Lurus ($Y = aX + b$). Gagal jika datanya melengkung (kurva).

Neural Network

Bisa membuat Garis Melengkung/Kompleks berkat adanya Hidden Layer dan Non-Linear Activation Function (ReLU).

2. Arsitektur Jaringan

Untuk kasus Regresi (prediksi angka kontinu), arsitektur Neural Network memiliki ciri khusus:

  • Input Layer: Sesuai jumlah fitur ($X$).
  • Hidden Layer(s): Tempat "magic" terjadi. Menggunakan fungsi aktivasi ReLU ($f(x) = max(0, x)$).
  • Output Layer:
    • Hanya 1 Neuron (karena outputnya 1 angka prediksi).
    • Tanpa Aktivasi (Linear) atau aktivasi Linear. Agar bisa memprediksi angka berapa saja (bukan cuma 0-1 seperti klasifikasi).
  • Loss Function: Menggunakan MSE (Mean Squared Error). $$ MSE = \frac{1}{n} \sum (Y_{pred} - Y_{asli})^2 $$

3. Simulasi Hitungan Manual (Forward Pass)

Skenario:

Kita ingin memprediksi nilai ujian berdasarkan Jam Belajar ($X$). Kita punya model sederhana dengan 1 Hidden Layer (2 Neuron).

Input ($X$): 3.5 Jam
Langkah 1: Hidden Layer Calculation

Rumus per neuron: $ Z = (X \cdot W) + b $, lalu Aktivasi $A = ReLU(Z)$.

Neuron H1 (Bobot: $w_1 = 0.8$, Bias: $b_1 = 0.1$)

$Z_1 = (3.5 \times 0.8) + 0.1 = 2.8 + 0.1 = 2.9$
$A_1 = ReLU(2.9) = \mathbf{2.9}$

Neuron H2 (Bobot: $w_2 = -0.5$, Bias: $b_2 = 1.0$)

$Z_2 = (3.5 \times -0.5) + 1.0 = -1.75 + 1.0 = -0.75$
$A_2 = ReLU(-0.75) = \mathbf{0}$ (Karena negatif, jadi 0)

Langkah 2: Output Layer Calculation

Menggabungkan hasil dari Hidden Layer. (Bobot Output: $w_{out1} = 10$, $w_{out2} = 5$, Bias Output: $b_{out} = 5$)

$$ Y_{pred} = (A_1 \cdot w_{out1}) + (A_2 \cdot w_{out2}) + b_{out} $$
$$ Y_{pred} = (2.9 \times 10) + (0 \times 5) + 5 $$
$$ Y_{pred} = 29 + 0 + 5 = \mathbf{34} $$

Hasil Prediksi Awal: 34.
Jika nilai aslinya 75, maka Error (MSE) sangat besar: $(75 - 34)^2 = 1681$.
Di sinilah Backpropagation bekerja memutar balik proses untuk mengupdate bobot agar prediksi mendekati 75.

4. Implementasi Python (TensorFlow/Keras)

Membuat Neural Network Regression sangat mudah dengan Keras.

import tensorflow as tf
import numpy as np

# 1. Siapkan Data
X = np.array([1, 2, 3, 4, 5], dtype=float)
y = np.array([50, 60, 70, 80, 90], dtype=float)

# 2. Buat Model Arsitektur
model = tf.keras.Sequential([
    # Hidden Layer (Bisa menangkap pola kompleks)
    tf.keras.layers.Dense(units=10, activation='relu', input_shape=[1]),
    
    # Output Layer (1 Unit, Tanpa Aktivasi/Linear)
    # PENTING: Jangan pakai sigmoid/softmax di sini untuk regresi!
    tf.keras.layers.Dense(units=1)
])

# 3. Compile (Tentukan Optimizer & Loss)
model.compile(optimizer='adam', loss='mean_squared_error')

# 4. Training (Belajar)
model.fit(X, y, epochs=500)

# 5. Prediksi
hasil = model.predict([3.5])
print(f"Prediksi untuk 3.5 jam: {hasil[0][0]:.2f}")