📈 Linear Regression & Gradient Descent

Model pertama dalam sejarah ML modern — dan gradient descent, mesin di balik hampir semua training.

🎬 Animasi: Gradient Descent: Turun Lembah Loss

Bola menggelinding ke dasar lembah loss. Seiring bobot (w) mendekati nilai optimal, garis regresi di panel kanan makin pas dengan data.

📌 1. Konsep: Cari Garis Terbaik

Linear regression mencari garis ŷ = w·x + b yang paling dekat dengan data. "Paling dekat" diukur dengan cost function (fungsi kerugian):

Model: ŷ = w·x + b Cost (MSE): J(w,b) = (1/n) · Σ (yᵢ - ŷᵢ)² = rata-rata kuadrat jarak vertikal titik ke garis Tujuan: cari (w, b) yang membuat J SEKECIL MUNGKIN. Kabar baiknya: J(w,b) berbentuk "mangkuk" (konveks) → ada satu titik terendah, dan kita bisa menemukannya dengan GRADIENT DESCENT.

📌 2. Gradient Descent: Turun Bukit Buta-Mata

Analogi: kamu di puncak bukit dalam kabut tebal. Cara turun? Rasakan kemiringan tanah di kakimu, lalu selangkah ke arah paling curam ke bawah. Ulangi sampai datar.

Langkah update (per parameter): w ← w - learning_rate · ∂J/∂w b ← b - learning_rate · ∂J/∂b Turunan MSE untuk regresi linear (bisa diturunkan manual): ∂J/∂w = (2/n) · Σ (ŷᵢ - yᵢ) · xᵢ ∂J/∂b = (2/n) · Σ (ŷᵢ - yᵢ) learning_rate (lr): terlalu BESAR → melompat-lompat melewati dasar, bahkan meledak (loss → inf) terlalu KECIL → turun sangat lambat praktik: 0.001 – 1.0, dan data DISKALAKAN dulu agar stabil
⚠️ Scaling itu krusial: jika x bernilai 0–1000, gradien w jadi sangat besar → GD tidak stabil. Standardisasi dulu = bukitnya "rata-rata".

📌 3. Contoh: Linear Regression 1-Dimensi

Output:

Coba ubah lr = 0.1 menjadi 10.0 — lihat loss meledak. Lalu 0.001 — lihat konvergensinya lambat.

📌 4. Contoh: Regresi Berganda (2 Fitur)

Prinsipnya sama, hanya ada lebih banyak bobot: ŷ = w1·x1 + w2·x2 + b. Target sebenarnya: y = 3·x1 - 2·x2 + 1.

Output:
💡 Linear regression juga bisa klasifikasi (tebak angka lalu bulatkan), tapi outputnya tidak terikat 0–1. Versi "diperbaiki" yang outputnya probabilitas dibahas di bab berikutnya: Logistic Regression.

🧠 Latihan

  1. Tambahkan print(losses[epoch]) tiap 50 epoch di contoh 1. Kapan loss berhenti turun secara signifikan?
  2. Buat data y = 0.5·x + 10 dengan noise besar (5.0). Apakah model masih menemukan slope ≈ 0.5? Kenapa R²-nya turun?
  3. Jelaskan dengan analogi bukit: apa yang terjadi jika learning rate (a) terlalu besar, (b) terlalu kecil, (c) pas?
  4. Di regresi berganda, buat target y = -1·x1 + 4·x2. Verifikasi model menemukan bobot yang benar.