数据集的划分--训练集、验证集和测试集
前言
????????在機(jī)器學(xué)習(xí)中,經(jīng)常提到訓(xùn)練集和測(cè)試集,驗(yàn)證集似有似無(wú)。感覺(jué)挺好奇的,就仔細(xì)查找了文獻(xiàn)。以下談?wù)動(dòng)?xùn)練集、驗(yàn)證集和測(cè)試集。
1.為什么要?jiǎng)澐謹(jǐn)?shù)據(jù)集為訓(xùn)練集、驗(yàn)證集和測(cè)試集?
????????做科研,就要提出問(wèn)題,找到解決方法,并證明其有效性。這里的工作有3個(gè)部分,一個(gè)是提出問(wèn)題,一個(gè)是找到解決方法,另一個(gè)是證明有效性。每一個(gè)部分都可以作為科研的對(duì)象,研究的越靠前,則越偏向科學(xué),越靠后,則越偏向技術(shù),因此叫做科學(xué)與技術(shù)。
????????在人工智能領(lǐng)域,證明一個(gè)模型的有效性,就是對(duì)于某一問(wèn)題,有一些數(shù)據(jù),而我們提出的模型可以(部分)解決這個(gè)問(wèn)題,那如何來(lái)證明呢?這和我們平時(shí)的考試也是一樣的,證明我們掌握了某類知識(shí),就是去參加考試。
????????好,那么如何設(shè)計(jì)考試,讓這個(gè)考試可以較為客觀的考察出每個(gè)人的能力呢(注意,不是讓每個(gè)人都得最高分)?回想我們的高中階段,有一些教材,讓我們平時(shí)學(xué)習(xí)其基本知識(shí)(訓(xùn)練集),有一些模擬考試,讓我們知道我們到底掌握的怎么樣,然后再改進(jìn)我們的學(xué)習(xí)(驗(yàn)證集),最后的高考決定我們的去向(測(cè)試集)。這樣的類比,是不是就很清楚了。
2.訓(xùn)練集、驗(yàn)證集和測(cè)試集
訓(xùn)練集:顧名思義指的是用于訓(xùn)練的樣本集合,主要用來(lái)訓(xùn)練神經(jīng)網(wǎng)絡(luò)中的參數(shù)。
驗(yàn)證集:從字面意思理解即為用于驗(yàn)證模型性能的樣本集合.不同神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集上訓(xùn)練結(jié)束后,通過(guò)驗(yàn)證集來(lái)比較判斷各個(gè)模型的性能.這里的不同模型主要是指對(duì)應(yīng)不同超參數(shù)的神經(jīng)網(wǎng)絡(luò),也可以指完全不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)。
測(cè)試集:對(duì)于訓(xùn)練完成的神經(jīng)網(wǎng)絡(luò),測(cè)試集用于客觀的評(píng)價(jià)神經(jīng)網(wǎng)絡(luò)的性能。
3.如何劃分訓(xùn)練集、驗(yàn)證集和測(cè)試集
????????這個(gè)問(wèn)題其實(shí)非?;A(chǔ),也非常明確,在Scikit-learn里提供了各種各樣的劃分方法。無(wú)論是單一的訓(xùn)練集、驗(yàn)證集和測(cè)試集,還是進(jìn)行交叉驗(yàn)證,你都會(huì)找到調(diào)用的方法,因此我們這里主要介紹兩種常見(jiàn)的方法。
前人給出訓(xùn)練集、驗(yàn)證集和測(cè)試集
對(duì)于這種情況,那么只能跟隨前人的數(shù)據(jù)劃分進(jìn)行,一般的比賽也是如此。一定不要使用測(cè)試集來(lái)調(diào)整性能(測(cè)試集已知的情況下),盡管存在使用這種方法來(lái)提升模型的性能的行為,但是我們并不推薦這么做。最正常的做法應(yīng)當(dāng)是使用訓(xùn)練集來(lái)學(xué)習(xí),并使用驗(yàn)證集來(lái)調(diào)整超參數(shù)。當(dāng)在驗(yàn)證集上取得最優(yōu)的模型時(shí),此時(shí)就可以使用此模型的超參數(shù)來(lái)重新訓(xùn)練(訓(xùn)練集+驗(yàn)證集),并用測(cè)試集評(píng)估最終的性能。
我們首先說(shuō)明加入驗(yàn)證集重新訓(xùn)練和不加有啥區(qū)別,從理論上講,一方面學(xué)習(xí)的樣本增多,應(yīng)當(dāng)是會(huì)提升模型性能的,第二,其在驗(yàn)證集上取得最優(yōu)的模型與驗(yàn)證集的分布的契合度是最高的,因此最終的模型會(huì)更接近驗(yàn)證集的分布。
其次再說(shuō)明驗(yàn)證集和測(cè)試集上的性能差異。事實(shí)上,在驗(yàn)證集上取得最優(yōu)的模型,未必在測(cè)試集上取得最優(yōu)。其原因就是訓(xùn)練的模型是否對(duì)于該問(wèn)題有著較好的泛化能力,即沒(méi)有對(duì)驗(yàn)證集產(chǎn)生過(guò)擬合現(xiàn)象。正因?yàn)橛羞@種情況的發(fā)生,才會(huì)有人使用測(cè)試集的最優(yōu)值作為最終的結(jié)果(而不管驗(yàn)證集的好壞)。
前人沒(méi)有明確給出數(shù)據(jù)集的劃分
這時(shí)候可以采取第一種劃分方法,對(duì)于樣本數(shù)較小的數(shù)據(jù)集,同樣可以采取交叉驗(yàn)證的方法。
交叉驗(yàn)證的方法的使用場(chǎng)景有很多,我們這里是針對(duì)不同的模型的性能好壞進(jìn)行評(píng)估。
使用交叉驗(yàn)證,可以獲得更為客觀的性能差異。當(dāng)使用第一種方法時(shí),我們更建議使用P值來(lái)做顯著性檢驗(yàn),從而保證性能差異的客觀性。而使用第二種方法,即交叉驗(yàn)證時(shí),我們選取其性能表現(xiàn)的均值作為最終的結(jié)果,更能體現(xiàn)該模型的泛化能力。
???????????????????????????????? 1.存在驗(yàn)證集
????????????????????????????????這里五倍交叉驗(yàn)證是用于進(jìn)行調(diào)參,此時(shí)不接觸測(cè)試集。
????????????????????????????????數(shù)據(jù)集首先劃分出訓(xùn)練集與測(cè)試集(可以是4:1或者9:1)。
????????????????????????????????其次,在訓(xùn)練集中,再劃分出驗(yàn)證集(通常也是4:1或者9:1)
????????????????????????????????然后對(duì)于訓(xùn)練集和驗(yàn)證集進(jìn)行5折交叉驗(yàn)證,選取出最優(yōu)的超參數(shù),然后把訓(xùn)練集和驗(yàn)證集一起訓(xùn)練出最終的模型。
????????????????????????????????2.不存在驗(yàn)證集
????????????????????????????????該情況通常是對(duì)比不同的模型,如自己的模型和別人的模型的性能好壞。
????????????????????????????????只需要把數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集即可,然后選取5次試驗(yàn)的平均值作為最終的性能評(píng)價(jià)。
4.驗(yàn)證集和測(cè)試集的區(qū)別
????????那么,訓(xùn)練集、校驗(yàn)集和測(cè)試集之間又有什么區(qū)別呢?一般而言,訓(xùn)練集與后兩者之間較易分辨,校驗(yàn)集和測(cè)試集之間的概念較易混淆.個(gè)人是從下面的角度來(lái)理解的:
-
神經(jīng)網(wǎng)絡(luò)在網(wǎng)絡(luò)結(jié)構(gòu)確定的情況下,有兩部分影響模型最終的性能,一是普通參數(shù)(比如權(quán)重w和偏置b),另一個(gè)是超參數(shù)(例如學(xué)習(xí)率,網(wǎng)絡(luò)層數(shù)).普通參數(shù)我們?cè)谟?xùn)練集上進(jìn)行訓(xùn)練,超參數(shù)我們一般人工指定(比較不同超參數(shù)的模型在校驗(yàn)集上的性能).那為什么我們不像普通參數(shù)一樣在訓(xùn)練集上訓(xùn)練超參數(shù)呢?(花書給出了解答)一是:超參數(shù)一般難以優(yōu)化(無(wú)法像普通參數(shù)一樣通過(guò)梯度下降的方式進(jìn)行優(yōu)化).二是:超參數(shù)很多時(shí)候不適合在訓(xùn)練集上進(jìn)行訓(xùn)練,例如,如果在訓(xùn)練集上訓(xùn)練能控制模型容量的超參數(shù),這些超參數(shù)總會(huì)被訓(xùn)練成使得模型容量最大的參數(shù)(因?yàn)槟P腿萘吭酱?訓(xùn)練誤差越小),所以訓(xùn)練集上訓(xùn)練超參數(shù)的結(jié)果就是模型絕對(duì)過(guò)擬合.
-
正因?yàn)槌瑓?shù)無(wú)法在訓(xùn)練集上進(jìn)行訓(xùn)練,因此我們單獨(dú)設(shè)立了一個(gè)驗(yàn)證集,用于選擇(人工訓(xùn)練)最優(yōu)的超參數(shù).因?yàn)轵?yàn)證集是用于選擇超參數(shù)的,因此校驗(yàn)集和訓(xùn)練集是獨(dú)立不重疊的.
-
測(cè)試集是用于在完成神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程后,為了客觀評(píng)價(jià)模型在其未見(jiàn)過(guò)(未曾影響普通參數(shù)和超參數(shù)選擇)的數(shù)據(jù)上的性能,因此測(cè)試與驗(yàn)證集和訓(xùn)練集之間也是獨(dú)立不重疊的,而且測(cè)試集不能提出對(duì)參數(shù)或者超參數(shù)的修改意見(jiàn),只能作為評(píng)價(jià)網(wǎng)絡(luò)性能的一個(gè)指標(biāo).
為了方便清楚直觀的了解,上一個(gè)表格:
5.綜述
????????至此,我們可以將神經(jīng)網(wǎng)絡(luò)完整的訓(xùn)練過(guò)程歸結(jié)為一下兩個(gè)步驟:
????????1.訓(xùn)練普通參數(shù).在訓(xùn)練集(給定超參數(shù))上利用學(xué)習(xí)算法,訓(xùn)練普通參數(shù),使得模型在訓(xùn)練集上的誤差降低到可接受的程度(一般接近人類的水平).
????????2.'訓(xùn)練’超參數(shù).在驗(yàn)證集上驗(yàn)證網(wǎng)絡(luò)的generalization error(泛化能力),并根據(jù)模型性能對(duì)超參數(shù)進(jìn)行調(diào)整.
????????重復(fù)1和2兩個(gè)步驟,直至網(wǎng)絡(luò)在驗(yàn)證集上取得較低的generalization error.此時(shí)完整的訓(xùn)練過(guò)程結(jié)束.在完成參數(shù)和超參數(shù)的訓(xùn)練后,在測(cè)試集上測(cè)試網(wǎng)絡(luò)的性能.
6.附言
說(shuō)到底:
-
驗(yàn)證集是一定需要的;
-
如果驗(yàn)證集具有足夠泛化代表性,是不需要再整出什么測(cè)試集的;
-
整個(gè)測(cè)試集往往就是為了在驗(yàn)證集只是非訓(xùn)練集一個(gè)小子集的情況下,好奇一下那個(gè)靠訓(xùn)練集(訓(xùn)練)和驗(yàn)證集(調(diào)參)多次接力訓(xùn)練出來(lái)的模型是不是具有了泛化性能,因而加試一下圖個(gè)確定。
總結(jié)
以上是生活随笔為你收集整理的数据集的划分--训练集、验证集和测试集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab格拉布斯准则程序,基于格拉布
- 下一篇: 基于贝叶斯网络模型的自适应测评