簡體   English   中英

支持向量回歸的時間序列預測:擬合不足

[英]time series forecasting using support vector regression: underfitting

我有一個由60個數據點組成的時間序列數據集。 我將數據集分為兩個部分:訓練(前70%的數據)和測試集(后30%的數據)。 使用Matlab的fitrsvm函數,我在訓練數據集上建立了支持向量回歸模型,並試圖預測測試數據集中的時間序列數據點。 我有svr模型可以很好地近似訓練數據集。 但是,它甚至沒有嘗試概括測試數據集,它只是嚴重地擬合了數據,即給出了一條直線,甚至沒有經過測試數據集上的任何數據點。 有人知道為什么會這樣嗎? 數據集是否太小,即只有60個數據點? 進行交叉驗證是否有意義? 我認為進行交叉驗證沒有任何意義,因為我正在嘗試預測最后30%的數據。 我試圖更改參數等但沒有幫助。

關於總體性能:在應用SVR之前,您是否嘗試過使時間序列固定(通過微分或通過功率變換)或對其進行歸一化? 這些可能會有所幫助-有時將NNets應用於時間序列會有所幫助。


關於簡歷:有一些方法可以對時間序列進行交叉驗證。 首先,您可以進行時間序列CV分割(在Python Scikit-learn和R中可用),我想它也會在Matlab中出現。

[1, 2, 3],       [4, 5]
[1, 2, 3, 4],    [5, 6]
[1, 2, 3, 4, 5], [6, 7].

這將適用於任何時間序列預測方法。

但是,由於您使用的是SVR,因此您甚至可以使用普通的交叉驗證(不適用於ARIMA或Holt-Winters)。

這是因為最近,Bergmeir,Hyndman和Koo證明,對於純自回歸模型(例如AR(p)模型,神經網絡或支持向量回歸),只要格式化了格式,甚至可以使用常規CV。訓練數據,使其看起來像是受監督的機器學習問題,而不是時間序列問題。

要了解它是如何工作的,首先您需要注意,純自回歸方法僅使用固定數量的前一個周期,因此,它不是:

[1, 2, 3],          [4]
[1, 2, 3, 4],       [5]
[1, 2, 3, 4, 5],    [6]
[1, 2, 3, 4, 5, 6], [7]

例如,您將擁有(對於階數為3(即3個滯后)的自回歸模型):

[1, 2, 3],   [4]
[2, 3, 4],   [5]
[3, 4, 5],   [6]
[4, 5, 6],   [7]

然后,您需要考慮使用ML格式而不是時間序列格式的數據:

[1, 2, 3 | 4]
[2, 3, 4 | 5]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

這樣,您的數據點不僅是像[4]這樣的單個值,而且是具有3個輸入和一個目標值的向量:[1、2、3 | 4]

在這種情況下,使用常規交叉驗證(而不是時間序列交叉驗證)是有效的,因為依賴性不再是問題,您可以在以下方面訓練模型:

[2, 3, 4 | 5]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

並測試:

[1, 2, 3 | 4]

然后在以下位置訓練模型:

[1, 2, 3 | 4]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

並測試:

[2, 3, 4 | 5]

等等....

有關詳細信息,請參見Christoph Bergmeir,Rob J Hyndman和Bonsoo Koob撰寫的“有關評估自回歸時間序列預測的交叉驗證有效性的注釋”。

暫無
暫無

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

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