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的预测准确性较差.
如果您有任何建议可以解决这个问题,请告诉我.
谢谢
原因是内核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)
| 归档时间: |
|
| 查看次数: |
10533 次 |
| 最近记录: |