训练集(training)、验证集(validation)和测试集(test)
0.什么是訓(xùn)練集、驗(yàn)證集和測(cè)試集?
- 訓(xùn)練集(train):訓(xùn)練模型
- 驗(yàn)證集(val):評(píng)估模型
- 測(cè)試集(test):一旦找到了最佳參數(shù),就開(kāi)始最終訓(xùn)練
使用訓(xùn)練集訓(xùn)練多個(gè)網(wǎng)絡(luò)模型,再使用驗(yàn)證集測(cè)試這些網(wǎng)絡(luò),找到得分最高的那個(gè)網(wǎng)絡(luò)作為我們選擇的最佳網(wǎng)絡(luò),再將訓(xùn)練集和驗(yàn)證集合并,重新訓(xùn)練這個(gè)最佳網(wǎng)絡(luò),得到最佳網(wǎng)絡(luò)參數(shù)。
打個(gè)比方:我們現(xiàn)在有個(gè)任務(wù),但是解決這個(gè)任務(wù)的網(wǎng)絡(luò)有網(wǎng)絡(luò)A、網(wǎng)絡(luò)B和網(wǎng)絡(luò)C,如何找到效果最好的哪個(gè)?
對(duì)于train、validation和test的區(qū)分有簡(jiǎn)單留出、K折驗(yàn)證和重復(fù)K折驗(yàn)證三種,具體如下:
1. 簡(jiǎn)單留出驗(yàn)證的偽代碼
num_validation_samples=10000 # 驗(yàn)證集樣本數(shù) np.random.shuffle(data) # 通常需要打亂數(shù)據(jù)calidation_data=data[:num_calidation_samples] # 定義驗(yàn)證集data=data[num_calidation_samples:] # 截取剩余數(shù)據(jù)給變量data training_data=data[:] # 定義訓(xùn)練集:相當(dāng)于換個(gè)名字,實(shí)屬疑惑,感覺(jué)走彎路model=get_model() model.train(training_data) # 用train訓(xùn)練model validation_score=model.evaluate(validation_data) # 用val驗(yàn)證得分現(xiàn)在假設(shè)你已經(jīng)選好了網(wǎng)絡(luò)模型,開(kāi)始訓(xùn)練最終模型
總結(jié)
以上方法簡(jiǎn)單易理解,但是缺點(diǎn)也明顯:
- 如果樣本數(shù)量太少,驗(yàn)證集和測(cè)試集更少,無(wú)法在統(tǒng)計(jì)學(xué)上代表數(shù)據(jù)
- 劃分?jǐn)?shù)據(jù)前時(shí),進(jìn)行不同的隨機(jī)打亂則得到的模型性能差別可能很大
解決以上問(wèn)題的方法有一下兩種:
- K折驗(yàn)證
- 重復(fù)的K折驗(yàn)證
2. K折驗(yàn)證
如上,當(dāng)我們不確定多個(gè)模型哪個(gè)更好時(shí),通過(guò)K折驗(yàn)證找到loss最小的。
K折驗(yàn)證時(shí)將數(shù)據(jù)劃分為大小相同的K個(gè)分區(qū)。對(duì)于每個(gè)分區(qū)i,在剩余的K-1個(gè)分區(qū)上訓(xùn)練模型,然后再分區(qū)i上評(píng)估模型。最終分?jǐn)?shù)等于K個(gè)分?jǐn)?shù)的平均值。
3. 重復(fù)K折驗(yàn)證
如果可用數(shù)據(jù)相對(duì)較少,而你又需要盡可能精確評(píng)估模型,可以選擇帶有打亂數(shù)據(jù)的重復(fù)K折驗(yàn)證:多次使用K折驗(yàn)證,在每次使用K折驗(yàn)證前都先將數(shù)據(jù)打亂,最終分?jǐn)?shù)時(shí)每次K折驗(yàn)證分?jǐn)?shù)的均值(K折驗(yàn)證分?jǐn)?shù)又是每折的均值)。
總結(jié)
以上是生活随笔為你收集整理的训练集(training)、验证集(validation)和测试集(test)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 备战2022年5月软考高项 —— 信息系
- 下一篇: 随机微分方程