Ana içeriğe atla

Python - SVR (Destek Vektör Regresyonu)

Destek vektör algoritması ilk başta sınıflandırma için çıkmış bir algoritma olmasına rağmen regresyon için de kullanılmaktadır. Sınıflandırma işlemleri için SVM yani Support Vector Machine kullanılırken regresyon için de Support Vector Regression kullanılmaktadır.


Amaç, bir marjın aralığına maksimum noktayı en küçük hata ile alabilecek şekilde doğru ya da eğriyi belirlemektir. Yani, Destek vektör regresyonu uyguladığımızda, çizeceğimiz aralığın maksimum noktayı içerisine almasını sağlamaktır. Burada doğrusal ve doğrusal olmayan olarak iki türlü SVR metodu bulunmaktadır.


Doğrusal SVR

İlk olarak doğrusal SVR’yi ele alacağım. İki analizde de daha önce kullandığım “Hitters” veri setini kullanacağım. Bunun için verisetini jupyter notebooka getirdikten sonra ilk olarak boş değerleri analizden çıkarıyorum. Daha sonra string değişkenler için one hot coding yapıyorum. Salary’i bağımlı değişken diğer numerik değişkenleri de bağımsız değişken olarak tanımlıyorum. Dönüştürme işlemi yaptığım string değişkenleri de bağımsız değişkenlere dahil ettikten sonra veri setimi %25 test %75 train olacak şekilde ayırıp model kurma aşamasına geçiyorum.


Modeli kurarken sklearn kütüphanesinden SVR modülünü çağırıyorum. İlk olarak doğrusal svr inceleyeceğim için kernel kısmına “linear” yazıyorum ve modeli fit ettikten sonra çalıştırıyorum. Doğrusal SVR modelini doğrusal regresyon modeli ile karşılaştırmak için svr’nin de denklemini yazıyorum. Denklemdeki model doğru çalışmış mı diye ilk değer olan 91 için manuel hesaplama yapıyorum ve modelin bulduğu 403 değerini görüyorum.


Modeli kurduktan sonra svr modelimi görselleştiriyorum.


Şimdi ise aynı veri üzerinden doğrusal regresyon modeli kuracağım. Karşılaştırma yapabilmek için yine ilk değer olan 91 üzerinden hesaplama yaptığımda bu sefer tahmin daha yüksek bir sayı olan 461 çıkıyor. Yani svr 403 hesaplamışken doğrusal regresyon 461 hesapladı.


Bu farklılığı yorumlayabilmek için iki modeli de tek bir grafik altında görselleştirip inceliyorum. Grafikte yeşil çizgi doğrusal regresyonu, kırmızı çizgi ise svr’ı temsil ediyor. Grafiğe ilk baktığımda doğrusal regresyonun daha yukarıda olduğunu görüyorum. Doğrusal regresyon aykırı değerlere (outliers) daha hassas olduğu için grafiğin üstünde yer alan aykırı değerler doğrusal regresyon eğrisini yukarı çekiyor bunun nedeni ise doğrusal regresyonun EKK’yı (en küçük kareler toplamı) baz alması. Dolayısıyla, doğrusal regresyon aykırı değerlere karşı oldukça hassas iken svr daha az hassas olduğu için her zaman eğrisi daha aşağıda yer alıyor.


Şimdi tahmin kısmına geçebilirim. Test setim için tahmin yap dedikten sonra test hatama bakıyorum ve 459 çıkıyor.



Son olarak model tuning aşamasına geçiyorum. Öncelikle oluşturduğum modeli çağırıyorum. GridSearchCV yöntemiyle doğrulama yapacağım için ilk olarak parametre seti giriyorum, sonrasında 10 katlı cross validation yap diyorum. Modelin önerdiği en iyi parametre 0.1 çıktığı için bu parametre değeri üzerinden modeli tüne ediyorum. Sonrasında, tune edilmiş model üzerinden test setimi tahmin et dedikten sonra valide edilmiş test hatamı hesaplıyorum.


Doğrusal Olmayan SVR

Doğrusal olmayan SVR’yi de Hitters veri seti üzerinden yapacağım ama önce doğrusal olmayan regresyon ile karşılaştırmak için numpy üzerinden bir veri seti oluşturuyorum. Sonrasında ilk olarak regresyon, daha sonra svr modelini kuruyorum. Bu defa svr kerneline linear yerine “rbf” yazıyorum.


Yine iki modeli tek bir grafik altına alıp farklılıkları inceliyorum. Doğrusal modellerde olduğu gibi EKK aykırı değerlerden etkilenirken svr’de bir değişim görünmüyor.

Şimdi analizim başlayabilirim. Hitters veri setini çağırdıktan sonra modelimi rbf üzerinden kuruyorum ve test setimi tahmin edip hata hesaplaması yapıyorum.

Son olarak tuning aşamasına geçiyorum. Burada yine parametre girişi yaptıktan sonra cross validation çalıştırıyorum. Sonrasında modelin bulduğu en iyi parametreye göre modeli tune ettikten sonra test setimi tahmin edip hata hesaplaması yaptıktan sonra analizimi bitiriyorum.


Yorumlar