宽客秀

宽客秀

Quant.Show的Web3站点,Archives from quant.show

人工智能算法評估與改進方法

1. 訓練集、驗證集和測試集#

在人工智能和機器學習過程中,對於原始數據可以分成三部分:訓練集、驗證集和測試集,參考圖 1 所示。其中:

  1. 訓練集(Trainning set):用於構建機器學習模型。
  2. 驗證集(Validation set):驗證集可以包含在訓練集中,也可以單獨劃分。單獨劃分的時候往往是為了用於交叉驗證訓練後的機器學習模型,或者可以用於選擇模型參數。
  3. 測試集(Test set):對於模型來說是未知數據,用於評估最終模型。

圖 1 訓練集、驗證集和測試集

d2b5ca33bd970f64a6301fa75ae2eb22 18


2. 泛化、過擬合和欠擬合#

如果一個算法對沒見過的數據做出準確的預測,則稱它能夠從訓練集泛化(generalize)到測試集。一般來說,總是想要構建一個泛化精度盡可能高的算法。判斷一個算法在新數據上表現好壞的唯一度量,就是在測試集上的評估。一般來說,簡單的模型對新數據的泛化能力更好。構建一個對現有信息量來說過於複雜的模型,稱為過擬合(overfitting)。這種情況下,在擬合模型時過分關注訓練集的細節,得到了一個在訓練集上表現很好,但不能泛化到測試集或新數據上的模型,那麼就存在過擬合。與之相反,如果模型過於簡單,那麼可能無法抓住數據的全部內容以及數據中的變化,模型在一開始訓練集上的表現就很差,這種現象稱之為欠擬合(underfitting)。

模型越複雜,在訓練集上的預測結果就越好,但是由於模型過於複雜,使得我們過多地關注訓練集上的每個單獨的數據點,模型就不能很好地泛化到新數據上。過擬合和欠擬合之間存在一個最佳位置,參考圖 2 的中間位置,可以得到最好的泛化模型。這是模型探索的最終目標。


圖 2 模型複雜度與預測誤差關係

d2b5ca33bd970f64a6301fa75ae2eb22 19

