机器学习:样本集、验证集(开发集)、测试集
樣本集、驗證集(開發(fā)集)、測試集。
Ripley, B.D(1996)在他的經(jīng)典專著Pattern Recognition and Neural Networks中給出了這三個詞的定義。
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.
訓(xùn)練集:學(xué)習(xí)樣本數(shù)據(jù)集,通過匹配一些參數(shù)來建立一個分類器。建立一種分類的方式,主要是用來訓(xùn)練模型的。
驗證集:對學(xué)習(xí)出來的模型,微調(diào)分類器的參數(shù),如在神經(jīng)網(wǎng)絡(luò)中選擇隱藏單元數(shù)。驗證集還用來確定網(wǎng)絡(luò)結(jié)構(gòu)或者控制模型復(fù)雜程度的參數(shù)。
測試集:主要用于測試訓(xùn)練好的模型的分類能力(識別率等)
在有監(jiān)督(supervise learning)機器學(xué)習(xí)中,數(shù)據(jù)集常被分成2~3個部分:?
訓(xùn)練集(train set):用來估計模型;?
驗證集(validation set):確定網(wǎng)絡(luò)結(jié)構(gòu)或者控制模型復(fù)雜程度的參數(shù);?
測試集(test set):檢驗最終選擇最優(yōu)的模型的性能如何。
一個典型的劃分是訓(xùn)練集占總樣本的50%,而其它各占25%,三部分都是從樣本中隨機抽取。樣本少的時候,上面的劃分就不合適了。常用的是留少部分做測試集。然后對其余N個樣本采用K折交叉驗證法。就是將樣本打亂,然后均勻分成K份,輪流選擇其中K-1份訓(xùn)練,剩余的一份做驗證,計算預(yù)測誤差平方和,最后把K次的預(yù)測誤差平方和再做平均作為選擇最優(yōu)模型結(jié)構(gòu)的依據(jù)。特別的K取N,就是留一法(leave one out)。
training set是用來訓(xùn)練模型或確定模型參數(shù)的,如ANN中權(quán)值等; validation set是用來做模型選擇(model selection),即做模型的最終優(yōu)化及確定的,如ANN的結(jié)構(gòu);而 test set則純粹是為了測試已經(jīng)訓(xùn)練好的模型的推廣能力。當(dāng)然,test set這并不能保證模型的正確性,他只是說相似的數(shù)據(jù)用此模型會得出相似的結(jié)果。但實際應(yīng)用中,一般只將數(shù)據(jù)集分成兩類,即training set 和test set。
?
1.傳統(tǒng)的機器學(xué)習(xí)領(lǐng)域中,由于收集到的數(shù)據(jù)量往往不多,比較小,所以需要將收集到的數(shù)據(jù)分為三類:訓(xùn)練集、驗證集、測試集。也有人分為兩類,就是不需要測試集。
比例根據(jù)經(jīng)驗不同而不同,這里給出一個例子,如果是三類,可能是訓(xùn)練集:驗證集:測試集=6:2:2;如果是兩類,可能是訓(xùn)練集:驗證集=7:3。因為數(shù)據(jù)量不多,所以驗證集和測試集需要占的數(shù)據(jù)比例比較多。
2.在大數(shù)據(jù)時代的機器學(xué)習(xí)或者深度學(xué)習(xí)領(lǐng)域中,如果還是按照傳統(tǒng)的數(shù)據(jù)劃分方式不是十分合理,因為測試集和驗證集用于評估模型和選擇模型,所需要的數(shù)據(jù)量和傳統(tǒng)的數(shù)據(jù)量差不多,但是由于收集到的數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于傳統(tǒng)機器學(xué)習(xí)時代的數(shù)據(jù)量,所以占的比例也就要縮小。比如我們擁有1000000,這么多的數(shù)據(jù),訓(xùn)練集:驗證集:測試集=98:1:1。如果是兩類,也就是相同的道理。
?
小數(shù)據(jù)時代:?70%(訓(xùn)練集)/30%(測試集)或者60%(訓(xùn)練集)/20%(驗證集)/20%(測試集)?
大數(shù)據(jù)時代:?驗證集和測試集的比例要逐漸減小,比如:?980000/10000/10000
驗證集和測試集的作用
深度學(xué)習(xí)需要大量的數(shù)據(jù),我們可能會采用網(wǎng)上爬取的方式獲得訓(xùn)練集,容易出現(xiàn)訓(xùn)練集和驗證集、測試集分布不一致的情況,由于驗證集的目的就是為了驗證不同的算法,選取效果好的。所以確保驗證集和測試集的數(shù)據(jù)來自同一分布可以加快訓(xùn)練速度,模型在測試集上也會獲得較好的效果。
測試集的目的是對最終選定的神經(jīng)網(wǎng)絡(luò)系統(tǒng)做出無偏評估。(測試集可以不要)
沒有測試集時,驗證集也會被稱為測試集,但是人們是把這里的測試集當(dāng)成簡單交叉驗證集使用。
搭建訓(xùn)練驗證集和測試集能夠加速神經(jīng)網(wǎng)絡(luò)的集成,也可以更有效地衡量算法的偏差和方差。從而幫助我們更高效地選擇合適的方法來優(yōu)化算法。
| 驗證集誤差 | 11% | 16% | 30% | 1% |
| ? | High variance | high bias | high bias & high variance | low bias & low variance |
上述表格基于假設(shè):最優(yōu)誤差(基礎(chǔ)誤差)≈0%,訓(xùn)練集和驗證集數(shù)據(jù)來自相同分布。
?
?
訓(xùn)練集和測試集
機器學(xué)習(xí)模型需要訓(xùn)練去更新模型中的各個參數(shù),因此需要提供訓(xùn)練集(Training Set)作為訓(xùn)練樣本,假設(shè)此訓(xùn)練集由數(shù)據(jù)生成分布PdataPdata生成。同時為了描述這個模型的泛化能力,需要一個同樣由PdataPdata生成的測試集(Test Set)進(jìn)行測試,得出其泛化誤差。可以得知,訓(xùn)練集和測試集是獨立同分布的,在訓(xùn)練階段,模型觀測不到測試集。
檢驗集
超參數(shù)
在討論檢驗集之前,有必要先提到超參數(shù)(hyperparameter)這個概念。超參數(shù)不能或者難以通過機器學(xué)習(xí)算法學(xué)習(xí)得出,一般由專家經(jīng)過經(jīng)驗或者實驗選定,如廣義線性回歸中的多項式次數(shù),控制權(quán)值衰減的λλ等。容易想象到,不同的超參數(shù)選定控制了模型的容量和泛化能力,決定了模型的性能,事實上,超參數(shù)的調(diào)試(Tuning of the hyperparameter)是機器學(xué)習(xí)中很關(guān)鍵的一部分。?
這里我們假想一個場景:
我們有多個待選的權(quán)值衰減因子λλ,分別是λ1,?,λnλ1,?,λn,這些λλ的不同選擇代表了一個模型的不同超參數(shù)狀態(tài),其中有一個可能性能比較優(yōu)的超參數(shù),為了得到這個較為優(yōu)的超參數(shù),我們需要在多個[訓(xùn)練集,測試集]元組上訓(xùn)練測試,尋找最小的泛化誤差,直到找到合適的超參數(shù)為止。
由于監(jiān)督數(shù)據(jù)的獲取困難,一般來說沒有那么多數(shù)據(jù)用來劃分這個元組,因此一般的做法是:
將數(shù)據(jù)集按一定比例劃分為訓(xùn)練集(大類)和測試集(Test set),其中測試集只在最后的測試泛化誤差的時候才能被模型觀察到,而在訓(xùn)練集(大類)中又將其按一定比例劃分為訓(xùn)練集(Training Set)和檢驗集(validation set),其中訓(xùn)練集用于模型訓(xùn)練,檢驗集用于尋找最佳的超參數(shù)。一般模型會在訓(xùn)練集上訓(xùn)練多次,在檢驗集上檢驗多次,直到得到滿意的檢驗誤差,然后才能交給測試集得出泛化誤差。
交叉檢驗(Cross Validation)
在實際應(yīng)用中,因為數(shù)據(jù)集的數(shù)量限制,常常采用交叉檢驗作為檢驗手段1,其中k折交叉檢驗(k-folds cross validation)最為常用,其中k=10k=10最為常見。其方法十分簡單,就是將訓(xùn)練集(大類)均分為KK份,然后分別取出其中的第ii個作為檢驗集,其余的i?1i?1作為訓(xùn)練集訓(xùn)練,然后再檢驗集上檢驗。進(jìn)行了KK次該操作之后,采用平均值作為最終的交叉驗證誤差(CV Error),用于選擇模型。?
其中LiLi是第ii檢驗集的平均誤差?
以上主要介紹了訓(xùn)練集,檢驗集,測試集之間的關(guān)系,以及引進(jìn)檢驗集的目的:就是為了多次比較,得出較好的超參數(shù),進(jìn)行模型選擇。
?
開發(fā)集和測試集的概念
繼續(xù)分析我們之前提到的貓咪圖片的案例:現(xiàn)在你負(fù)責(zé)運營著一個移動端 app,用戶會向這個 app 上傳許多不同內(nèi)容的圖片。而你希望這個 app 能夠從圖片中自動地找到有貓的圖片。
你的團隊已經(jīng)在不同的網(wǎng)站下載了含有貓的圖片(正樣本,又譯作正例),以及不含有貓的圖片(負(fù)樣本,又譯作反例),從而得到了一個巨型的數(shù)據(jù)集。他們將數(shù)據(jù)集按照 70% / 30% 的比例劃分為訓(xùn)練集(training set)和測試集(test set),并且使用這些數(shù)據(jù)構(gòu)建出了一個在訓(xùn)練集和測試集上均表現(xiàn)良好的貓咪檢測器。
可當(dāng)你將這個分類器(classifier)部署到移動應(yīng)用中時,卻發(fā)現(xiàn)它的性能相當(dāng)之差!
究竟是什么原因?qū)е碌哪?#xff1f;
你會發(fā)現(xiàn),從網(wǎng)站上下載作為訓(xùn)練集的圖片與用戶上傳的圖片有較大的區(qū)別——用戶上傳的圖片大部分是用手機拍攝的,此類型的圖片往往分辨率較低,且模糊不清,采光也不夠理想。由于用來進(jìn)行訓(xùn)練和測試的數(shù)據(jù)集圖片均取自網(wǎng)站,這就導(dǎo)致了算法沒能夠很好地泛化(generalize)到我們所關(guān)心的手機圖片的實際分布(actual distribution)情況上。
在大數(shù)據(jù)時代來臨前,機器學(xué)習(xí)中的普遍做法是使用 70% / 30% 的比例來隨機劃分出訓(xùn)練集和測試集。這種做法的確可行,但在越來越多的實際應(yīng)用中,訓(xùn)練數(shù)據(jù)集的分布(例如上述案例中的網(wǎng)站圖片)與人們最終所關(guān)心的分布情況(例如上述案例中的手機圖片)往往不同,此時執(zhí)意要采取這樣的劃分則是一個壞主意。
我們通常認(rèn)為:
-
訓(xùn)練集(training set)用于運行你的學(xué)習(xí)算法。
-
開發(fā)集(development set)用于調(diào)整參數(shù),選擇特征,以及對學(xué)習(xí)算法作出其它決定。有時也稱為留出交叉驗證集(hold-out cross validation set)。
-
測試集(test set)用于評估算法的性能,但不會據(jù)此決定使用什么學(xué)習(xí)算法或參數(shù)。
在定義了開發(fā)集(development set)和測試集(test set)后,你的團隊將可以嘗試許多的想法,比如調(diào)整學(xué)習(xí)算法的參數(shù)來探索出哪些參數(shù)的效果最好。開發(fā)集和測試集能夠幫助你的團隊快速檢測算法性能。
換而言之,開發(fā)集和測試集的使命就是引導(dǎo)你的團隊對機器學(xué)習(xí)系統(tǒng)做出最重要的改變。
所以你應(yīng)當(dāng)這樣處理:
合理地設(shè)置開發(fā)集和測試集,使之近似模擬可能的實際數(shù)據(jù)情況,并處理得到一個好的結(jié)果。
也就是說你的測試集不應(yīng)該僅是簡單地將可用的數(shù)據(jù)劃分出 30%,尤其是將來獲取的數(shù)據(jù)(移動端圖片)在性質(zhì)上可能會與訓(xùn)練集(網(wǎng)站圖片)不同時。
如果你尚未推出移動端 app,那么可能還沒有任何的用戶,因此也無法獲取一些準(zhǔn)確的反饋數(shù)據(jù)來作為后續(xù)行動的依據(jù)。但你仍然能夠嘗試去模擬這種情況,例如邀請你的朋友用手機拍下照片并發(fā)送給你。當(dāng)你的 app 上線后,就能夠使用實際的用戶數(shù)據(jù)對開發(fā)集和測試集進(jìn)行更新。
如果你實在沒有途徑獲取近似將來實際情況的數(shù)據(jù),也可以從使用已有的網(wǎng)站圖片開始進(jìn)行嘗試。但你應(yīng)該意識到其中的風(fēng)險,它將導(dǎo)致系統(tǒng)不能夠很好地泛化(generalize)。
這就要求你主觀地進(jìn)行判斷,應(yīng)該投入多少來確定一個理想的開發(fā)集和測試集,但請不要假定你的訓(xùn)練集分布和測試集分布是一致的。盡可能地選出能夠反映你對最終性能期望的測試樣本,而不是使用那些在訓(xùn)練階段已有的數(shù)據(jù),這將避免不必要的麻煩。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xianhan/p/9156443.html
總結(jié)
以上是生活随笔為你收集整理的机器学习:样本集、验证集(开发集)、测试集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net core输出中文乱码的问
- 下一篇: subline Text3 插件安装