2013-04-02 79 views
4

我一直在嘗試使用支持向量迴歸在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() 

任何想法?
在此先感謝, 湯姆

回答

4

你是不是真的這樣做的時間序列預測。您試圖從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] 
... 

即,試圖從先前元素的窗口預測序列的未來元素。

+0

非常感謝,這真的很有幫助! T. –

+0

@ user1149913,如果你能幫助我,親愛的,我將不勝感激。 http://stackoverflow.com/questions/40357805/prediction-time-series-prediction-of-future-events-using-svr-module。 – Mahsolid

相關問題