机器学习笔记:训练集、验证集与测试集
在學習《深度學習原理與pythorch實戰》這本書的4.3.4劃分數據集這一小節(即76頁劃分數據集)的過程中,提到了訓練集、測試集與驗證集這幾個概念,以及為何相對于通用的訓練集、測試集,多了一個驗證集的概念。不過這本書講解還是沒有那么透徹清晰,基于此查了很多資料,又加深鞏固理解了訓練集、測試集和驗證集的概念。
一、定義
Ripley, B.D在《Pattern Recognition and Neural Networks》(1996)中給出了這三個詞的定義。
- Training set: A set of examples used for learning, which is to fit the parameters [i.e., weights] of the classifier.
- Validation set: A set of examples used to tune the parameters [i.e., architecture, not weights] of a classifier, for example to choose the number of hidden units in a neural network.
- Test set: A set of examples used only to assess the performance [generalization] of a fully specified classifier.
翻譯為中文大白話就是
訓練集(train set) —— 用于訓練模型(擬合參數):即模型擬合的數據樣本集合,如通過訓練擬合一些參數來建立一個分類器。
驗證集(validation set)——?用于確定網絡結構或者控制模型復雜程度的超參數(擬合超參數):是模型訓練過程中單獨留出的樣本集,它可以用于調整模型的超參數和用于對模型的能力進行初步評估。 通常用來在模型迭代訓練時,用以驗證當前模型泛化能力(準確率,召回率等),防止過你話的現象出現,以決定如何調整超參數。具體原理參照本文的二(三)。
測試集(test set) —— 用來評估模最終模型的性能如何(評價模型好壞):測試集沒有參于訓練,主要是測試訓練好的模型的準確能力等,但不能作為調參、選擇特征等算法相關的選擇的依據。說白了就只用于評價模型好壞的一個數據集。
二、圖解訓練集、測試集和驗證集
(一)是否參與訓練
基于數據集是否參與了訓練過程,可通過下圖來理解,即測試集完全沒參與訓練,它只是用于測試,評估模型到底性能如何
(二)訓練集與測試集
這種最常見的方法就是將數據分為訓練集和測試集兩個部分,先用訓練集訓練算法模型,再用測試集測試準確率,示意圖如下。
?(三)訓練集、測試集與驗證集
????????在機器學習的上下文中,超參數是在開始學習過程之前設置值的參數,而不是通過訓練得到的參數數據。通常情況下,需要對超參數進行優化,給學習機選擇一組最優超參數,以提高學習的性能和效果。
? ? ? ? 但是我們思考一下,如果數據集僅僅分為訓練集和測試集,那么我們通過修改一些超參數(不能通過學習來自動調整的參數)來降低誤差,但是這種方法在實際中的應用效果卻并沒有想象的那么好。這是因為超參數都是基于測試集來調整的,就相當于把測試集當成了訓練超參數的數據。這樣對于新的數據效果不一定會更好。
? ? ? ? 于是就想出一種解決辦法,即保留一個數據集作為驗證集,在這些步驟做完之后再進行最終的驗證。
?
?而訓練集、驗證集和測試集的工作流程如下圖所示,可以很明顯看到訓練集用于訓練模型,驗證集用于調節超參數,而測試集就只是用于評估模型好壞的
(四)交叉驗證
?下圖示意3折交叉驗證法,如下所示
三、數據集劃分原則
數據劃分的方法并沒有明確的規定,不過可以參考3個原則:
1.對于小規模樣本集(幾萬量級),常用的分配比例是 60% 訓練集、20% 驗證集、20% 測試集。
2.對于大規模樣本集(百萬級以上),只要驗證集和測試集的數量足夠即可,例如有 100w 條數據,那么留 1w 驗證集,1w 測試集即可。1000w 的數據,同樣留 1w 驗證集和 1w 測試集。
3.超參數越少,或者超參數很容易調整,那么可以減少驗證集的比例,更多的分配給訓練集。
總結
以上是生活随笔為你收集整理的机器学习笔记:训练集、验证集与测试集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssm基于android的个人健康打卡系
- 下一篇: 人脸识别训练集/验证集/测试集