具有数据集(50x13)。当我使用默认参数SMOReg
解决了WEKA上的回归问题时,它为我提供了输入与输出之间的 70.49%相关系数。然后,我尝试通过scikit-learn SVR解决相同的问题。为了获得最佳参数,我应用了Gridsearch方法。但是,它最多提供 28%的相关性。
我的下一个尝试是忽略网格搜索方法,并将Weka的默认参数用于svm.SVR
。结果没有改变,svr
甚至还没有达到weka的水平。
最后一次尝试是在weka中使用scikit-learn网格搜索参数。结果没有改变。使用相同的参数,weka可获得更好的结果。我不确定我在哪里做错了。这是我在Python中的完整代码。
import pandas as pd
import os
import numpy as np
from sklearn import metrics
from scipy.stats import zscore
from sklearn.model_selection import KFold
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn import svm
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
df=pd.read_csv("Data.csv")
x=df.iloc[:,:-1]
y=df.iloc[:,-1]
x=np.array(x)
y=np.array(y)
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.20, random_state=42)
scaler = StandardScaler()
x_train = scaler.fit_transform( x_train )
x_test = scaler.transform( x_test )
# GRID SEARCH
parameters = {'kernel':( 'poly', 'rbf', 'sigmoid'),'gamma':np.arange(0.1, 5, 0.1),'C':np.arange(0.1, 3, 0.1)}
svr = svm.SVR()
clf = GridSearchCV(svr, parameters, cv=3)
clf.fit(x_train, y_train)
print(clf.best_params_)
print(clf.best_score_)
y_pred=clf.predict(x_test)
print(clf.score(x_test,y_test))
plt.plot(y_test)
plt.plot(y_pred)
plt.show()
plt.plot(y_train)
plt.plot(clf.predict(x_train))