簡體   English   中英

使用支持向量回歸的時間序列預測

[英]Time series prediction using support vector regression

我一直在嘗試使用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()

有任何想法嗎?
預先感謝,湯姆

您實際上並不是在進行時間序列預測。 您試圖從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]
 ...

也就是說,嘗試從先前元素的窗口中預測序列的未來元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM