縮放數據進行訓練,那麼如何縮放輸入數據?
我對交易算法的世界有些陌生,所以對我來說很簡單。我已經製作了一個具有 5 個功能的數據框。我使用 preprocessing.scale 來縮放它。我檢查了它的 csv 轉儲,它看起來很好而且很漂亮。現在,假設我剛剛獲得了今天的開盤價、最高價、最低價、收盤價、成交量數據。我已經計算了它的指標(使用 20 天的歷史來獲取它們)。我希望我必須縮放這些新的輸入特徵,以便它們在某種程度上與模型訓練的內容相匹配。我怎樣才能只用 1 行數字做到這一點?或者我應該縮放整個 20 天的歷史並希望它接近為訓練縮放的數據?
將您使用的任何縮放操作視為其參數適合歷史數據的模型。估計的參數是靜態的。
例如,假設您的某個功能在 20 天的歷史記錄中具有最小值 -3 和最大值 5,因此 0-1 的最小-最大縮放將採用以下形式:
$ \hat{f}: x \mapsto \dfrac{x-x_{min}}{x_{max}-x_{min}},\ x_{min}=-3,\ x_{max}=5 $
你可以處理新的數據點 $ x $ . 如果以後遇到新的特徵值11, $ \hat{f}\left(11\right)=1.75 $ . 你的價值落在外面是否有效 $ \left[0,1\right] $ 是另一個取決於您的模型假設的問題。
我面前的另一個答案很好地詳細說明了另一個問題——如何讓歷史增長既是統計問題,也是算法設計問題。回到我給出的範例,您可以讓 mix-max 縮放器無限縮放,因為它需要兩者 $ \mathbb{O}\left(1\right) $ 記憶體和攤銷 $ \mathbb{O}\left(1\right) $ 時間。
您如何實現基於預測模型的交易算法?該算法由一組有限的過去數據點驅動,我將其稱為“歷史”。
您每天都會觀察金融市場的新數據(例如當天的 OHLC)。您可以通過參考您擁有的歷史來縮放此數據(例如,您將今天的移動與歷史點的標準差進行比較以得出“今天是 2 個標準差向上移動”的結論)。在此之後,您再次參考歷史值進行預測。然後將最近觀察到的 OHLC 添加到歷史文件中。
是讓歷史文件無限增長(最終它會有一些相當陳舊的數據)還是在添加最新的數據點時刪除最舊的數據點(有時稱為移動視窗方法),這取決於您。
當你訓練你的算法時,你應該做同樣的事情,即僅使用過去的數據點縮放每個點(縮放 $ x_t $ 基於 $ x_{t-1},x_{t-2},\cdots $ )。理想情況下,培訓應該與現場操作類似,無需前瞻。