Support Vector Regression

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


Support vector regression veya destek vektör aslında hem regression hem de classification için kullanılan bir algoritma. Bu yazımızda regression örneği yapacağız ancak algoritmanın iki tarafta da nasıl çalıştığından bahsedelim. Destek vektör algoritmasında amaç (regression için) verileri bir margin değeri içine almaktır. Başarmak istediğimiz sonuç margin değerini minimum tutmak ve maksimum veriyi margin aralığında tutmaktır. Classification kısmında ise amaç maksimum margin aralığını bulmaktır. Regression için bahsetmeye çalıştığımız olay:

support vector regression

Tek bir doğru değil 3 doğru çizmeye çalışıyoruz. Aslında bir doğru ve bir epsilon değeri bulmaya çalışıyoruz ve bu epsilon değerine göre iki doğru daha çiziliyor. Classification için de anlatmaya çalıştığımız olay:

support vector regression

Bu resimde sınırsız doğru örneğini daha iyi anlayabiliriz. Amaç burada da bir doğru çizmek ve maksimum margin aralığını bulmaktır. Dediğim gibi bu yazıda regression üzerinde duracağız. Resimlerdeki doğrular lineer yani doğrusal ancak bu bir zorunluluk değil. Python üzerinden de göreceğiz, doğruları polinomal da çizebiliriz. Lineer doğru denklemi y = ax + b olduğunu biliyoruz. Destek vektör algoritmasında ise y = a f(x) + b durumu mevcut. Buradaki f(x) bir fonksiyondur. Genellikle kernel olarak geçer. Python üzerinden göreceğiz, bir kaç kernel mevcut:

support vector regression

Resimde kırmızı çizilen grafik Gauss yöntemiyle elde edilmiştir. Son olarak algoritma aykırı verilere hassastır. Yani verileri mutlaka scale etmemiz gerekir. Preprocessingi anlattığımız yazıda scale işlemi yapmıştık. Burada da yapacağız. Başlayalım, kütüphaneleri ve veriyi alalım:


import numpy as np
import pandas as pd
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

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

>>

           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
Verileri -1 - 1 arasında scale edelim:


scaler = StandardScaler()
level = scaler.fit_transform(df.iloc[:, [1]].values)
salary = scaler.fit_transform(df.iloc[:, [2]].values)
Modeli kuralım, fit edelim, sonuçları görelim:


supportVectorReg = SVR(kernel='rbf')
supportVectorReg.fit(level, salary)

plt.scatter(level, salary)
plt.plot(level, supportVectorReg.predict(level))
plt.show()

supportVectorReg = SVR(kernel='linear')
supportVectorReg.fit(level, salary)

plt.scatter(level, salary)
plt.plot(level, supportVectorReg.predict(level))
plt.show()

supportVectorReg = SVR(kernel='poly')
supportVectorReg.fit(level, salary)

plt.scatter(level, salary)
plt.plot(level, supportVectorReg.predict(level))
plt.show()


support vector regression



support vector regression



support vector regression


Sonraki Yazı: Decision Tree Regression
Yorumlar

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