Machine Learning: Mengenal Logistic Regression

vincentmichael089
7 min readMay 8, 2019

--

Sabtu, 4 Mei 2019 saya dan kelompok mendapat tugas mempresentasikan klasifikasi dengan menggunakan Logistic Regression di kelas Pembelajaran Mesin. Berikut adalah materi tentang Logistic Regression yang kami presentasikan . Terdapat 2 poin penting yang dibahas pada story kali ini, yaitu:

  1. penentuan koefisien dengan Maximum Likelihood+R-squared (R²),
  2. penentuan koefisien dengan Gradient Descent
  3. Data Preparation pada Logistic Regression.

*Untuk koding Logistic Regression dari Scratch dapat dibaca disini.

Masalah Pada Linear Regression

Sebelum kita mempelajari Logistic Regression, alangkah baiknya kita mengetahui Linear Regression terlebih dahulu.

Apasih Linear Regression itu? Linear Regression adalah suatu cara permodelan masalah keterhubungan antara suatu variabel independen terhadap variabel dependen. Contohnya adalah menentukan apakah suatu nilai ukuran tumor tertentu termasuk kedalam tumor ganas atau tidak.

Contoh klasifikasi dengan Linear Regression

Dari grafik diatas, terlihat bahwa garis yang dibentuk dari Linear Regression mampu mengklasifikasi masalah tumor dengan baik. Namun, ada masalah yang muncul ketika kita memiliki Outlier Data. Perhatikan gambar berikut!

Terlihat bahwa adanya Outlier Data membuat garis Linear Regression tidak lagi mengklasifikasi data dengan baik. 2 Data yang sebelumnya terklasifikasi sebagai Tumor ganas berpindah menjadi Tumor tidak ganas hanya karena 1 data baru.

Lalu bagaimana kita dapat membentuk suatu garis yang dapat membagi data kedalam 2 kelas secara baik?

Solusi: Logistic Regression

Pada kasus klasifikasi Tumor Ganas, terlihat bahwa tidak terjadi kegagalan klasifikasi terhadap 2 data kelas positif seperti yang terjadi pada model Linear Regression, sehingga dapat disimpulkan untuk kasus klasifikasi ini penggunaan Logistic Regression adalah lebih baik jika dibandingkan dengan Linear Regression, karena mampu menangani Outlier Data.

Apa itu Logistic Regression?

Logistic Regression adalah sebuah algoritma klasifikasi untuk mencari hubungan antara fitur (input) diskrit/kontinu dengan probabilitas hasil output diskrit tertentu.

Tipe-tipe Logistic Regression

  1. Binary Logistic Regression : Adalah Logistic Regression yang hanya memiliki 2 output saja (mengklasifikasi kedalam 2 kelas berbeda). Contoh: Positif-Negatif, Obesitas-Tidak Obesitas.
  2. Multinomial Logistic Regression : Adalah Logistic Regression yang memiliki 2 output atau lebih (mengklasifikasi kedalam 2 kelas berbeda). Contohnya kelas Sentiment Analysis kalimat positif, negatif, dan netral.
  3. Ordinal Logistic Regression : Adalah Logistic Regression yang memiliki 2 output atau lebih dengan memperhatikan urutan. (mengklasifikasi kedalam 2 kelas berbeda dengan memperhatikan urutan). Contohnya adalah membagi kelas mahasiswa dalam range Index Prestasi Kumulatif 1.xx, 2.xx, 3.xx, dan 4.00.

Pada story ini kita akan fokus membahas Logistic Regression tipe 1: Binary Logistic Regression

Logistic Function

Logistic Function adalah suatu fungsi yang dibentuk dengan menyamakan nilai Y pada Linear Function dengan nilai Y pada Sigmoid Function. Tujuan dari Logistic Function adalah merepresentasikan data-data yang kita miliki kedalam bentuk fungsi Sigmoid.

