1、簡單交叉驗證
將資料隨機打亂分成兩份,一部分作為訓練集,另一部分作為測試集。(比例一般為訓練集70%,測試集30%)。使用訓練集在各種條件下訓練模型,得到不同的模型,在測試集上驗證各個模型的測試誤差,從而選出誤差最小的模型。
2、k折交叉驗證
應用的最多,最實用的就是k折交叉驗證(k-fold cross validation)。隨機將已給的資料平均切分為k個互不相交的大小相同的子集;然後利用k-1個子集的資料來訓練模型,利用餘下的1份子集作測試模型;將這一過程對可能的s種選擇重複進行,就是說訓練k次,產生k個模型;最後選出k次評測中平均測試誤差最小的模型。
3、留一交叉驗證
k折的特殊情形是k=n(n是給定的資料集容量),稱為留一交叉驗證。比如樣本數量n為1000個,則分成1000份,每份都進行訓練。往往在資料缺乏的情況下使用。
(介紹參考自李航的《統計學習方法》)
1、一般在使用深度學習演算法進行訓練時就用簡單交叉驗證,train和val的比例看情況,保證資料量情況下,即訓練不會發生欠擬合的情況下,驗證集當然越大越好。k-fold較少使用。因為資料量一般比較充足,如果資料量少的話,就不適合使用dnn進行訓練了,會發生欠擬合;資料量如果很大,使用k-fold時間成本又太高,而且如果資料集和模型適合深度學習的話,train loss曲線一般比較絲滑,相
比傳統機器學習不易發生過擬合現象, 發生了過擬合,根據loss曲線也能及時切斷。
k折交叉驗證主要用在傳統機器學習上,資料量一般較小,訓練集易發生過擬合的情況下。據說10是經驗數值,5折用的也比較多,畢竟快。如果2折測試集精度也很高的話,那說明模型泛化能力超好。使用k-fold會產生k個模型,可以挑乙個精度最高的模型,不過有時在驗證集裡精度越高也可能導致泛化效能較差,最好的方法是staking這k個模型,魯棒性更好,但若用在深度學習時間成本也極高。
留一法,每折中基本所有的樣本都用於訓練模型,因此最接近原始樣本的分布。至今沒有用到過,感覺能用到這種驗證方案的資料集得有多小,訓練出的模型似乎也不是很可靠,不排除吹毛求疵的情況。
scikit learning 交叉驗證
import numpy as np from sklearn import datasets from sklearn.cross validation import train test split from sklearn.neighbors import kneighborsclassifi...
交叉驗證(cross validation)
交叉驗證是資料分析時模型選擇的方法之一,將資料集分為三份,分別為訓練集 training set 驗證集 valication set 和測試集 test set 分別功能為訓練模型,選擇模型和對學習方法的評估。其演算法的思想為重複的使用資料,使得模型的精度越來越高。交叉驗證的方法有以下三種 1.簡...
交叉驗證(Cross validation
交叉驗證 cross validation 交叉驗證用於防止模型過於複雜而引起的過擬合 作用 如何交叉驗證 我這裡主要介紹k交叉驗證 1 將資料集分成k份 2 對於每乙個模型 拿多項式回歸舉例,m 2為乙個模型,m 3為乙個模型。我們主要就是尋找最好的m for j 1,2,k 將除第j份的所有資料...