天天看點

5折交叉驗證_機器學習幹貨交叉驗證(Cross Validation)詳解

5折交叉驗證_機器學習幹貨交叉驗證(Cross Validation)詳解

如果感興趣,歡迎點選上方“關注”,點選右下角「在看」分享給身邊好友!

交叉驗證也稱為循環估計,是統計上将資料樣本切割成較小集合的使用方法,由Seymour Geisser提出。

交叉驗證應用場景主要在模型訓練中,在給定的樣本空間中,拿出大部分樣本作為訓練集,小部分樣本使用剛建立的模型進行測試,并求這小部分樣本的預測誤差或者預測精度,同時記錄它們的加和平均值,這個過程疊代K次,即K折交叉。把每個樣本的預測誤差平方加和,稱為預測誤差。

交叉驗證的目的

  • 從有限的學習資料中擷取盡可能多的有效資訊;
  • 交叉驗證從多個方向開始學習樣本的,可以有效地避免陷入局部最小值;
  • 可以在一定程度上避免過拟合問題;

常見的交叉驗證形式

簡單交叉驗證:将原始資料随機分為兩組,一組作為訓練集,一組作為驗證集,利用訓練集訓練分類器,然後利用驗證集驗證模型,記錄最後的分類準确率的性能名額。

一般來說,簡單交叉驗證并非一種交叉驗證,因為資料并沒有交叉使用。随機從最初的樣本中選出部分,形成交叉驗證資料,而剩餘的就當作訓練資料。一般來說,少于原本樣本三分之一的資料被選做驗證資料。

優點:好處的處理簡單,隻需随機把原始資料分為兩組即可!

缺點:嚴格意義來說簡單交叉驗證并不能算是CV,因為這種方法沒有達到交叉的思想,由于是随機地将原始資料分組,是以最後驗證集分類準确率的高低與原始資料的分組有很大的關系,是以這種方法得到的結果其實并不具有說服性!

K-fold交叉驗證:初始采樣分割成K個子樣本,一個單獨的子樣本被保留作為驗證模型的資料,其他K-1個樣本用來訓練。交叉驗證重複K次,每個子樣本驗證一次,平均K次的結果或者使用其它結合方式,得到一個單一估測。這個方法的優勢在于,同時重複運用随機産生的子樣本進行訓練和驗證,每次的結果驗證一次,10折交叉驗證是最常用的。

優點:K-CV可以有效地避免過學習以及欠學習狀态的發生,最後得到的結果也比較具有說服性。

留一驗證:意指隻使用原本樣本中的一項來當作驗證資料,而剩餘的則留下來當作訓練資料。這個步驟一直持續到每個樣本都被當作一次驗證資料。事實上,這等同于K-fold交叉驗證是一樣的,其中K為原本樣本個數。在某些情況下是存在有效率的演算法,如使用kernel regression和Tikhonov regularization

驗證方法選擇

到底應該選擇哪一種方法呢?其實很簡單,如果我們隻是對資料做一個初步的模型建立,不是要做深入分析的話,簡單交叉驗證就可以,否則就用k折交叉驗證,在樣本量少的時候,使用留一交叉驗證。

以KFold進行案例分析

from sklearn.datasets import load_irisfrom sklearn.model_selection import StratifiedKFold,cross_val_scorefrom sklearn.linear_model import LogisticRegression iris = load_iris() print('Iris labels:\n{}'.format(iris.target)) logreg = LogisticRegression() strKFold = StratifiedKFold(n_splits=3,shuffle=False,random_state=0) scores = cross_val_score(logreg,iris.data,iris.target,cv=strKFold) print("straitified cross validation scores:{}".format(scores)) print("Mean score of straitified cross validation:{:.2f}".format(scores.mean()))
           

繼續閱讀