Scikit learn scikit svm回归预测恒定结果

Scikit learn scikit svm回归预测恒定结果,scikit-learn,svm,Scikit Learn,Svm,这是我的数据:(我重置了索引。日期应该是索引) 这是我的代码: ar = regr_data y= ar.iloc[:80,0] x=ar.iloc[:80,1:] svmf = svm.SVR() svmf.fit(training_x, training_y) pred = pd.Series(svmf.predict(ar.iloc[80:,1:])) result = pd.DataFrame({"Prediction":pred,"actual":np.array(ar.iloc[80

这是我的数据:(我重置了索引。日期应该是索引)

这是我的代码:

ar = regr_data
y= ar.iloc[:80,0]
x=ar.iloc[:80,1:]
svmf = svm.SVR()
svmf.fit(training_x, training_y)
pred = pd.Series(svmf.predict(ar.iloc[80:,1:]))
result = pd.DataFrame({"Prediction":pred,"actual":np.array(ar.iloc[80:,0])})

SVM预测的常数为-0.002539。我做错什么了吗?我对SVM的工作原理知之甚少。我使用了相同代码的线性回归,预测结果看起来很合理。我很好奇,想试试SVM。SVM不能处理这种数据吗?但是一个常数看起来很奇怪。我应该尝试分类而不是精确预测吗?谢谢

正如@larsmans在评论中所说的,在使用RBF SVM时,您应该始终使用网格搜索C和gamma


此外,SVR不适用于
datetime64[ns]
dtype。请显式转换为数据类型为np.float64的numpy数组。自epoch起的纳秒数的顺序为
1e18
,因此您可能希望将浮动日期除以1e18。

您的目标值非常小。也许你必须调整epsilon的值。 我也有同样的问题,请看这个问题:

您必须调整SVM的参数,使其正常工作
C
gamma
是重要的。我不会在回归中使用日期。我使用A列作为y,B、C、D列作为x。我试着改变C和gamma,但得到了相同的结果。我应该搜索的好范围是什么?谢谢。你能试试
svmf=svm.SVR(kernel='linear',C=C)
并检查
C
的值范围吗?我试过从1e7到1e-10的值。他们对所有x向量都给出了相同的预测。
ar = regr_data
y= ar.iloc[:80,0]
x=ar.iloc[:80,1:]
svmf = svm.SVR()
svmf.fit(training_x, training_y)
pred = pd.Series(svmf.predict(ar.iloc[80:,1:]))
result = pd.DataFrame({"Prediction":pred,"actual":np.array(ar.iloc[80:,0])})