Destek Vektör Regresyonu (SVM) -Makine Öğrenmesi (2020)
Makine Öğrenmesinde Destek Vektör Regresyonu ile karşınızdayım
1- Veri Setini Getirme/İnceleme
import seaborn as sns
import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputerdata = 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_splitx_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ı)