
數(shù)據(jù)在人工智能技術(shù)里是非常重要的!本篇文章將詳細(xì)給大家介紹3種數(shù)據(jù)集:訓(xùn)練集、驗證集、測試集。
同時還會介紹如何更合理的講數(shù)據(jù)劃分為3種數(shù)據(jù)集。最后給大家介紹一種充分利用有限數(shù)據(jù)的方式:交叉驗證法。
先用一個不恰當(dāng)?shù)谋扔鱽碚f明3種數(shù)據(jù)集之間的關(guān)系:
- 訓(xùn)練集相當(dāng)于上課學(xué)知識
- 驗證集相當(dāng)于課后的的練習(xí)題,用來糾正和強化學(xué)到的知識
- 測試集相當(dāng)于期末考試,用來最終評估學(xué)習(xí)效果

什么是訓(xùn)練集?
訓(xùn)練集(Training Dataset)是用來訓(xùn)練模型使用的。
在《一文看懂機器學(xué)習(xí)》里我們介紹了機器學(xué)習(xí)的7個步驟,訓(xùn)練集(Training Dataset)主要在訓(xùn)練階段使用。

什么是驗證集?
當(dāng)我們的模型訓(xùn)練好之后,我們并不知道他的表現(xiàn)如何。這個時候就可以使用驗證集(Validation Dataset)來看看模型在新數(shù)據(jù)(驗證集和測試集是不同的數(shù)據(jù))上的表現(xiàn)如何。同時通過調(diào)整超參數(shù),讓模型處于最好的狀態(tài)。

驗證集有2個主要的作用:
- 評估模型效果,為了調(diào)整超參數(shù)而服務(wù)
- 調(diào)整超參數(shù),使得模型在驗證集上的效果最好
說明:
- 驗證集不像訓(xùn)練集和測試集,它是非必需的。如果不需要調(diào)整超參數(shù),就可以不使用驗證集,直接用測試集來評估效果。
- 驗證集評估出來的效果并非模型的最終效果,主要是用來調(diào)整超參數(shù)的,模型最終效果以測試集的評估結(jié)果為準(zhǔn)。
什么是測試集?
當(dāng)我們調(diào)好超參數(shù)后,就要開始「最終考試」了。我們通過測試集(Test Dataset)來做最終的評估。

通過測試集的評估,我們會得到一些最終的評估指標(biāo),例如:準(zhǔn)確率、精確率、召回率、F1等。
擴展閱讀:《分類模型評估指標(biāo)——準(zhǔn)確率、精準(zhǔn)率、召回率、F1、ROC曲線、AUC曲線》
如何合理的劃分?jǐn)?shù)據(jù)集?

下面的數(shù)據(jù)集劃分方式主要針對「留出法」的驗證方式,除此之外還有其他的交叉驗證法,詳情見下文——交叉驗證法。
數(shù)據(jù)劃分的方法并沒有明確的規(guī)定,不過可以參考3個原則:
- 對于小規(guī)模樣本集(幾萬量級),常用的分配比例是 60% 訓(xùn)練集、20% 驗證集、20% 測試集。
- 對于大規(guī)模樣本集(百萬級以上),只要驗證集和測試集的數(shù)量足夠即可,例如有 100w 條數(shù)據(jù),那么留 1w 驗證集,1w 測試集即可。1000w 的數(shù)據(jù),同樣留 1w 驗證集和 1w 測試集。
- 超參數(shù)越少,或者超參數(shù)很容易調(diào)整,那么可以減少驗證集的比例,更多的分配給訓(xùn)練集。
交叉驗證法
為什么要用交叉驗證法?
假如我們教小朋友學(xué)加法:1個蘋果+1個蘋果=2個蘋果
當(dāng)我們再測試的時候,會問:1個香蕉+1個香蕉=幾個香蕉?
如果小朋友知道「2個香蕉」,并且換成其他東西也沒有問題,那么我們認(rèn)為小朋友學(xué)習(xí)會了「1+1=2」這個知識點。
如果小朋友只知道「1個蘋果+1個蘋果=2個蘋果」,但是換成其他東西就不會了,那么我們就不能說小朋友學(xué)會了「1+1=2」這個知識點。
評估模型是否學(xué)會了「某項技能」時,也需要用新的數(shù)據(jù)來評估,而不是用訓(xùn)練集里的數(shù)據(jù)來評估。這種「訓(xùn)練集」和「測試集」完全不同的驗證方法就是交叉驗證法。
3 種主流的交叉驗證法

留出法(Holdout cross validation)
上文提到的,按照固定比例將數(shù)據(jù)集靜態(tài)的劃分為訓(xùn)練集、驗證集、測試集。的方式就是留出法。
留一法(Leave one out cross validation)
每次的測試集都只有一個樣本,要進行 m 次訓(xùn)練和預(yù)測。
這個方法用于訓(xùn)練的數(shù)據(jù)只比整體數(shù)據(jù)集少了一個樣本,因此最接近原始樣本的分布。但是訓(xùn)練復(fù)雜度增加了,因為模型的數(shù)量與原始數(shù)據(jù)樣本數(shù)量相同。
一般在數(shù)據(jù)缺乏時使用。
k 折交叉驗證(k-fold cross validation)
靜態(tài)的「留出法」對數(shù)據(jù)的劃分方式比較敏感,有可能不同的劃分方式得到了不同的模型。「k 折交叉驗證」是一種動態(tài)驗證的方式,這種方式可以降低數(shù)據(jù)劃分帶來的影響。具體步驟如下:
- 將數(shù)據(jù)集分為訓(xùn)練集和測試集,將測試集放在一邊
- 將訓(xùn)練集分為 k 份
- 每次使用 k 份中的 1 份作為驗證集,其他全部作為訓(xùn)練集。
- 通過 k 次訓(xùn)練后,我們得到了 k 個不同的模型。
- 評估 k 個模型的效果,從中挑選效果最好的超參數(shù)
- 使用最優(yōu)的超參數(shù),然后將 k 份數(shù)據(jù)全部作為訓(xùn)練集重新訓(xùn)練模型,得到最終模型。

k 一般取 10
數(shù)據(jù)量小的時候,k 可以設(shè)大一點,這樣訓(xùn)練集占整體比例就比較大,不過同時訓(xùn)練的模型個數(shù)也增多。
數(shù)據(jù)量大的時候,k 可以設(shè)小一點。
本文首發(fā)自 產(chǎn)品經(jīng)理的 AI 學(xué)習(xí)庫 easyai.tech