Polynomial Regression

Kategori: Machine Learning , 30 Kasım 2019 , JanFranco


Daha önceki yazılarımızda simple linear regression ve multiple linear regression yöntemlerini görmüştük. Simple linear regression y = ax + b denklemine, multiple linear regression y = ax1 + bx2 + ... + c denklemine dayanıyordu. İki yöntemin de ortak özelliği, çizilen, fit edilen doğrunun lineer bir doğru yani doğrusal bir doğru olmasıydı. Polynomial regression yönteminde ise adı üstünde bir polinom doğru çizilmekte, fit edilmekte. Yani ax^3 + bx^2 + cx + d gibi. Eğer veriler doğrusal artmak yerine, bir yerden sonra hızla artmakta ise bir polinomal doğrudan bahsedebiliriz.

Örnek üzerinden daha iyi anlayabiliriz, Python üzerinden Polynomial Regression yöntemini kullanalım. İlk olarak kütüphaneleri ve verileri alalım:


import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

df = pd.read_csv('salaries.csv')
Veriler özel olarak hazırlanmış verilerdir. Yani polynomial regression için uygun hale getirilmiştir. Kolon isimlerini değiştirelim, konsolda verisetini görelim. Daha sonra da verileri grafik üzerinden görelim:


df = df.rename(index=str, columns={"unvan": "Position", "Egitim Seviyesi": "Education Level", "maas": "Salary"})
print(df)

edLevel = df.iloc[:, [1]].values
salary = df.iloc[:, [2]].values

plt.plot(edLevel, salary)
plt.xlabel("Level")
plt.ylabel("Salaries")
plt.show()

>>

           Position  Education Level  Salary
0             Cayci                1    2250
1          Sekreter                2    2500
2  Uzman Yardimcisi                3    3000
3             Uzman                4    4000
4  Proje Yoneticisi                5    5500
5               Sef                6    7500
6             Mudur                7   10000
7          Direktor                8   15000
8           C-level                9   25000
9               CEO               10   50000
polynomial regression

Polynomial regression kullanmadan önce, linear regression kullanırsak ne olacağını görelim:


lReg = LinearRegression()
lReg.fit(edLevel, salary)
plt.scatter(edLevel, salary, color='red')
plt.plot(edLevel, lReg.predict(edLevel), color='blue')
plt.show()
polynomial regression

Görüldüğü gibi bir başarısızlık söz konusu. Polynomial regression için PolynomialFeatures sınıfından bir obje üretelim ve degree parametresini 2 verelim. 2 vererek, verileri ikinci dereceden bir dünyaya sokmak istediğimizi söylüyoruz. Örneğin elimizde 5 verisi var. Dereceyi iki yaparsak, PolynomialFeatures bize 1 - 5 - 25 değerlerini geri verecektir. 5^0, 5^1 ve 5^2. fit_transform methodu ile de verileri bu hale getirelim:


pRegF = PolynomialFeatures(degree=2)
edLevelPoly = pRegF.fit_transform(edLevel)
print(edLevelPoly)

>>

[[  1.   1.   1.]
 [  1.   2.   4.]
 [  1.   3.   9.]
 [  1.   4.  16.]
 [  1.   5.  25.]
 [  1.   6.  36.]
 [  1.   7.  49.]
 [  1.   8.  64.]
 [  1.   9.  81.]
 [  1.  10. 100.]]
PolynomialRegression için LinearRegression sınıfını kullanabiliriz ancak X değişkenine, polinomal verileri göndereceğiz:


pReg = LinearRegression()
pReg.fit(edLevelPoly, salary)
plt.scatter(edLevel, salary, color='red')
plt.plot(edLevel, pReg.predict(edLevelPoly), color='blue')
plt.show()
polynomial regression

Görüldüğü gibi daha başarılı bir doğru elde ettik. Dereceyi 4 yaparsak ne olur görelim:


pRegF = PolynomialFeatures(degree=4)
edLevelPoly = pRegF.fit_transform(edLevel)
print(edLevelPoly)
pReg.fit(edLevelPoly, salary)
plt.scatter(edLevel, salary, color='red')
plt.plot(edLevel, pReg.predict(edLevelPoly), color='blue')
plt.show()
polynomial regression

Bu yazımızda veriler çok az olduğundan train-test şeklinde ayırmadık. Direk olarak tüm veriyi gönderdik.


Sonraki Yazı: Support Vector Regression
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın