Regresi Logistik: Dari Persamaan linear ke Fungsi Sigmoid


Kembali lagi ke euforia belajar deep learning. Pada artikel ini dan yang sebelumnya, saya berusaha menyajikan materinya agar mudah dimengerti. Saya menyajikan terlebih dahulu istilah-istilah atau paradigma apa saja yang asing, yang mana menurut saya inilah faktor utama kenapa kita terkadang sangat sulit untuk menyerap suatu materi atau bisa disebut bingung. Sedikit filosopi yang saya anut,

Bingung adalah ketika kita tidak tahu apa yang kita tidak tahu.

Kalau saya boleh mengibaratkan, bingung itu seperti level 2 dari tidak tahu, jadi untuk mengatasinya kita harus kenali dulu apa-apa saja istilah-istilah asing itu agar kita turun tingkat ke fase tidak tahu dan untuk mengatasi tidak tahu ini 'secara teori' mudah, hanya dengan membaca literatur.

Kita mulai dengan perkenalan, apa itu regresi logistik? Regresi logistik adalah regresi yang inputnya itu continous sedangkan outputnya categorical biner. Jadi kita punya 3 syarat disini, yaitu : variabel bebas yang continous, input yang categorical dan hanya punya 2 kategori (yes or no, 0 or 1). Untuk yang multi classification, fungsi sigmoid yang digunakan disini digantikan oleh fungsi softmax. Apa itu fungsi sigmoid? Kita akan bahas segera.

Jadi, yang kita ukur dari input continous pada regresi continous ini adalah probabilitas apakah suatu variabel continous akan masuk kategori '1' atau positive class atau kategori '0' negative class. Fungsi sigmoid adalah fungsi yang digunakan untuk mengukur probabilitas itu dan mempunyai kurva unik berbentuk "S". Jadi kita tidak memakai persamaan linear lagi? Masih dipakai, dia menjadi bagian penting yang memungkinkan untuk mengukur probabilitas dari fungsi sigmoid ini.


Bentuk persamaannya adalah


Pada grafik diatas, yang mana sumbu x menyatakan nilai z dan sumbu y menyatakan output hasil fungsi sigmoid, terlihat bahwa saat z = 0 probabilitasnya 50%. Sebelumnya perlu diketahui bahwa, probabilitas disini maksudnya adalah probabilitas kalau suatu variabel bebas outputnya adalah positive class. Jadi, kalau probabilitasnya dibawah 50% (z < 0) artinya class tersebut kemungkinan besar adalah negative class. Sekarang bagaimana cara mencari z? Seperti yang sudah dikatakan sebelumnya, persamaan linear yang kita pakai pada regresi linear masih dipakai disini yang mana dia menjelma menjadi z, sehingga kalau dirumuskan untuk regresi logistik dengan 1 variabel bebas (kita ambil contoh sederhana saja) maka


dimana:
s = koefisien (weight)
c = konstanta
x = variabel bebas

Sama seperti artikel sebelumnya, tujuan kita adalah mencari nilai koefisien dan konstanta. Untuk mencarinya, masih sama seperti sebelumnya, kita mengupdate nilai awal dari koefisien dan konstanta berdasarkan hasil dari turunan loss function. Pada regresi logistik, loss function yang kita pakai adalah log-likelihood function.


dimana:
yi = variabel terikat ke-i dari sampel
S = fungsi sigmoid
m = banyak sampel

loss function disini agak berbeda karena semakin besar nilai dari loss function ini maka semakin baik. Oleh karena itu, loss function ini kebanyakan ditaruh negatif pada ruas kanan sehingga disebut negative log-likelihood function. Kemudian kita cari turunannya untuk masing-masing koefisien dan konstanta.


Untuk turunan loss function terhadap koefisien dan


Untuk turunan loss function terhadap konstanta.

Garis besarnya sama seperti sebelumnya bahkan turunan loss functionnya juga hampir sama (pada prakteknya nanti, kita akan merata-ratakan nilai turunan ini sehingga nilainya akan di bagi m). Yosh, semua sudah siap, saatnya praktek.

Script bisa didapatkan di sini dan datanya di sini. Data yang kita pakai ini sebenarnya dari wikipedia tentang klasifikasi jam belajar yang perlu agar bisa lulus ujian. Kita jalankan scriptnya dan kita dapatkan

Klasifikasi pada data asli, sumbu x untuk jam belajar dan sumbu y untuk lulus/tidak dalam ujian. 0 untuk tidak lulus dan 1 untuk lulus.

Untuk data aslinya, dengan prediksi

Terlihat kalsifikasi jam belajar yang diprediksi bisa membuat lulus ujian mulai dari 2.75 jam belajar.

Terihat prediksi kita tidak sepenuhnya benar, ada beberapa prediksi yang salah jika kita bandingkan dengan data training kita. Sebagai pengingat dalam machine learning, data training adalah data yang kita pakai untuk 'melatih' program kita dalam memprediksi. Sebenarnya ini pertanda bagus, justru kalau prediksi kita sepenuhnya benar jika dibandingkan dengan data training maka ini akan sangat beresiko akan terjadinya overfitting. Kebanyakan kasus, terkadang pengklasifikasian yang simpel justru menghasilkan prediksi yang baik. Ini dikarenakan pada data training sering terdapat outliers. pembahasan tentang overfitting dan outliers diluar topik kali ini, yang pasti overfitting adalah tentang pengklasifikasian yang terlalu kompleks sehingga tidak mewakili 'pengklasifikasian yang sesungguhnya' sedangkan outliers itu tentang data-data input yang 'mengganggu', bisa dikarenakan salah input atau memang ada anomali yang terjadi saat pengambilan sampel input.

Kemudian kita perhatikan loss function (atau bukan) kita yang mana semakin besar nilainya semakin baik


dan benar, terlihat semakin banyak iterasi tingkat 'keyakinan' script kita terhadap prediksinya sendiri semakin tinggi.

Sekian pembahasan kita kali ini. Untuk pengklasifikasian multi class, akan dibahas selanjutnya yang mana akan memakai fungsi softmax. Penasaran? Stay tune.

referensi:
http://cs229.stanford.edu/notes/cs229-notes1.pdf, diakses pada 25 April 2017
https://en.wikipedia.org/wiki/Logistic_regression, diakses pada 26 April 2017

Komentar

Posting Komentar