支持向量回归的时间序列预测

3 投票
1 回答
3089 浏览
提问于 2025-04-18 11:47

我正在尝试使用支持向量回归来进行简单的时间序列预测。

我想理解在这里提供的答案。

我调整了Tom的代码,以反映这个答案:

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

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

a = 0
b = 10
x = []
y = []
while b <= 100:
    x.append(Y[a:b])
    a += 1
    b += 1
b = 10

while b <= 90:
    y.append(Y[b])
    b += 1

svr_rbf = SVR(kernel='rbf', C=1e5, gamma=1e5)
y_rbf = svr_rbf.fit(x[:81], y).predict(x)

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[10:], y_rbf[:-1], label='data', color='blue', linestyle='--')
plt.show()

但是,我仍然遇到同样的问题——预测结果只是返回最后一个已知步骤的值。奇怪的是,如果我把核函数设置为linear,结果就好得多。为什么rbf核函数的预测没有按预期工作呢?

谢谢。

1 个回答

4

我知道这个问题已经有点旧了,但我还是想回答一下,因为其他人可能会从中受益。

你用的C和gamma值很可能是问题所在,如果你的例子在使用线性核时能正常工作,而在使用rbf时不行的话。C和gamma是支持向量机(SVM)中用于非线性核的参数。想要更直观地理解C和gamma是什么,可以看看这里:http://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html

为了预测正弦波的值,可以尝试将C设置为1,gamma设置为0.1。这样效果会比你现在用的值好很多。

撰写回答