Ad Code

Ticker

6/recent/ticker-posts

Linear Regression Series - Part 3/5: Error Function dan Gradient Descent

Error function merupakan sebuah metrik yang dapat kita gunakan untuk mengukur seberapa baik atau seberapa buruk kinerja dari sebuah model. Dalam literatur lain, error function juga seringkali disebut sebagai Loss Function atau Cost Function.

Lalu bagaimana cara untuk menghitung error function pada linear regression? Terdapat 2 cara yang paling umum digunakan, yaitu Absolute Error dan Square Error. Singkatnya, absolute error adalah  jumlah jarak vertikal dari garis ke titik dalam himpunan data, sedangkan square error adalah jumlah kuadrat dari jarak tersebut.

Kita akan belajar kedua jenis error function tadi secara lebih detail serta bagaimana cara menguranginya menggunakan metode Gradient Descent

Absolute Error

Absolute error adalah jumlah dari jarak antara titik data dengan garis. Kenapa disebut sebagai absolute error? Untuk menghitung masing-masing jarak, kita menggunakan selisih antara label aktual dengan label prediktif. Selisih ini dapat bernilai positif atau negatif, tergantung apakah titiknya berada di atas atau di bawah garis. Sedangkan nilai negatif tidak diperkenankan di sini. Bayangkan jika ada banyak titik yang berada jauh di bawah garis. Tentu nilai errornya akan semakin kecil, padahal gapnya sangat besar. Untuk itu, supaya angkanya selalu positif, kita mengambil nilai absolutnya.

Secara definisi, model linear regression yang baik adalah ketika garis yang dihasilkan dekat dengan titik data. Posisi titik data yang tidak beraturan, terkadang membuat garis dekat dengan suatu titik tertentu, namun jauh dengan titik yang lain. Absolute error membantu kita untuk membuat keputusan untuk memilih garis yang tepat. Garis yang kita inginkan adalah garis yang memiliki nilai absolute error paling kecil. Pada gambar di bawah, kita dapat melihat dua garis, dan absolute errornya diilustrasikan sebagai jumlah garis vertikal. Garis di sebelah kiri memiliki absolute error yang besar, sedangkan yang di sebelah kanan memiliki absolute error yang kecil. Dari keduanya, mana yang kita pilih? Kanan lah. Ya, kan? Ya. Kenapa? Errornya paling kecil.

Square Error

Square error mirip seperti absolute error. Namun, alih-alih mengambil nilai absolutnya, kita menggunakan hasil kuadratnya. Angka negatif jika dikuadratkan akan selalu menghasilkan nilai positif, itulah alasannya. Square error diilustrasikan pada gambar di bawah ini.

Mean absolute error dan (root) mean square error lebih umum digunakan pada kehidupan nyata

Penggunaan absolute error dan square error bertujuan untuk memberikan ilustrasi yang lebih jelas. Dalam praktiknya, mean absolute error dan mean square error lebih umum digunakan. Definisinya hampir sama, yang membedakan adalah, jika tadi kita menghitung jumlahnya, namun kali ini yang kita hitung adalah rata-ratanya (average). Kenapa ini lebih umum digunakan? Bayangkan jika kita ingin membandingkan error dari suatu model menggunakan 2 dataset yang berbeda, dataset pertama memiliki 10 titik data, dan dataset kedua memiliki 1 juta titik data. Jika kita menghitung error menggunakan hasil penjumlahan, maka error dataset kedua mungkin jauh lebih besar, karena kita menambahkan lebih banyak angka. Jika kita ingin membandingkan keduanya dengan benar dan bijaksana, maka akan lebih baik jika kita menggunakan rata-rata dalam perhitungan error untuk mendapatkan ukuran seberapa jauh garis dari setiap titik.

Error lain yang biasa digunakan adalah root mean square error, atau disingkat RMSE. Seperti namanya, error ini didefinisikan sebagai akar dari mean square error, digunakan untuk memberi kita gambaran yang lebih baik tentang berapa banyak kesalahan yang dibuat model dalam prediksi. Maksudnya bagaimana? Bayangkan skenario berikut: jika kita mencoba memprediksi harga rumah, dengan satuan harga, misalnya, Rupiah (Rp). Jika kita menggunakan square error atau mean square error, maka satuan harga yang dihasilkan adalah rupiah kuadrat, dan itu bukan satuan yang umum. Mana ada rupiah kuadrat, kan? Itulah mengapa kita mengambil akar kuadrat, sehingga kita  mendapatkan unit yang benar dan juga gagasan yang lebih akurat. Katakanlah, jika root mean square error adalah Rp1.000.000.000, maka kita dapat mengharapkan model membuat error sekitar Rp1.000.000.000 untuk prediksi apa pun yang kita buat.

Gradient Descent

Salah satu cara mengurangi error dengan efektif adalah menggunakan suatu metode yang mirip seperti apa yang kita lakukan saat menuruni gunung di pagi hari dengan kabut yang lebat, metode ini dinamakan gradient descent. Pada dasarnya, metode ini menggunakan konsep turunan yang akan memberi kita arah untuk memindahkan garis. Namun, pada postingan ini kita tidak belajar tentang kalkulus. Mungkin di lain kesempatan kita akan membahasnya secara terpisah untuk melihat seluruh derivasi algoritma ini menggunakan turunan dan gradient. Karena itu akan menjadi pembahasan yang sangat panjang, maka saya memutuskan untuk tidak menyertakannya pada blog series ini.