Kita dapat membentuk Logistic Function dengan melakukan langkah-langkah berikut:

  1. Melakukan opersai Invers pada Sigmoid Function, sehingga fungsi sigmoid berubah bentuk menjadi Y = ln(p/(1-p).
  2. Setarakan dengan fungsi Linear Y = b0+b1*X sehingga kita dapatkan persamaan ln(p/(1-p) = b0+b1*X.
  3. Ubah persamaan ln(p/(1-p) = b0+b1*X kedalam bentuk logaritmik sehingga didapatkan persamaan P = 1/(1+e^-(b0+b1*X))

Penentuan Koefisien Logistic Function : Maximum Likelihood + R-Squared (R²)

Maximum Likelihood

Maximum Likelihood adalah cara untuk menentukan posisi Sigmoid yang menjadi model terbaik yang dapat dibentuk dari data-data yang tersedia. Bagaimana caranya? perhatikan persamaan fungsi Logistik berikut:

dari fungsi diatas kita ketahui bahwa yang mempengaruhi posisi fungsi Sigmoid adalah persamaan b0+b1*X, artinya perubahan garis (merubah nilai koefisien b0 dan b1)akan mempengaruhi posisi dan nilai Likelihood dari Logistic Function.

Langkah sederhananya adalah sebagai berikut:

  1. Tentukan suatu persamaan garis sembarang, ubah kedalam bentuk Sigmoid, dan hitung nilai Likelihood-nya
  2. Lakukan Rotasi (bisa disertai translasi juga) pada persamaan garis sebelumnya, kemudian ubah kembali kedalam bentuk Sigmoid, dan hitung nilai Likelihood garis baru.
  3. Ulangi terus langkah kedua hingga mendapatkan nilai Likelihood tertinggi. Garis dengan Likelihood tertinggi berarti mengisyaratkan bahwa garis yang digunakan menentukan posisi Sigmoid yang merepresentasikan klasifikasi data dengan baik.

Nilai Likelihood dari setiap garis dapat dicari dengan formula berikut:

Catatan penting! pada formula diatas terdapat “1-P(datanegatif)” karena likelihood menghitung kemiripan peluang terhadap kelas positif (dalam konteks ini kelas 1 positif dan kelas 0 negatif), sehingga representasi positif dari “P(datanegatif)” adalah “1-P(datanegatif)”.

Untuk lebih jelas tentang Maximum Likelihood, kunjungi link Github yang tersedia di akhir story dan membuka PDF slide presentasi yang tersedia disana.

R-Squared (R²)

R-Squared adalah cara yang digunakan untuk mengetahui apakah Logistic Function dengan nilai Maximum Likelihood dapat merepresentasikan data dengan baik (baik jika R-squared = 1, Buruk jika R-squared = 0).

Terdapat 2 parameter penting yang dibutuhkan dalam mencari nilai R-Squared, yaitu Maximum Likelihood dan Badfit Likelihood.

Untuk parameter Badfit Likelihood, garis lurus didapat dengan persamaan:

Y = banyak data kelas 1 / banyak data keseluruhan

sehingga kita dapat mencari nilai Badfit Likelihood dengan cara:

Badfit Likelihood = Log(Y) + Log(Y) + …. + Log(1-Y) + Log(1-Y)

Dari Maximum Likelihood dan Badfit Likelihood dapat dibentuk formula R-Squared (R²) sebagai berikut:

Logistic Regression dengan Gradient Descent

Terdapat pendekatan lain untuk menghasilkan Logistic Function yang dapat mengklasifikasikan data dengan baik, yaitu dengan menggunakan metode Gradient Descent. Metode Gradient Descent bekerja dengan cara mengupdate bobot (b0 dan b1)dengan meminimalkan nilai Loss. Nilai Loss yang semakin kecil menandakan semakin baik Logistic Function dalam merepresentasikan data. Nilai Loss pada Logistic Regression dapat diketahui menggunakan rumus berikut:

Pembaharuan bobot dengan Gradient Descent dilakukan dengan menggunakan rumus berikut:

Perubahan bobot (dLoss/dB) dapat dijabarkan kembali dengan bentuk turunan rantai menjadi bentuk berikut:

Buat yang bingung bagaimana turunan rantainya menjadi seperti itu, perhatikan penjelasan berikut:

  1. Untuk mendapatkan nilai Loss, diperlukan yprediksi (perhatikan rumus Loss), dimana yprediksi adalah hasil / output dari Logistic Function.
  2. Untuk mendapatkan nilai output dari Logistic Function, diperlukan hasil dari Linear Function. Periksa kembali ke atas pada persamaan Logistic Function, b0+b1*X adalah Linear Function yang disubstitusi kedalam Logistic Function 1/(1+e^-x)).
  3. Untuk mendapatkan nilai Linear Function, dibutuhkan Bobot, dalam hal ini b0 dan b1.

Dari 3 poin dapat ditarik sebuah rantai dari Loss menuju Bobot (dLoss/dB). (semoga cukup mudah untuk dipahami pada bagian turunan berantai ini).

Nah, kembali ke penjabaran dLoss/dB, masing-masing dLoss/dLogisticFunction, dLogisticFunction/dLinearFunction, dan dLinearFunction/dB, jika diturunkan akan menjadi berikut:

(Hasil LogisticFunction itu Yprediksi, jadi jangan sampai bingung karena penamaannya saja yang berbeda)

Substitusikan turunan warna-warni diatas kedalam turunan rantai dLoss/dB, nantinya hasil perkaliannya akan menghasilkan persamaan dibawah. dLoss/dB yang sudah dapat dicari nilainya tinggal kalian gunakan untuk update bobot :D

Data Preparation di Logistic Regression

Proses pengolahan data awal sangat mempengaruhi tingkat kebaikan model yang akan dihasilkan. Menurut website machinelearningmastery.com, ada beberapa hal yang perlu kita perhatikan agar mendapat model Logistic Regression yang baik. Hal-hal tersebut sebagai berikut:

1. Binary Output Variable

Logistic Regression ditujukan untuk mengklasifikasi data kedalam 2 kelas (direpresentasikan dengan 0 dan 1)

2. Remove Noise

Pertimbangkan menghapus Outlier data dan atau data yang terindikasi memiliki klasifikasi yang salah dari Training Data

3. Gaussian Distribution

Seperti yang kita lihat pada bagian Maximum Likelihood, fungsi linear dari input mempengaruhi hasil model Logistic Function. Oleh karena itu melakukan Transformasi dan Normalisasi pada Training Data yang kita miliki dapat membuat hubungan Linear antara input dan output menjadi lebih baik

4. Remove Correlated Input

Memiliki input-input yang saling berkorelasi erat dapat membuat model yang dihasilkan mengalami Overfitting. Oleh karena itu disarankan untuk memilih dan menyeleksi input-input yang akan digunakan.

5. Fail to Converge

Ada kemungkikan dimana model Maximum Likelihood tidak dapat menghasilkan model yang konvergen dengan Training Data. Masalah ini mungkin terjadi karena terlalu banyak input yang saling berkorelasi ataupun ketika jumlah data kelas yang kita miliki tidak berimbang (misal: terlalu banyak data dengan label kelas 1 pada Training Data)

Penutup

Demikian story tentang Logistic Regression, semoga story kali ini cukup membantu mengerti proses-proses dan ilmu yang berkaitan dengan Logistic Regression. Terima kasih telah meluangkan waktu untuk membaca :D

(Jangan lupa kunjungi Github Logistic Regression dengan mengunjungi https://github.com/vincentmichael089/ML-Logistic-Regression. Repository berisi PDF slide presentasi tentang Logistic Regression dan Python Notebooks menyelesaikan masalah klasifikasi dengan Logistic Regression library SciKit-Learn)

--

--

No responses yet