Bu yazı Makine Öğrenmesi Matematiği yazı dizisinin 10. bölümüdür. Hatırlamak isterseniz:

Bundan önceki üç bölümde çok değişkenli lineer regresyonun üç farklı algoritma ile gerçekleştirilmiş programlarını vermiştik. Bunlar sırayla:

  1. Toplu Dereceli Azalma
  2. Mini Toplu Dereceli Azalma
  3. Momentum Optimizasyonu ile Mini Toplu Dereceli Azalma

Şimdi bu üç farklı yöntemi birbirleriyle karşılaştırmak için Ev Fiyatı Tahminlerine bakalım.

  1. Toplu Dereceli Azalma
    • (‘Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ‘, 266244.76416209328)
    • (‘Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ‘, 259246.93573893074)
    • (‘Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ‘, 140624.41778667527)
  2. Mini Toplu Dereceli Azalma
    • (‘Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ‘, 265148.33582330809)
    • (‘Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ‘, 258838.15646738984)
    • (‘Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ‘, 131737.35983648058)
  3. Momentum Optimizasyonu ile Mini Toplu Dereceli Azalma
    • (‘Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ‘, 120004.4445724087)
    • (‘Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ‘, 110142.80850545214)
    • (‘Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ‘, -160942.42948644597)

Momentum Optimizasyonu ile Mini Toplu Dereceli Azalma’nın sonuçlarına baktığımızda modelimiz 1000 büyüklükteki 2 odalı evin fiyatını negatif tahmin etmiş. Bir evin fiyatının negatif olamayacağını biliyoruz. Buradan Momentum Optimizasyonu’nun bizim problemimiz için uygun olmadığı sonucuna ulaşabiliriz. Batch Gradient Descent ile Mini-Batch Gradient Descent’in tahminlerine baktığımızda modellerin birbirlerine çok yakın değerler tahmin ettiğini görüyoruz. Bu iki yöntemin modelimiz için iyi birer hipotez oluşturduğunu söyleyebiliriz. Öğrenme Oranı ve Devir Sayısını değiştirerek modellerin daha iyi çalışıp çalışmayacağını veya hangi dereceli azalma algoritmasının bu veri setine daha uygun olduğunu deneyip görebiliriz.

Şimdi hipotezimizi nasıl geliştirebileceğimize bir bakalım. Regresyon problemleri her zaman doğrusal olmak zorunda değildir. Yani çizdiğimiz eğri her zaman bir doğru denklemi ile ifade edilemeyebilir. Böyle durumlara polinomsal regresyon denir.

  • Polinomsal Regresyon: Veriler arasında doğrusal olmayan bir ilişki olduğunda,  hipotez fonksiyonumuzun davranışını veya eğrisini, kuadratik, kübik veya karekök fonksiyon (veya başka herhangi bir form) yaparak değiştirebiliriz.dd.png

Aşağıda bazı verilerin dağılım grafikleri verilmiş. Bu verilere baktığımızda doğrusal lineer regresyon uygulayabileceğimizi görebilirsiniz. Ancak Polinomsal regresyonun uygulanmış haline bakarsanız verilere daha iyi fit ettiğini (uyum sağladığını) görebilirsiniz.

Daha sonraki bölümlerde polinomsal regresyon ile ilgili örnekleri inceleyebiliriz. Şimdi Normal Denklemler ile devam edelim.

  • Normal Denklem: En küçük kareler maliyet fonksiyonuyla doğrusal regresyon problemine analitik bir çözüm olarak sunulmasıdır.

Dereceli Azalma, maliyeti en aza indirmenin bir yolunu sunar. Bunu yapmanın ikinci bir yolu da bu sefer minimizasyonu açıkça ve yinelemeli bir algoritmaya başvurmadan gerçekleştirmektir. Bu yöntemde, maliyeti teta’larına göre türevlerini açıkça alıp sıfıra eşitleyerek en aza indiririz. Normal denklemin bulunmasının ispatlarına ve matris gösterimlerine gelmeden önce normal denklemine bakalım. Normal denklem hakkında daha detaylı bilgi için buraya bakabilirsiniz.

normal equation ile ilgili görsel sonucu

Dereceli Azalma ile Normal Denklemi karşılaştıralım.

Dereceli Azalma:

  1. Öğrenme Oranı alfa değerini seçmeliyiz.
  2. Birçok iterasyon (devir,yineleme) yapmalıyız.
  3. Eğer özellik sayımız çok fazla ise dereceli azalma iyi çalışır.

