建模 - 支持向量回归(SVR)与线性回归

enc*_*ush 2 python regression svm linear-regression scikit-learn

我对建模技术有点新意,我试图比较SVR和线性回归.我使用f(x)= 5x + 10线性函数来生成训练和测试数据集.到目前为止,我编写了以下代码片段:

import csv 
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.linear_model import LinearRegression

with open('test.csv', 'r') as f1:
  train_dataframe = pd.read_csv(f1)

X_train = train_dataframe.iloc[:30,(0)]
y_train = train_dataframe.iloc[:30,(1)]

with open('test.csv','r') as f2:
     test_dataframe = pd.read_csv(f2)

X_test = test_dataframe.iloc[30:,(0)]
y_test = test_dataframe.iloc[30:,(1)]

svr = svm.SVR(kernel="rbf", gamma=0.1)
log = LinearRegression()
svr.fit(X_train.reshape(-1,1),y_train)
log.fit(X_train.reshape(-1,1), y_train)

predSVR = svr.predict(X_test.reshape(-1,1))
predLog = log.predict(X_test.reshape(-1,1))

plt.plot(X_test, y_test, label='true data')
plt.plot(X_test, predSVR, 'co', label='SVR')
plt.plot(X_test, predLog, 'mo', label='LogReg')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

正如您在图片中看到的,线性回归工作正常,但SVM的预测准确性较差.

在此输入图像描述

如果您有任何建议可以解决这个问题,请告诉我.

谢谢

Gau*_*gla 6

原因是内核rbf的SVR不应用特征缩放.在将数据拟合到模型之前,需要应用特征缩放.

功能缩放的示例代码

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X = sc_X.fit_transform(X)
sc_y = StandardScaler()
y = sc_y.fit_transform(y)
Run Code Online (Sandbox Code Playgroud)