Sebelumnya kita telah belajar tentang error function yang memberitahu kita seberapa jauh letak garis dari titik data. Jika kita dapat mengurangi jumlah error ini sebanyak mungkin, maka kita akan menemukan garis yang paling cocok. Pada bidang matematika, proses ini biasa disebut dengan meminimalkan fungsi objektif. Jika teman-teman ingat, kita pernah mempelajarinya sewaktu kelas 12 di bangku SMA. Di sinilah peran gradient descent, suatu metode untuk meminimalkan fungsi.

Dalam hal ini, fungsi yang kita coba minimalkan adalah error (absolute error atau square error) dari model kita. Perlu diingat, gradient descent tidak selalu menemukan nilai minimum yang tepat dari fungsi tersebut, namun setidaknya dapat menemukan nilai yang sangat mendekati.

Bagaimana cara kerja gradient descent? Sama seperti saat kita menuruni gunung. Katakanlah kita berada di puncak gunung yang tinggi, yaitu gunung Mount Errorest (gunung fiktif, wkwk). Kita ingin turun, namun kabutnya sangat tebal sehingga jarak pandang kita tidak lebih dari 1 meter. Apa yang kita lakukan? Yang dapat kita lakukan adalah melihat sekeliling diri kita sendiri dan mencari tahu ke arah mana kita dapat mengambil satu langkah yang paling menurun.

Sumber gambar: Grokking Machine Learning

Ketika kita berhasil menemukan arah tersebut, kemungkinan besar kita telah turun meskipun dalam jumlah yang kecil. Yang perlu kita lakukan adalah mengulangi proses ini berkali-kali sampai kita (semoga) mencapai dasar.

Sumber gambar: Grokking Machine Learning


Kenapa ada "semoga"-nya? Karena dunia penuh dengan ketidakpastian kawan! Kita bisa saja mencapai dasar gunung, namun kita juga bisa mencapai lembah dan tidak punya tempat lain untuk bergerak turun.

Sebenarnya, jika kalian mengikuti blog series ini mulai dari awal, secara tidak sadar kita telah menerapkan gradient descent. Bagaimana bisa? Gradient descent bekerja dengan cara berikut:

  1. Mulailah dari suatu tempat di gunung.
  2. Temukan arah terbaik untuk mengambil satu langkah kecil.
  3. Ambil langkah kecil ini.
  4. Ulangi langkah 2 dan 3 berkali-kali.

Tidakkah teman-teman merasa familiar? Pada postingan sebelumnya, setelah membahas tentang metode Square Trick untuk memindahkan garis (Baca Selengkapnya), kita mendefinisikan algoritma linear regression dengan cara berikut:

  1. Mulai dengan baris acak.
  2. Temukan arah terbaik untuk menggerakkan garis sedikit menggunakan square trick.
  3. Pindahkan garis sedikit ke arah ini.
  4. Ulangi langkah 2 dan 3 berkali-kali.

Plotting error function dan mengetahui kapan harus berhenti

Di bagian ini, kita akan membuat plot error function menggunakan data pelatihan pada postingan sebelumnya. Kita akan menggunakan root mean square error (RMSE). Kode yang digunakan untuk menghitung RMSE adalah sebagai berikut

def rmse(labels, predictions):
   n = len(labels)
   differences = np.subtract(labels, predictions)
   return np.sqrt(1.0/n * (np.dot(differences, differences)))

DOT PRODUCT: Dalam kode di atas, untuk menghitung RMSE kita menggunakan dot product, yaitu sebuah cara mudah untuk mendapatkan jumlah perkalian suku-suku yang bersesuaian dalam dua vektor. Misalnya, perkalian titik (dot product) vektor (1, 2, 3) dan (4, 5, 6) adalah 1 · 4 + 2 · 5 + 3 · 6 = 32. Dengan begitu, jika kedua vektor identik, maka kita akan mendapatkan hasil kuadratnya.

Plot error pada model kita ditunjukkan pada gambar di bawah. Perhatikan bahwa error turun dengan cepat setelah sekitar 100 iterasi dan tidak terlalu banyak berubah setelahnya. Melalui plot ini juga kita dapat mengetahui bahwa kita dapat menjalankan algoritma ini hanya dengan 700 atau 800 epoch dan masih mendapatkan hasil yang serupa.


Secara umum, error function memberi kita informasi yang baik untuk memutuskan kapan harus berhenti menjalankan algoritma. Seringkali, keputusan ini didasarkan pada waktu dan daya komputasi yang tersedia. Namun, tolok ukur berguna lainnya yang biasanya digunakan dalam praktik adalah seperti berikut:

  • Ketika error function mencapai nilai tertentu yang telah kita tentukan sebelumnya
  • Ketika error function tidak berkurang dengan jumlah yang signifikan selama beberapa epoch

Pada bagian berikutnya kita akan belajar tentang penggunaan Linear Regression pada kehidupan nyata.

See you~