交叉驗證(Cross validation)總結
一 什麼是CV
二 為什麼需要CV
三 兩種CV
1. Hold-out validation
使用 hold out (可以理解為保留,即保留部分資料做驗證)方法,我們將初始資料集(initial dataset)分為訓練集(training dataset)和測試集(test dataset)兩部分。訓練集用於模型的訓練,測試集進行效能的評價。然而,在實際機器學習的應用中,我們常常需要反覆除錯和比較不同的引數設定以提高模型在新資料集上的預測效能。這一調參優化的過程就被稱為模型的選擇(model selection):select the optimal values of tuning parameters (also called hyperparameters)。然而,如果我們重複使用測試集的話,測試集等於稱為訓練集的一部分,此時模型容易發生過擬合。
一個使用 holdout 方法進行模型選擇的較好的方式是將資料集做如下的劃分:
-
訓練集(training set);
The training set is used to fit the different models
-
評價集(validation set);
The performance on the validation set is then used for the model selection。
常用的做法是,超參選取多個value進行模型的訓練,分被使用validation set 進行評估,選取效果最佳的引數value。
-
測試集(test set);
The advantage of having a test set that the modelhasn’t seen before during the training and model selection steps is that we can obtain a less biased estimate of its ability to generalize to new data. 對模型測建立過程無影響,測試更準確
下圖闡述了 holdout cross-validation 的工作流程,其中我們重複地使用 validation set 來評估引數調整時(已經歷訓練的過程)模型的效能。一旦我們對引數值滿意,我們就將在測試集(新的資料集)上評估模型的泛化誤差。
holdout 方法的弊端在於效能的評估對training set 和 validation set分割的比例較為敏感。在NG的課程所說, hold out cv直選擇了部分資料(常用70%)進行模型的訓練,對資料少、資料昂貴的情況並不合適,這是k-fold cv 可以提供更多的選擇
2 k-fold validation
在 k-fold cross_validation,將訓練集分為 k folds(k個部分),其中的 k-1 folds 用於模型的訓練,1 fold 用於測試。使用一個模型,將這一過程重複 k 次,我們便可獲得 這個模型的效能評價;針對不同的模型(例如LR、SVM、NN等),依次執行上述過程,計算得到對應的效能。 這樣就可以選擇最優的model。 每個model都訓練了k詞,計算量較大。
k常選10. 如果資料較少,k應該選擇較大,以便使訓練資料更多。極限情況下,k = 樣本數,這樣validation subset只有一個,這種情況叫leave-one-out-cv。 下圖是流程圖
相關文章
- 交叉驗證(Cross Validation)原理小結ROS
- 理解「交叉驗證」(Cross Validation)ROS
- 【模型評估與選擇】交叉驗證Cross-validation: evaluating estimator performance模型ROSORM
- Java-Bean Validation後端校驗總結JavaBean後端
- 網路模型的交叉驗證模型
- K重交叉驗證和網格搜尋驗證
- Machine Learning(14) - K Fold Cross ValidationMacROS
- 理解ASP.NET Core - 模型繫結&驗證(Model Binding and Validation)ASP.NET模型
- js各種驗證總結JS
- JS函式驗證總結JS函式
- 模型評估與改進:交叉驗證模型
- Spring總結--配置驗證碼Spring
- validation客戶端驗證框架使用手冊客戶端框架
- 多折交叉驗證有什麼用處
- Laravel 的 Validation 檢索驗證錯誤訊息Laravel
- php 驗證格式的函式總結PHP函式
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- Struts2教程5:使用Validation框架驗證資料框架
- 【總結】Java實現簡訊驗證碼Java
- 總結-SpringMVC實現驗證碼介面SpringMVC
- oracle使用者登入驗證總結Oracle
- 如何理解過擬合、正則化和交叉驗證
- Laravel 中 validation 驗證 返回中文提示 全域性設定Laravel
- Spring Boot之Validation自定義實現總結Spring Boot
- 一個沒有技術含量的 validation 驗證層輪子
- WebGeeker-Validation: 一個強大的 PHP 引數驗證器WebPHP
- Spring Boot之驗證模組應用總結2Spring Boot
- 【乾貨】驗證碼的常見型別總結型別
- 認證總結
- Rust 交叉編譯與條件編譯總結Rust編譯
- 使用 Message Manager 實現開箱即用的驗證(Validation)資訊丟擲
- [譯]SpringMVC自定義驗證註解(SpringMVC custom validation annotations)SpringMVC
- PHP驗證碼的語言包&預警資訊通知總結PHP
- Gin 模型繫結驗證模型
- R語言邏輯迴歸、ROC曲線和十折交叉驗證R語言邏輯迴歸
- 訓練集(train set),驗證集(validation set)和測試集(test set)AI
- 工作經驗總結
- vue經驗總結Vue