K折交叉驗證


交叉驗證的思想

  交叉驗證主要用於防止模型過於復雜而引起的過擬合,是一種評價訓練數據的數據集泛化能力的統計方法。其基本思想是將原始數據進行划分,分成訓練集和測試集,訓練集用來對模型進行訓練,測試集用來測試訓練得到的模型,以此來作為模型的評價指標。

簡單的交叉驗證

  將原始數據D按比例划分,比如7:3,從D中隨機選擇70%的數據作為訓練集train_data,剩余的作為測試集test_data(綠色部分)。如下圖所示,這里的數據都只利用了一次,並沒有充分利用,對於小數據集,需要充分利用其數據的信息來訓練模型,一般會選擇K折交叉驗證。

  

 K折交叉驗證

  將原始數據D隨機分成K份,每次選擇(K-1)份作為訓練集,剩余的1份(紅色部分)作為測試集。交叉驗證重復K次,取K次准確率的平均值作為最終模型的評價指標。過程如下圖所示,它可以有效避免過擬合和欠擬合狀態的發生,K值的選擇根據實際情況調節。

  

 

python實現

  使用scikit-learn模塊中的方法KFold,示例如下:

 1 from sklearn.model_selection import KFold
 2 import numpy as np
 3 x = np.array(['B', 'H', 'L', 'O', 'K', 'P', 'W', 'G'])
 4 kf = KFold(n_splits=2)
 5 d = kf.split(x)
 6 for train_idx, test_idx in d:
 7     train_data = x[train_idx]
 8     test_data = x[test_idx]
 9     print('train_idx:{}, train_data:{}'.format(train_idx, train_data))
10     print('test_idx:{}, test_data:{}'.format(test_idx, test_data))
11 
12 # train_idx:[4 5 6 7], train_data:['K' 'P' 'W' 'G']
13 # test_idx:[0 1 2 3], test_data:['B' 'H' 'L' 'O']
14 # train_idx:[0 1 2 3], train_data:['B' 'H' 'L' 'O']
15 # test_idx:[4 5 6 7], test_data:['K' 'P' 'W' 'G']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM