使用支持向量回归进行时间序列预测

8

我一直在尝试使用Python语言中的支持向量回归(SVR)工具来实现时间序列预测。我使用scikit-learn中的SVR模块进行非线性支持向量回归。但是,我在预测未来事件方面遇到了严重问题。回归线很好地拟合了原始函数(从已知数据),但是一旦我想要预测未来步骤,它就会返回最后一个已知步骤的值。

我的代码如下:

import numpy as np
from matplotlib import pyplot as plt
from sklearn.svm import SVR

X = np.arange(0,100)
Y = np.sin(X)

svr_rbf = SVR(kernel='rbf', C=1e5, gamma=1e5)
y_rbf = svr_rbf.fit(X[:-10, np.newaxis], Y[:-10]).predict(X[:, np.newaxis])

figure = plt.figure()
tick_plot = figure.add_subplot(1, 1, 1)
tick_plot.plot(X, Y, label='data', color='green', linestyle='-')
tick_plot.axvline(x=X[-10], alpha=0.2, color='gray')
tick_plot.plot(X, y_rbf, label='data', color='blue', linestyle='--')
plt.show()

有什么想法吗?
提前感谢, 汤姆

1个回答

10

你并没有真正进行时间序列预测。你试图从X的一个元素来预测Y中的每个元素,这意味着你只是在解决一个标准的核化回归问题。

另一个问题是当在一系列向量[[0],[1],[2],...]上计算RBF核时,你会得到沿对角线的正值带,而远离对角线的值将接近于零。测试集部分的核矩阵远离对角线,因此非常接近于零,这将导致所有SVR预测都接近于偏置项。

对于时间序列预测,我建议按以下方式构建训练测试集:

 x[0]=Y[0:K]; y[0]=Y[K]
 x[1]=Y[1:K+1]; y[1]=Y[K+1]
 ...

也就是说,尝试从先前的元素窗口中预测序列的未来元素。


@user1149913,亲爱的,如果你能帮我解决这个问题,我将不胜感激。 https://dev59.com/3Zzha4cB1Zd3GeqPABxW. - Mahsolid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接