(來源:CNBLOG[2]


3. 交叉驗證#

交叉驗證(Cross-validation),也稱循環估計,是一種評估泛化性能的統計學方法,它比單次劃分訓練集和測試集的方法更加穩定全面。在交叉驗證中,數據被多次劃分為訓練集和測試集,或者保留測試集不動,將訓練集多次劃分為訓練集和驗證集。

常見的交叉驗證是 K 折交叉驗證(k-fold cross-validation),其中 K 是由用戶指定的數字。在執行 K 折交叉驗證時,首先將訓練集劃分為大致相等的 K 部分,每一部分稱之為折(fold)。接下來訓練一系列模型。使用第 K 折作為驗證集,來評估精度,其他折(1~K-1)作為訓練集來訓練第一個模型。依次使用第 K-1、K-2、…..2、1 折作為驗證集,其他折作為訓練集來訓練不同的模型,每一次都計算精度,最後得到 K 個精度值。以 K=10 為例,十折交叉驗證可參考圖 3 所示。


圖 3 十折交叉驗證示例圖

d2b5ca33bd970f64a6301fa75ae2eb22 20

(來源:CSDN[3]


交叉驗證的優點是使得每個樣例都會剛好在測試集中出現一次:每個樣例位於一個折中,而每個折都在測試集中出現一次。因此,模型需要對數據集中所有的樣本的泛化能力都很好,才能讓所有的交叉驗證打分(一般取其平均值)很高。和數據的單次劃分相比,交叉驗證的另一個優點是對數據的使用更加高效。以十折交叉驗證為例,我們可以使用 90% 的數據來擬合模型。而交叉驗證的缺點是增加了計算成本。因為要訓練 K 個模型而不是單個模型,所以交叉驗證的速度要比數據單次劃分大約慢 K 倍。另外,需要注意的是,交叉驗證不是一種構建模型的方法。交叉驗證的目的只是評估給定算法在特定數據集上訓練後的泛化性能的優劣,其本身並不會返回一個模型。

4. 網格搜索#

模型的泛化能力可以通過調整參數來提升。而找到一個模型的重要參數(提供最佳泛化性能的參數)的取值是一件棘手的任務,但對於幾乎所有的模型和數據集來說都是必要的。關於參數調優方面的研究也有很多,比如非參數噪聲法估計,遺傳算法參數尋優。其中最常用的方法就是網格搜索(grid search),它主要是指嘗試我們關心的參數的所有可能組合。以 SVR 為例,它有 2 個重要參數:核寬度 gamma 和正則化參數 C。假設我們希望嘗試 C 的取值為 0.001、0.01、0.1、1、10 和 100,gamma 的取值為 0.001、0.01、0.1、1 和 10,所以總共有 30 種參數組合,參考圖 4 所示,所有可能的組合組成了 SVR 的參數設置網格。


圖 4 SVR 參數設置網格

d2b5ca33bd970f64a6301fa75ae2eb22 21


為了得到對泛化性能的更好估計,網格搜索常常與交叉驗證結合使用。帶交叉驗證的網格搜索的最大缺點就是訓練模型所需要太多的時間。以圖 4 的網格為例,使用 5 折交叉驗證對 C 和 gamma 特定取值的 SVR 精度進行評估,需要訓練 30*4=120 個模型。

5. 滾動預測#

滾動預測方法,顧名思義,對大量的樣本數據進行滾動性選擇。它的本質是利用一個 “時間窗口” 在不斷向後移動的過程中,將市場中最新的數據加入到建模中,從而不斷更新模型。而這種算法的使用前提是:建模過程中,新數據的重要性要大於舊數據,新數據的意義便是比舊數據更適合市場的變化需求。

對於這種算法,面臨的研究方向主要有兩個。第一種方法是將時間窗口固定,這樣一來時間窗口的大小就不會隨著新數據和新樣本的添加而發生改變,從而舊數據和舊樣本會不斷地被清除出去,為新數據的填入提供充足的空間,因此,窗口的大小對於這個算法來說十分重要,也要為它提供最優化。第二種方法是時間窗口的大小可以隨著新數據和新樣本的填入而發生改變,這樣一來,由於新數據的不斷填入,時間窗口需要根據新數據和新樣本的特點及時調整大小,這種機制的特點就是舊數據仍然處於算法中,只是訓練將最新數據加入模型練習,這種方式雖然看似綜合考慮了模型對市場需求的符合程度,但是仍然面臨兩大缺陷。第一個是由於老數據的存在,模型在不斷加入新數據的過程中面臨的計算量也會越來越大,導致訓練的效率也越來越低。第二個是部分舊數據不符合市場需求,模型在進行訓練的過程中由於舊數據的阻礙會影響算法的準確度,所以,這種算法在使用的過程中需要進行綜合考慮。

過去的多因子模型的研究成果表明,絕大部分的模型並沒有根據科技和時代的更新而進行升級優化,這些模型的建立基於市場運行準則不會改變亦或者不會在短期內發生變化,因此,模型的構建者不會頻繁的對模型數據和樣本進行更新,這樣的做法並不是不行,它存在一定的合理性。但是根據實際情況而言,市場的行情每分每秒都在發生變化,原先奉行的市場規律可能在下一個發展階段就並不適用,因此,這樣的模型並不能完全跟上市場發展的腳步,構建者必須及時的對模型中的數據和樣本進行調整更新。所以,更建議使用滾動時間窗口機制來幫助構建者避免該類問題的出現。


參考文獻:

[1] https://blog.csdn.net/lhx878619717/article/details/49079785

[2] https://www.cnblogs.com/sthinker/p/6837597.html

[3] https://blog.csdn.net/lhx878619717/article/details/49079785

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。