Sosyal Ağlarda Makine Öğrenmesi 5 [ Support Vector Regression ]

Bu bölümde Support Vector Regression yaklaşımıyla bir makine öğrenmesi çalışması yapacağız. Buna geçmeden önce “Support Vector Machine nedir?” sorusunu cevaplamaya çalışalım.

Aslında Suppor Vector Machine, regresyon değil sınıflandırma algoritmalarında kullanılıyor. Bir düzlemde bulunan iki grup arasında bir sınır çekerek iki grubu ayırıyor. Bir tür iki grup arasında akıllı çizgi oluşturuyor diyebiliriz. Fakat burada SVM yi algoritmamızı karakterize eden ana özellikleri koruyarak regresyon yöntemi olarak kullanacağız.

 

Veri seti olarak polinom regresyonda kullandığımız fenomen dosyamızı kullandık.

Şimdi SVR ile eğitimimizi yapalım.

Unutma:

Regresorü oluşturduğumuzda yukarıdaki gibi bir çok varsayılan değer geldi. Bunları dilersek değiştirebiliriz.

Regressor nesnesini oluştururken SVR(kernel = ‘rbf’) dedik.  Bu bir çekirdek yöntemi ve açılımı Gaussian RBF (Radial Basis Function) anlamına geliyor. Benzer şekilde ‘linear’ , ‘poly’ , ‘sigmoid’ ve ‘precomputed’ gibi farklı çekirdekleri de kullanabilirdik. Eğer bir değer girilmemiş de de ‘rbf’ otomatik olarak kullanılıyor. Bir alt satırdaki fit ise regressor nesnemizi uyumlu hale getiriyor. Şimdi herhangi bir değeri, örneğin 6.5 için tahminde bulunalım.

Sonucu ekrana yazdıralım.

Grafiğimiz aşağıdaki şekilde oluştu.

Ciddi bir problemimiz var. Peki ne ?

Bu kötü tahminin sebebi SVR’de feature scalling yok. Bunun için kendimiz scale işlemini gerçekleştirmemiz gerekiyor.

Peki nedir bu Feature Scaling ?

Aslında bu veri ön işlemedeki adımlardan biri. Problem verisetimizdeki değerlerin sınırları sütunlar arasında çok farklı olunca ortaya çıkıyor. Yani seviye kısmı 1-10 arasındayken gelir kısmı bunun kat ve kat fazlası 1 ile 10000000 arasında olunca bir özellik ölçekleme yani Feature Scaling sorunu ortaya çıkıyor. Bu sorunu aşmak için Standartlaştırma (Standardization) işlemi yapabiliriz. StandartScaler sınıfı işimize yarayacaktır. Önce bir nesne tanımlayıp ardından hem X hem de y değerimizi fit_transform metoduyla standartlaştırabiliriz.

 

Biz de Feture Scaling yapalım. Aşağıdaki kodda kısaca ne yaptığımıza bakarsak; StandartScaler sınıfını içe aktardık. Ardından bu sınıftaki StandartScaler nesnesinden iki tane oluşturduk. Değişkenlerimizi bu nesneler ile fit_transform metoduyla ölçeklendirdik.

Çalıştırdığımızda bir hata aldık.

Bunun sebebi bizim verisetini tanımlarken y= dataset.iloc[:,2].values dememiz. Bu tanımlama StandartScaler kullanırken sorun oluyor. Hatayı çözmek için 2 den sonra iki nokta (:) daha koyuyoruz. y= dataset.iloc[:,2:].values şekline geliyor. Artık 2 boyutlu görüyor devam edebiliriz.

Kodumuzu yeniden çalıştıralım.

Aşağıda görüldüğü gibi artık x eksenine paralel düz bir çizgi yerine daha doğru bir sonuç alabildik.

Çoğu değer doğruya yakın bulunsa da üst taraftaki noktamızı maalesef doğru tahmin edemedik.

Şimdi bu verisetimizdeki x değerleri dışında bir değer için tahminde bulunalım. Örneğin 6.5 değeri için ne sonuç bulacak ?

Kodumuzu yazalım.

Şimdi burada yaptığımız işlemin ne olduğuna bakalım. İlk olarak y_pred = regressor.predict(6.5) diyerek 6.5 için bir tahmin aldık. Fakat sonucumuz ölçeklenmiş olarak geldi ve bize -0.0139 gibi bir sayı söyledi. Bulmamız gereken gelir -0.0139 değil tabiki. Fakat bu ölçeklendirilmiş veriyi geriye doğru ölçeklememiz lazım. Bunun için aşağıdaki şekliyle kodu iki aşamalı yapıyoruz.

Eklediğimiz satırda, sc_y nesnemizin inverse_transform metodundan geçirerek ters ölçeklendirme diyebileceğimiz bir işlem yaptık. Ardından da y_pred diyerek geliri 196.797 lira olarak tahmin etti. Şimdi sorunu hallettik.

Not: Tıpkı polinom regresyonda olduğu gibi ekrana yazdırırken daha hassas bir çizim yapabiliriz.

 

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir