Bu yazı Makine Öğrenmesi Matematiği yazı dizisinin 10. bölümüdür. Hatırlamak isterseniz:
- Makine Öğrenmesi Matematiği 1
- Makine Öğrenmesi Matematiği 2
- Makine Öğrenmesi Matematiği 3
- Makine Öğrenmesi Matematiği 4
- Makine Öğrenmesi Matematiği 5
- Makine Öğrenmesi Matematiği 6
- Makine Öğrenmesi Matematiği 7
- Makine Öğrenmesi Matematiği 8
- Makine Öğrenmesi Matematiği 9
Bundan önceki üç bölümde çok değişkenli lineer regresyonun üç farklı algoritma ile gerçekleştirilmiş programlarını vermiştik. Bunlar sırayla:
- Toplu Dereceli Azalma
- Mini Toplu Dereceli Azalma
- Momentum Optimizasyonu ile Mini Toplu Dereceli Azalma
Şimdi bu üç farklı yöntemi birbirleriyle karşılaştırmak için Ev Fiyatı Tahminlerine bakalı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)
- 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)
- 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.
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.
Dereceli Azalma ile Normal Denklemi karşılaştıralım.
Dereceli Azalma:
- Öğrenme Oranı alfa değerini seçmeliyiz.
- Birçok iterasyon (devir,yineleme) yapmalıyız.
- Eğer özellik sayımız çok fazla ise dereceli azalma iyi çalışır.
Normal Denklem:
- Öğrenme Oranı alfa değerini seçmemize gerek yok.
- İterasyona gerek yok.
- Sadece
hesaplamalıyız.
- 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
X_transpoz = X.T
xT_x = X.T.dot(X) # X.T * X
Xt_X = np.linalg.inv(xT_x) # (X.T * X) ^-1
XtX_xT = Xt_X.dot(X.T) # (X.T * X) ^-1 * X.T
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.