1. 程式人生 > >訓練模型:交叉驗證

訓練模型:交叉驗證

計算 其余 CI ron 包括 樣本 中大 IE justify

一.基本概述

用交叉驗證的目的是為了得到可靠穩定的模型。

消除測試集與訓練集選擇的不好,導致訓練的模型不好。

二.k折交叉驗證

K折交叉驗證,初始采樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的數據,其他K-1個樣本用來訓練。交叉驗證重復K次,每個子樣本驗證一次,平均K次的結果或者使用其它結合方式,最終得到一個單一估測。

這個方法的優勢在於,同時重復運用隨機產生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。

技術分享圖片

k 折交叉驗證通過對 k 個不同分組訓練的結果進行平均來減少方差,因此模型的性能對數據的劃分就不那麽敏感。

  • 第一步,不重復抽樣將原始數據隨機分為 k 份。
  • 第二步,每一次挑選其中 1 份作為測試集,剩余 k-1 份作為訓練集用於模型訓練。
  • 第三步,重復第二步 k 次,這樣每個子集都有一次機會作為測試集,其余機會作為訓練集。
  • 在每個訓練集上訓練後得到一個模型,
  • 用這個模型在相應的測試集上測試,計算並保存模型的評估指標,
  • 第四步,計算 k 組測試結果的平均值作為模型精度的估計,並作為當前 k 折交叉驗證下模型的性能指標。

k 一般取 10,
數據量小的時候,k 可以設大一點,這樣訓練集占整體比例就比較大,不過同時訓練的模型個數也增多。
數據量大的時候,k 可以設小一點。

當 k=m 即樣本總數時,叫做 3. 留一法(Leave one out cross validation)

,每次的測試集都只有一個樣本,要進行 m 次訓練和預測。
這個方法用於訓練的數據只比整體數據集少了一個樣本,因此最接近原始樣本的分布。
但是訓練復雜度增加了,因為模型的數量與原始數據樣本數量相同。
一般在數據缺乏時使用。

此外:

  1. 多次 k 折交叉驗證再求均值,例如:10 次 10 折交叉驗證,以求更精確一點。
  2. 劃分時有多種方法,例如對非平衡數據可以用分層采樣,就是在每一份子集中都保持和原始數據集相同的類別比例。
  3. 模型訓練過程的所有步驟,包括模型選擇,特征選擇等都是在單個折疊 fold 中獨立執行的。

還有一種比較特殊的交叉驗證方式,Bootstrapping: 通過自助采樣法,即在含有 m 個樣本的數據集中,每次隨機挑選一個樣本,再放回到數據集中,再隨機挑選一個樣本,這樣有放回地進行抽樣 m 次,組成了新的數據集作為訓練集。

這裏會有重復多次的樣本,也會有一次都沒有出現的樣本,原數據集中大概有 36.8% 的樣本不會出現在新組數據集中。

優點是訓練集的樣本總數和原數據集一樣都是 m,並且仍有約 1/3 的數據不被訓練而可以作為測試集。
缺點是這樣產生的訓練集的數據分布和原數據集的不一樣了,會引入估計偏差。
此種方法不是很常用,除非數據量真的很少。

訓練模型:交叉驗證