Scratch ile Basit Linear Regression

Dipnot
KaVe
Published in
3 min readDec 21, 2020

--

Merhabalar, Scratch ile Makine Öğrenmesi serimizin ilk yazısı olan Scracth ile Basit Linear Regression yazımıza hoş geldiniz. Kullanacağımız verileri incelemek gerekirse

Verilerimiz bunlardır.

Basit Linear Regression

Kodumuzun odak noktasındaki formül yukarıdaki formüldür. Formülü açıklamak gerekirse, “y” tahmin etmek istediğimiz değer B0 “Bias “ ise, değeri adı verilen sabit katsayı değeridir B1, inputlarımıza eşlik edecek katsayı değeridir. Algoritmayı yazarken amacımız bulabildiğimiz en iyi B0 ve B1 değerini bulmaktır.

“Koda bakmadan yazmak isteyenler için yapılacaklar listesi”

  1. Verinizi yükleyin
  2. Verinizi train ve test olarak iki parçaya ayırın
  3. Rastgele B0 ve B1 değerleri atıyoruz. (Bu kod için ben 0 değerini uygun gördüm.)
  4. Train fonksiyonumuzu çalıştırıyoruz.
  5. Train fonksiyonunda Gradient Descent algoritmasıyla optimum B0 ve B1 değerini buluyoruz.
  6. Bulduğumuz B0 ve B1 değerlerini kullanarak yeni değerleri tahmin ediyoruz.

Kayıp Fonksiyonumuz nedir?

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 Mean Squared Error (MSE) fonksiyonunu kullandık.

Mean Squared Error

Burada ȳᵢ tahmin ettiğimiz değer ve yi ise train datamızdaki tahmin etmek üzere elimizde tuttuğumuz değerlerdir.

Gradient Descent Nedir?

Gradient Descent kayıp fonksiyonumuzu minimalize edecek bir optimizasyon algoritmasıdır. Gradient Descent’ı daha iyi anlayabilmek için Uzak Çetin hocamızın anlattığı gradient descent serisini dinlemenizi şiddetle öneririm.

https://www.youtube.com/watch?v=rDaAXsJwnQI

https://www.youtube.com/watch?v=pNJKMO4qPZQ

https://www.youtube.com/watch?v=wLpA_9LSM6w

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

Kuralları güncellerken oradaki “a” değerinin dikkatinizi çektiğini düşünüyorum. Peki “a” değeri nedir? Learning Rate olarak adlandırılan bu katsayı, kuralları güncellerken işin hassasiyet seviyesini ölçen katsayıdır. Peki biz “a” katsayısını nasıl seçmeliyiz?

Yukarıda görebileceğiniz gibi, Learning Rate katsayısının işlevimizde önemli bir rolü vardır. Eğer çok yüksek seçersek “Too High” kısmındaki gibi kayıp fonksiyonunun minimum değerini bulamaz. Eğer çok düşük de seçersek fonksiyonumuzun fazla sayıda tekrar etmesi gerekecektir. Genel olarak kullanılan değerler [0.01 , 0.001, 0.02, 0.03, 0.005 ] bunlardır fakat çeşitli değerleri kullanmak fonksiyonunuz için uygun olabilir.

Kodumuza geçelim.

  1. Öncelikle kütüphanelerimizi import edelim

2. Verilerinizi Yükleyin

Kodumuzu açıklamak gerekirse; X değişkenimiz eğiteceğimiz datamız girdi kısmı olurken y değişkenimiz de eğitirken kayıp fonksiyonunda kullanılacak çıktı değerleridir. X1 değerimiz de tahmin edeceğimiz datamızın girdi kısmı iken X2 ise modelimizin MSE skorunu hesaplamak için elimizde bulundurduğumuz verilerdir. Verileri tanımladıktan sonra aşağıda vereceğimiz “class” yapısını “model” değişkenine atayıp işlemlerimizi “model” değişkenimizden yapabiliriz.

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

“Class” yapımız 3 farklı kısımdan oluşur. İlk kısım, ön tanımlama yapacağımız __init__ fonksiyonumuzdur. __init__ kısmında genel olarak kullanacağımız değişkenleri tanımlayarak başlıyoruz. İkinci kısımda öncelikle döngümüzün kaç defa dönecekse o kadar dönmesi için bir döngüye alıyoruz. Bir sonraki döngümüzde de gradient descent uygulamamız için ne kadar döneceğine karar veriyoruz. Bu döngüde her değişken için kayıp fonksiyonunun türevini alıyoruz. Türev değişkenlerimizle learning rate katsayımızı çarpıp mevcut weight ve bias değerlerinden çıkardığımızda weight ve bias değerlerimizi güncellemiş oluyoruz. Bir sonraki aşama olarak üçüncü adımda gradient descent ile belirlediğimiz en iyi weight ve bias değerlerini kullanarak yeni girdileri tahmin etmeye çalışacağız.

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

TEŞEKKÜRLER

--

--