[英]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.