Basit Lineer Regresyon Ve Gradient Descent
Öncelikle Lineer Regresyonun tanımını kısaca yapacak olursak. İki veya daha fazla değişken arasındaki ilişkinin bir doğru ile gösterilmesine Lineer Regresyon denir. Jupyter Notebook üzerinden anlatımımıza devam edelim.
Kütüphanelerimizi tanımlayalım.
Kendimiz veri oluşturalım ve bu verileri 2 boyutlu düzlemde inceleyelim.
Değişkenlerimizin değerleri koordinat düzleminde bu şekilde dağılmış gözüküyor.
Bu değişkenler için en iyi regresyon doğrusunu çizeceğiz ve bu regresyon doğrusu üzerinden tahminleme işlemini gerçekleştireceğiz.
Peki regresyon doğrusunun iyi olup olmadığını neye göre belirleyeceğiz? Öncelikle bizim amacımız bu noktalara göre en iyi doğruyu çekmek. Bu doğruyu çekerken bizim için önemli olan şey bu doğrunun eğimidir.
Yukarıdaki formül bilindiği üzere basit bir doğru formülüdür. Bu formüldeki eğim w’dur. Bundan dolayı bizim amacımız bu doğruları en iyi kesecek w eğimli doğruyu bulmaktır. Yani w’nun en iyi halini bulmaktır.
Bunun için
formülü ile verdiğimiz ve değerlerine karşılık gelen değerlere ulaşıyoruz. Formüldeki m değeri veri sayımız. x(i) i’ninci x değeri, y(i) ise i’ninci y değeridir.
Bu formülü python üzerinde yazarak gerçekleştirelim ve J(w) değerlerini elde edelim.
Metodumuzu yukarıda tanımladık şimdi kullanmak istediğimiz w değerlerini yollayalım ve sonuçları inceleyelim.
Çıkan değerleri bir grafik üzerinden görüntüleyelim.
Bu formüle dayanarak bardağa benzeyen bir grafik çizdik ve min max J(w) değerlerine bir çizgi koyduk.
Peki bunlar ne anlama geliyor. Biz verdiğimiz w değerlerini bir de değişkenlerimiz üzerinde bir doğru olarak görelim bakalım nasıl görünüyor.
Grafikte de görüldüğü üzere en düşün J(w) değerine sahip olan w eğimli doğrunun grafiği en iyi doğruyu göstermiş oluyor.
Yani Kısacası Loss Fonksiyonu sonucunda hesaplanan J(w) değeri en küçük olan w değeri en iyi doğruyu verir. Tabi ki bu noktada overfitting’e dikkat etmek gerekmektedir. Her zaman J(w) en küçük olan değer en iyi sonuçları göstermez.
Peki biz en iyi w değerini bulmak için sürekli elle w değerlerini deneyerek mi bulacağız? Tabi ki hayır!
Gradient Descent (Gradyan Azaltma)
Belirlediğimiz learning rate’ler eşliğinde w değerini optimize etmemizi sağlar.
Bu tabloyu lineer regresyon tarafında çizdirmiştik. Genellikle J(w) değeri en düşük olan w değeri bize en iyi sonucu vermekteydi. Bunun için resimdeki kırmızı yerler azaltılarak minimize edilmeye çalışılmaktadır. Bu işlemi nasıl yapıyoruz?
Bu formülün açılmış hali aşağıdaki gibidir.
Gradyan azalma yöntemi bu formüllere dayanmaktadır. Bu formülde önemli olan hususlardan bazılarını söylemek isterim.
- w ve b hesaplamalarda eşzamanlı çalışır. Yani hesaplanan yeni w değeri b değeri hesaplamasında kullanılmaz da eski w değeri kullanılır.
- Learning rate değeri çok az olursa baby step dediğimiz küçük adımlar ile optimize edilir. Bu istemediğimiz bir durumdur çünkü gradyan azaltma işlemini gereksiz uzatır. Eğer learning rate değerini çok büyük yaparsak bu sefer de çok büyük adımlar attığı için optimize edilemeyecek hale gelmektedir. Bunun için uygun learning rate değerini seçmek önemlidir.
Python Uygulama
Öncelikle gradyan hesaplama fonksyonumuzu yukarıdaki formüle dayanarak yazalım.
Şimdi üsteki formülün hepsini yani gradyan azaltma fonksiyonunu yazalım.
Yukarıdaki metodumuzu çağıralım ve sonucumuzu gözlemleyelim.
Gradyan Azaltma işleminin ardından görüldüğü üzere git gide J(w) değerimiz düşmüş yani optimizasyon işlemi gerçekleşmiştir.
Okuduğunuz için çok teşekkür ediyorum. Tüm İslam aleminin Kurban Bayramı’nı kutluyorum.
Referans
- https://medium.com/deep-learning-turkiye/gradient-descent-nedir-3ec6afcb9900
- https://ml-cheatsheet.readthedocs.io/en/latest/gradient_descent.html#:~:text=Gradient%20descent%20is%20an%20optimization,the%20parameters%20of%20our%20model.
- https://medium.com/deep-learning-turkiye/her-%C5%9Feyiyle-lineer-regresyon-makine-%C3%B6%C4%9Frenmesi-serisi-1-1ee2aec10b74
- https://www.coursera.org/learn/machine-learning