Destek Vektör Regresyonu (SVM) -Makine Öğrenmesi (2020)

ibrahimcanerdogan
2 min readDec 18, 2020

--

Makine Öğrenmesinde Destek Vektör Regresyonu ile karşınızdayım

Yazının Konu Anlatım Videosu

Yazının Github Reposu

Yazının Konu Anlatım Oynatma Listesi

1- Veri Setini Getirme/İnceleme

import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer
data = sns.load_dataset(“tips”)
df = pd.DataFrame(data)
# Eksik Verileri Ortalama ile Doldurma
imputer = SimpleImputer(missing_values=np.nan, strategy=”mean”)
imputer = imputer.fit(df[[“total_bill”]])
df[[“total_bill”]] = imputer.transform(df[[“total_bill”]])
# Kategorik Olmayan Değişkenler
total_bill = df[[“total_bill”]]
tip = df[[“tip”]]
size = df[[“size”]]
# Kategorik Değişkenler İçin 0–1 Dönüşümü
smoker = pd.get_dummies(df[[“smoker”]])
time = pd.get_dummies(df[[“day”]])
# Kukla Değişkeni Silme
smoker = smoker.drop(“smoker_Yes”, axis=1)
# Verileri Birleştirme
new_data = pd.concat([total_bill, size, smoker, time, tip], axis=1)
# Train ve Test Belirleme
training = new_data.iloc[:, 0:7]
testing = new_data.iloc[:, 7:8]
# Train Test Ayırma
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(training, testing, test_size=0.30, random_state=42)

2- Model Eğitme

from sklearn.svm import SVRsvr_model = SVR()
svr_model.fit(x_train, y_train)

3- MSE (Mean Squared Error) v R2 Değeri Hesaplama

MSE değeri modelimizde düşürülmeye, r2 değerimiz ise arttırılmaya çalışılıyor. Bu değerleri modelimizin “tuning” işleminden sonra olumlu yönde etkilendiğini görmelisiniz!!

from sklearn.metrics import mean_squared_error, r2_score

y_pred = svr_model.predict(x_test)

r2 = r2_score(y_test, y_pred)

mse = np.sqrt(mean_squared_error(y_test, y_pred))

print("----------------------")
print("İlk Ortalama Karekök: ", mse)
print("----------------------")
print("İlk R2 Değeri: ", r2)

4- Model Tunning

Modelimizin skorlarını olumlu yönde etkilemek için hangi parametreler gerektiğini buluyor bunları GridSerachCV ile uyguluyoruz.

Sckit-learn’de Support Vector Regresyon dökümantasyonundan bakarak alabileceği parametreleri “svr_params” değişkenine atıyoruz.

svr_params = {"C": np.arange(0.1, 10, 0.1),
"degree":np.arange(1,5,1),
"kernel":["linear", "poly", "rbf", "sigmoid"]}

GridSearchCV fonksiyonu ile parametreleri önceden eğittiğimiz modelle beraber yolluyoruz ve bunu yine aynı “x_train” ve “y_train” ile eğitiyoruz.

from sklearn.model_selection import GridSearchCV

svr_cv_model = GridSearchCV(svr_model, svr_params, cv=10)
svr_cv_model.fit(x_train, y_train)

Belirlediğimiz parametreler içinden modelimize en iyi skoru veren parametreleri aşağıdaki fonksiyon ile ulaşıyoruz.

print(svr_cv_model.best_params_)

Yeniden oluşturduğumuz modelimizde yukarıdaki en iyi parametreleri yolluyoruz ve yeniden bir eğitiyoruz. Artık bu değişken bizim modelimiz olacaktır. Bu model üzerinden ortalama hata karesi ve r2 değerlerine bakacağız.

svr_tuned = SVR(C = 8.6, degree=1, kernel='rbf')
svr_tuned.fit(x_train, y_train)

5- MSE v R2 Score

MSE → Tahmin edilen değerler gerçek değerlere ne kadar yakınsa MSE o kadar küçük olur; gerçek değerlerden ne kadar uzaklaşırsa MSE o kadar büyük olur.

r2 → R2‘ın yüksek olması regresyon model uyumunun iyi olduğunu gösterir.

Son eğitilen modelle (svr_tuned) yeniden skorlarımızı hesaplayıp karşılaştırıyoruz, buna göre yeniden istenilen tahmin değerlerine bakabilirsiniz.

Tahmin değer ve skorlarında olumsuz yönde etkilenebilir “best parametreler” her zaman en iyi sonucu vermeyebilir!!

from sklearn.metrics import mean_squared_error, r2_score

y_pred=svr_tuned.predict(x_test)

r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))

print("----------------------")
print("İkinci Ortalama Karekök: ", rmse)
print("----------------------")
print("İkinci R2 Değeri: ", r2)

Umarım faydalı olmuştur. Diğer algoritmalarda görüşmek üzere :)

Önceki Yazı (Polinomal Regresyon)/ Sonraki Yazı (Karar Ağacı)

MY GITHUB PROFILE

MY YOUTUBE CHANNEL

MY LINKEDIN PROFILE

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet