各種交叉驗證評價模型

1.The validation set approach(設置驗證集)

就是說,在訓練時,留出來一部分作爲驗證集(不參與訓練),隨時檢測網絡訓練情況。我的做法是,每個epoch訓練完後,都是用驗證集進行驗證,通過觀察驗證集來驗證網絡訓練情況。

from sklearn.model_selection import train_test_split

2. Leave one out cross validation (LOOCV)(留一交叉驗證)

只留下一個數據作爲驗證集,使用剩餘所有數據進行訓練;循環這個過程,直到每個數據當過一次驗證集。
優缺點:

1)由於訓練數據較多(只保留一個作爲驗證集),所以網絡bias較小。(網絡bias是指網絡預測準確性)。
3)由於只有一個數據進行驗證,驗證模型有效性的variation較大。也就是說,對模型的估計受這個驗證點的影響較大,如果這個點是奇異點。

from sklearn.model_selection import LeaveOneOut

3. LPOCV (Leave P Out Cross Validation)

當然我們可以留下P個點作爲驗證集。

4. k-fold cross validation

主要是K的選取。太大不行,太小也不行。K小,導致模型bias較大,因爲訓練數據較少。K大導致方差較大。其實,如果K等於2,相當於第一種驗證;K等於n,相當於留一交叉驗證。

from sklearn.model_selection import KFold 

5. Stratified k-fold cross validation

就是說,保持每個fold的訓練數據裏邊包含每類數據,類別平衡。這種方法可以很好的同時處理bias和variance。因爲隨機選取的每個fold的類別可能是不平衡的。

from sklearn.model_selection import StratifiedKFold

6. k-fold cross validation with repetition

但是如果訓練數據不具有很強的代表性,使用 stratified k-fold 可能不好。在這種情況下我們使用重複的k-fold cross validation。重複進行n次k-fold cross validation。

from sklearn.model_selection import RepeatedKFold

7. Adversarial validation(對抗驗證)

處理的是,訓練集和測試集差異性較大,此時驗證集已經不適合評價該模型了,因爲驗證集來源於訓練集。所以我們需要一個驗證集能夠,代表測試集。
基本思想就是,通過一個具有區分力的分類器,選出被分類器分錯的訓練集,認爲這些數據和測試集很像,作爲驗證集。
具體操作:將訓練集和測試集分別進行2類別標記。比如,訓練集類別設爲0,測試集類別爲1。然後將這兩部分數據進行混合,再分爲新的訓練集和測試集,使用新的訓練集訓練一個2分類網絡,對新的測試數據進行測試,選擇新的測試集裏邊原來的訓練集數據得分進行排序,選出得分最差的所需數量的數據作爲我們需要的驗證集。爲什麼這麼操作,是因爲,我們認爲選出的這些數據和測試集最接近。
但是得謹慎使用這種技術。因爲如果一旦原來的測試數據改變的話,選出來的驗證集就很可能不是一個好的驗證集了,最好重新選擇。

8. Cross Validation for time series

對於時間序列數據,我們就不能隨機打亂了。那麼是時間序列數據的交叉驗證是如何操作的呢?
使用前向鏈進行生成交叉驗證。比如:連續時間的股價爲:x_1,x_2,x_3,x_4,x_5,x_6。

fold1:訓練數據x_1,測試數據x_2;
fold2:訓練數據x_1,x_2,測試數據x_3;
fold1:訓練數據x_1,x_2,x_3,測試數據x_4;
……

每個fold的測試數據可以是訓練數據之後緊挨着的一個,也可以是後邊的某一個。比如上邊fold1的測試數據可以爲x_4。這取決於我們是否使用multi-step forecast來評估我們的模型。

最後,我們使用k折交叉驗證的k個error來計算bias和variance。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章