Normal Denklem:

  1. Öğrenme Oranı alfa değerini seçmemize gerek yok.
  2. İterasyona gerek yok.
  3. Sadece hesap.png hesaplamalıyız.
  4. Eğer özellik sayısı çok fazla ise (özellik sayısı = n > 10000) yavaş çalışır.

Bir önceki bölümde kullandığımız ex1data2.txt veri setine şimdi normal denklem uygulayarak tetaları hesaplayıp, ev fiyatı tahminlerini gerçekleştirelim. Bir önceki bölümde yazdığımız ozellik_normalizasyonu.py’yi aynen kullanacağız.

# coding=utf-8
""" Normal Equation
 Normal Denklemler """

import pandas as pd
import numpy as np
from ozellik_normalizasyonu import ozellik_normalizasyonu
from termcolor import colored

u""" 1- Veri Setinin Yuklenmesi """
print colored('1- Veri Seti Yukleniyor ...', 'blue')
veri_seti = pd.read_csv('ex1data2.txt', delimiter=',', header=None, names=['Buyukluk', 'Oda', 'Fiyat'])
y = veri_seti['Fiyat'].as_matrix()
del veri_seti['Fiyat']
X = veri_seti.as_matrix()
m = len(y)

u""" 2- Ozellik Normalizasyonu """
print colored('2- Ozellik Normalizasyonu Yapiliyor ...', 'blue')
x, ort, std = ozellik_normalizasyonu(X)

u""" 3- Kesme Degerinin Eklenmesi """
print colored('3- Kesme Degeri Ekleniyor ...', 'blue')
X = np.ones(shape=(m, (len(X[0]) + 1)))
X[:, 1:(len(X[0]) + 1)] = x

u""" 4- Normal Denklem ile Tetalarin Hesaplanmasi """
print colored('4- Normal Denklem ile Tetalar Hesaplanıyor ...', 'blue')
teta = ((np.linalg.inv(X.T.dot(X))).dot(X.T)).dot(y)  # (X.T * X) ^-1 * X.T * Y
print colored(('Hesaplanan Teta : ', teta), 'green')

print colored('5- Hipotez', 'blue')
print colored("J(theta) = " + str(teta[0]) + " + " + str(teta[1]) + " x0 + " + str(
    teta[2]) + " x1", 'green')

print colored('6- Ev Fiyati Tahmini Yapalim ...', 'blue')
print colored(('Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ',
               np.dot([1, ((1650 - ort[0]) / std[0]), ((3 - ort[1]) / std[1])], teta)), 'green')
print colored(('Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ',
               np.dot([1, ((1604 - ort[0]) / std[0]), ((3 - ort[1]) / std[1])], teta)), 'green')
print colored(('Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ',
               np.dot([1, ((1000 - ort[0]) / std[0]), ((2 - ort[1]) / std[1])], teta)), 'green')

Burada bir önceki bölümde yazdıklarımızdan farklı olarak normal denklem hesaplama kısmı yer alıyor. Şimdi şurada ne yaptığımıza daha detaylı bakalım.

teta = ((np.linalg.inv(X.T.dot(X))).dot(X.T)).dot(y) # (X.T * X) ^-1 * X.T * Y 

XT.png

X_transpoz = X.T

XTX.png

xT_x = X.T.dot(X) # X.T * X 

XTX_1.png

Xt_X = np.linalg.inv(xT_x) # (X.T * X) ^-1 

XTX_1XT.png

 XtX_xT = Xt_X.dot(X.T) # (X.T * X) ^-1 * X.T 

XTX_1XTy.png

 teta = XtX_xT.dot(y) # (X.T * X) ^-1 * X.T * Y

Son olarak, Normal Denklem ile Dereceli Azalma’nin ev fiyatları tahminlerini karşılaştıralım.

Toplu Dereceli Azalma:

  • (‘Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ‘, 266244.76416209328)
  • (‘Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ‘, 259246.93573893074)
  • (‘Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ‘, 140624.41778667527)

Normal Denklem:

  • (‘Ev Buyuklugu 1650, 3 yatak odali ise Fiyati : ‘, 265638.57462691294)
  • (‘Ev Buyuklugu 1604, 3 yatak odali ise Fiyati : ‘, 258401.40584131121)
  • (‘Ev Buyuklugu 1000, 2 yatak odali ise Fiyati : ‘, 141780.19614667015)

Her iki yöntemde de birbirlerine ne kadar yakın tahminlerde bulunduğumuzu görebilirsiniz. Modellerimiz doğru çalışıyor diyebiliriz.

Devamı -> Makine Öğrenmesi Matematiği 11

Designed by Freepik