Scratch ile Logistic Regression

Dipnot
KaVe
Published in
4 min readDec 27, 2020

--

Merhabalar, Scratch ile Makine Öğrenmesi serimizin ikinci yazısı olan Scratch ile Logistic Regression yazımıza hoş geldiniz. Bu yazıda sizlere birlikte Logistic Regressionu inceleyip, onu kodlayacağız.

Kullanacağımız verileri incelemek gerekirse buradaki bağlantıdan verilere ulaşabilirsiniz.

Verilerin devamına erişebilmek için lütfen Github sayfamızı ziyaret edin (Link aşağıda)
Verimizin kısa bir özeti ( df.describe() )

Logistic Regression

Logistic Regression algoritmasındaki temel amacımız, belirli özelliklere sahip bir elemanın hangi kategorik değişkene ait olabileceğinin oranını bulmaktır. Bu hesaplamayı yapabilmek için linear modele benzer bir şekilde “b0+ w1* x1 + w2* x2” bağlantısını kullanılır. Amacımız en iyi b0, w1 ve w2 değişkenlerini bulmaktır. Bu değerleri bulduktan sonra da yeni örneklerle alakalı tahminlerde bulunabiliriz.

Bu işlemleri yapmak için sırayla şu adımları takip ederiz:

  1. Loading the data set
  2. Feature scaling
  3. Model fitting
  4. Gradient descent
  5. Determination test and control data
  6. Prediction
  7. Measure the predict result

Min-Max Scaling

Min-Max Scaling yöntemine göre veriler 0 ve 1 aralığında ölçeklendirilir. Bu sayede Gradient Descent gibi hassas hesapların yapıldığı kısımlardaki verimliliğimizi artırabiliriz.

Kayıp Fonksiyonu

Kayıp fonksiyonu, modelimizin tahmin ettiği değerlerin gerçek değerlere yakınlığını ya da uzaklığını ölçen ölçüm birimidir. Bu kodda biz minimalize etmek üzere aşağıdaki logaritmik fonksiyonunu kullandık.

H(x) bizim tahmin ettiğimiz değerlerken y, train veri setindeki değerdir.

Üstteki fonksiyonun vektorize edilmiş halidir

Gradient Descent

Gradient Descent, kayıp fonksiyonumuzu minimalize edecek bir optimizasyon algoritmasıdır. Gradient Descent’daki temel amaç bizler için en iyi katsayıları bulmaktır. Bunu insan olarak elle belirleyemeyeceğimiz için bu işlemi bilgisayara yaptırtırız. Bilgisayar da gradyanınız tersi yönünde sürekli olarak küçük adımlar atarak sonunda yerel bir minimum ulaşır. Bu sayede katsayılara ulaşabiliriz.

Gradient descent algoritması için yapılması gerekilenler

  1. Başlangıç weight ‘i belirleme
  2. Her parametre için maliyet fonksiyonunun türevini al
  3. Weight ve Bias değerlerini güncelle

Gradient Descent’ı daha iyi anlayabilmek için Andrew Ng’nin videosunu izlemenizi tavsiye ederiz.

Gradient Descent (C1W2L04) — YouTube

Tahmin Aşaması

Fonksiyonumuz için Gradient Descent’le karar verdiğimiz en iyi b0 ve b1 değerlerini kullanıyoruz. Bir sonraki aşama olarak yukarıda gördüğünüz 1/1+e^-z fonksiyonumuzla, işlem yaptığımız örneğin hangi kategorik değişkene daha yakın olup olmadığına karar veriyoruz. Bu işlem sonucunda oluşacak (0–1 arasındaki) ihtimale göre hangi kategoride olacağına karar veriyoruz. Bu ayrıntılara kodda değineceğim. Okumaya devam ediniz 😊

Hadi Kod Yazalım

  1. Öncelikle gerekli kütüphaneleri import edelim

2. Verilerimizi yükleyip, onları ön işlemden geçirdikten sonra da modele veriyoruz 😊

Bu kod parçasında işleyeceğimiz kolonların seçilmesi, önişleme aşamasında tutulması ve modele sunulması aşamasını görüyoruz. Son olarak modelden gelen sonuçları karşılaştırarak başarı oranımızı ölçüyoruz.

3. Class yapımızı kodlayalım

Class yapımıza öncelikle __init__ fonksiyonundaki ön tanımlamaları yaparak başlıyoruz. Buradaki control_level değişkenine belki aşina değilsinizdir. Control_level, test veri setindeki örneklerin hangi kategoriye ait olma olasılığını hesapladıktan sonra tahminimizi yapmak için hangi bandın kullanılması gerektiğini bize söyler. Bunu örnekle açıklamak gerekirse, bizim control_level değerimiz 0.65 ise ve elimizde işlemler sonucu 0.60 olasılık değeri varsa, 0.65 > 0.60 olduğundan dolayı bu değişkenimizin 0 ve 1 kategorilerinden 0'a ait olduğunu söyleyebiliriz.

Bunları tanımladıktan sonraki Gradient Descent aşamasıyla en iyi parametreleri bulmaya çalıştık ardından bulduğumuz parametrelerle de sonucumuzu tahmin ettik.

Bu yazımızdan da bu kadar 😊

Kodun Tüm Halini Görmek İçin Github Sayfamı Ziyaret Ediniz: https://github.com/capogluuu/ml_scratch

TEŞEKKÜRLER

YARARLI KAYNAKLAR

  1. https://ml-cheatsheet.readthedocs.io/en/latest/logistic_regression.html
  2. https://math.stackexchange.com/questions/3287412/updating-weights-in-logistic-regression-using-gradient-descent
  3. https://www.youtube.com/playlist?list=PLNeKWBMsAzboR8vvhnlanxCNr2V7ITuxy (Andrew Ng Logistic Regression)

--

--