← Yazılar

Veri Bilimi Notları 8: Destek vektör regresyonu

Bu yazımda sizlere destek vektör regresyonu çalışırken aldığım notları paylaşacağım. Umarım faydalı olur.

·3 dk okuma·İlk olarak LinkedIn üzerinde yayımlandı

Bu yazının İngilizce sürümü de var

Veri Bilimi Notları 8: Destek vektör regresyonu

Bu seride bulunan önceki yazılarım:

Merhaba,

Bu yazımda sizlere destek vektör regresyonu çalışırken aldığım notları paylaşacağım. Umarım faydalı olur.

Destek Vektör Regresyonu’na Giriş

Lineer Regresyon ile Destek Vektör Regresyonu'nun Model Karşılaştırması

Destek vektör regresyonuna girmeden önce kısaca lineer regresyondan ve en küçük kareler yöntemini biraz hatırlayalım. İsterseniz daha detaylı okumak için lineer regresyon yazısına gidebilirsiniz. Fakat kısaca anlatmak gerekirse lineer regresyondaki en küçük kareler yöntemi, verilerin olduğu bir düzlemde öyle bir doğru çizmektir ki bu doğrunun tüm verilere olan uzaklıklarının kareleri toplamı, oluşturulabilecek diğer tüm doğruların tüm verilere uzaklıklarının karelerinin toplamından düşük olsun. Burada söyleyince biraz karışık oldu fakat dediğim gibi daha iyi anlamak için lineer regresyon yazısından faydalanabilirsiniz. Orada oldukça detaylı bir anlatımı bulunmakta.

Destek Vektör Regresyonu’nda ise durum bundan biraz farklı işlemektedir. Lineer regresyon ile destek vektör regresyonu’nun en temel farkı; lineer regresyon’da eğitim setindeki tüm verilerin dikkate alınması fakat destek vektör regresyonu’nda verilerin belirli bir parametreye göre dikkate alınmasıdır. Bu parametre ise, dikkate alınacak verilerin oluşturulacak regresyon doğrusundan en az epsilon uzaklıkta olması gerektiğidir. Yukarıda gördüğünüz gibi destek vektör regresyonu’nda epsilon uzaklıkta olmayan veriler dikkate alınmamıştır. Epsilon uzaklığının neye göre belirleneceği ise aşağıda formülize edilmiştir.

Destek Vektör Regresyonu Modelinin Formülize Edilmiş Hali

Peki neden bu algoritmaya destek vektör regresyonu denilmiştir? Bunun en temel sebebi ise, epsilon dışında kalan verilerin her birinin sistemin sıfır noktasından başlayan birer vektör oluşturmalarıdır. Bunu da aşağıda detaylı olarak görmekteyiz.

Bu yazıda da her yazıda olduğu gibi bir problem üzerinden ilerleyeceğiz. Problemimiz ise bir önceki ders olan polinomal regresyondaki problemin birebir aynısı olacak. Bu sayade iki regresyon türünün performans analizini de yapmış olacağız. Hemen hatırlayalım:

Pozisyon seviyelerine göre maaşların yer aldığı bir veri setine sahibiz. Bu veri seti üzerinden bir önceki dersimiz polinomal regresyon modelimizi ortaya çıkartmıştık. Bu dersimizde ise aynı problem üzerinden ilerleyip bu problemi (verisetini) destek vektör regresyonu üzerinden modellemeye çalışacağız.

Python uygulaması

# Kütüphaneleri ekliyoruz
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Verisetimizi ekliyoruz, eğitim ve test setlerine bölüyoruz
dataset = pd.read_csv('maas.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
print(X)
print(y)
y = y.reshape(len(y),1)
print(y)

# Özellik ölçeklendirme yapıyoruz
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)
print(X)
print(y)

# Verisetini SVR modeli olarak eğitiyoruz
from sklearn.svm import SVR
regressor = SVR(kernel = 'rbf')
regressor.fit(X, y)

# Yeni bir tahmin yapıyoruz.
sc_y.inverse_transform(regressor.predict(sc_X.transform([[6.5]])))

# SVR Sonuçlarını görselleştiriyoruz
plt.scatter(sc_X.inverse_transform(X), sc_y.inverse_transform(y), color = 'red')
plt.plot(sc_X.inverse_transform(X), sc_y.inverse_transform(regressor.predict(X)), color = 'blue')
plt.title('Truth or Bluff (SVR)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

# SVR Sonuçlarını daha detaylı bir biçimde gösteriyoruz.
X_grid = np.arange(min(sc_X.inverse_transform(X)), max(sc_X.inverse_transform(X)), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(sc_X.inverse_transform(X), sc_y.inverse_transform(y), color = 'red')
plt.plot(X_grid, sc_y.inverse_transform(regressor.predict(sc_X.transform(X_grid))), color = 'blue')
plt.title('Truth or Bluff (SVR)')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

Destek Vektör Regresyonu

Yukarıdaki sonuç grafiğine baktığımız zaman, destek vektör regresyonunun çok stabil olmayan değerler açısından çok faydalı olmadığını göreceğiz. Misal olarak yukarıda örnek verdiğimiz verisetine bir önceki dersimizde uyguladığımız polinomal regresyon çok daha verimli sonuçlar dönmektedir. İlerleyen derslerde regresyon türlerinin performans analizini çok daha detaylı olarak göreceğiz. Verisetlerinin ve problemlerin çeşitlerine göre regresyon modellerinin hangisini seçmemiz konusunda hasbihal edeceğiz.

EKSTRA

Destek Vektör Regresyonu’nun mucidi Vladimir Vapnik hakkında kısa bir araştırma yapabilir ve internette onun bu konuda ne çalışmalar yaptığını bulursanız sizin için daha kalıcı olacağını düşünüyorum. İlerleyen süreçte destek vektör makinelerini gördüğümüzde lineer olmayan destek vektör regresyonlarına da değineceğiz.

Konularla alakalı anlamadığınız yer olursa çekinmeden sorabilirsiniz. Buraya kadar okuduğunuz için çok teşekkür ederim.

Bir sonraki ders görüşmek üzere.

Esenlikle kalın…