我一直在尝试使用Python语言中的支持向量回归来实现时间序列预测工具。我使用 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()
有任何想法吗?
提前致谢,
汤姆
你并没有真正进行时间序列预测。您正在尝试预测的每个元素Y
从单个元素X
,这意味着您只是在解决标准核化回归问题。
另一个问题是在一系列向量上计算 RBF 核时[[0],[1],[2],...]
,您将沿着核矩阵的对角线得到一系列正值,而远离对角线的值将接近于零。核矩阵的测试集部分远离对角线,因此非常接近于零,这将导致所有 SVR 预测都接近偏差项。
对于时间序列预测,我建议将训练测试集构建为
x[0]=Y[0:K]; y[0]=Y[K]
x[1]=Y[1:K+1]; y[1]=Y[K+1]
...
也就是说,尝试从先前元素的窗口中预测序列的未来元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)