機器學習 驗證方法

2021-10-03 22:48:20 字數 3032 閱讀 4551

1.1 機器學習中的資料集劃分

在機器學習中,我們的訓練機器學習模型的目標是得到乙個泛化誤差小的模型,也就是說在沒有參加訓練的樣本中獲得最優的效能。通常情況下,我們會將資料集分成三個部分,包括訓練集,驗證集和測試集。我們在訓練集上對機器學習的模型進行訓練,在訓練的過程中使用驗證集進行測試,當在驗證集上獲取到最優的引數的時候,可以停止訓練。將訓練好的模型在測試集上進行測試。

1.2 驗證集的作用

我們在訓練機器學習模型的時候,總是會有一些超引數需要我們進行人為的進行設定,比如我們在訓練神經網路中的網路層數。這種超引數不是機器學習模型學習出來的,而是我們自己進行調節的,如何進行調節呢?這個時候就引出了驗證集的作用。一般情況下,我們基於驗證集來調節模型的超引數,這種調節的過程的本質也是乙個學習的過程。通過驗證集,我們能夠確定最優的超引數,這樣也就確定了最優的機器學習模型結構。同時,當模型十分的複雜的時候,很容易在訓練資料上產生過擬合。此時,我們將模型放到驗證集上進行及時的測試,可以提早的發現模型的過擬合的現象,及時停止訓練,減少過擬合。

一般情況下,我們會先將模型在訓練集上進行訓練,在訓練的的過程中,我們將訓練過一定的時間的模型放到驗證集上進行驗證,最終我們希望的是模型在驗證集效能非常的好。此時我們就可以停止訓練,然後在測試集上檢視泛化誤差。

所謂的驗證方法,核心就是我們如何去構造驗證集。一般情況下,驗證集的構造方法包括三種,留出法,交叉驗證法和自助法,下面我們來一一介紹。

2.1、留出法

留出法的思路很簡單,就是將原始訓練資料集d劃分成兩個部分,兩個子集是互斥的,其中乙個集合作為訓練集s,另外乙個集合作為驗證集v。我們用數學的形式描述一下就是:

d =s

∪v,s

∩t=∅

d=s∪v,s∩t=∅

d=s∪v,

s∩t=

∅舉乙個例子來講,我們的訓練資料d包括1000樣本,其中s包括700個樣本用於訓練,300個樣本作為驗證集進行驗證。

這裡值得我們注意的是,我們需要保證訓練集s和驗證集v盡可能的保證資料的分布是一致的。這樣可以避免因為資料分布的不一致性而引入的額外的偏差,而對最終的結果產生影響。

這種一致性最為常見的例子是我們要盡量保證在訓練集s和驗證集v中的各個類別的樣本的比例是一致的。以二分類為例,在s中正負樣本比例在1:1左右,則在v中也要盡量去保證正負樣本比例在1:1左右。

從取樣的角度來看這種比例一致的問題,實際上就是乙個分層取樣的過程,所謂的分層取樣,實際上就是按照不同的類別進行隨機取樣,還是我們上面的例子,假設原始的樣本集d中的樣本數量為1000,並且正負樣本的數量均為500,我們按照700:300的比例劃分成s集和v集,我們首先從正類中進行隨機取樣,將正類的樣本分成350:150的兩個集合a,b,在將負類的樣本進行隨機取樣,將負類的樣本分成350:150的兩個集合c,d,然後將a、c集合合併構成訓練集s,b、d集合合併構成驗證集v。

儘管我們能夠保證s和v集合的中的各類樣本的比例是一致的,但是這仍然存在一定的問題,我們繼續看上面的例子,我們在將正類切分為350和150是兩個部分的時候,我們可以將500個正例樣本中的前350個作為第乙個部分,也可以將500個正例樣本中的後350個作為第乙個部分。這些不同劃分方式會產生不同的s和v集。不同的s和v集可能會導致模型的評估結果不同,為了解決這個問題,我們往往採用的方式是進行多次劃分,分成不同的s/v集,進行多次訓練和評估模型,最後取均值或者投票法來確定最終的結果。

最後,我們在說明這種方法的乙個侷限性,我們將原始的訓練資料集d劃分成了兩個不相交的子集s和v,當s集特別大的時候,模型的訓練結果接近於d,但是v過小,會導致驗證集的評估結果不夠穩定。如果縮小s集並擴大v集,這樣會導致模型訓練的欠擬合問題。這個問題沒有完美的解決方法,一般情況下,我們一般將2

3\frac

32​到4

5\frac

54​的樣本用於訓練,其餘的樣本用於驗證。

最後,我們用一張圖來展示一下留出法的基本思想:

2.2 交叉驗證法

交叉驗證法的思想是首先將資料集d劃分成k個大小相似的互斥子集,即d=d1∪d2∪…∪dk,其中di∩dj=∅(i≠j)。我們採用分層抽樣的方法保證每個資料集中的資料分布盡可能的一致。然後,我們每次用k-1個子集作為訓練集s,剩下的那個子集作為驗證集v,這樣就得到了k組訓練集s和驗證集v,然後進行k次訓練,最終返回的是這k個結果的均值。

我們用一張圖來展示一下劃分的過程:

我們再用一張圖來真實整個流程:

與留出法類似,我們在生成不同的子集的時候,存在著很多種劃分的方式,為了減少因為樣本劃分不同而引入的差別,我們通常需要隨機的進行不同的劃分過程p次,也就是說我們對於上面的過程重複了p次,最終在每一次結果的基礎上在取均值作為最終的驗證結果。這種方式稱為p次k折交叉驗證。

2.2.1 留一法

這裡,我們介紹一種交叉驗證的特殊形式,我們將含有m個樣本的原始樣本集合d劃分成為m份,也就是說每乙個子集中包含乙個樣本。使用這種方式的好處在於不會受到隨機樣本劃分的影響,因為m個樣本只有一種方式來劃分,使得每乙個子集中包含乙個樣本。這種方式使得訓練集只是比原始的資料集少了乙個樣本,這就使得在絕大多數的情況向留一法和使用原始資料d來訓練的效果很相似。而這種方法的缺陷在於,當資料量m特別大的時候,我們要訓練m個模型,這個可能是相對比較複雜的。而且,我們使用乙個樣本作為驗證集,這種評估的結果不一定是穩定的。

2.3 自助法

所謂的自助法,其實就是利用bootstrap方式進行抽樣,其基本思想如下圖所示:

也就是說,我們將d』作為訓練集s,剩餘沒有被抽樣的,大約36.8%的樣本作為驗證集v,這種方式在資料集比較小,很難有效的劃分的時候很有用。

周志華《機器學習》

評估機器學習模型的幾種方法(驗證集的重要性)

機器學習 交叉驗證

假設我們需要從某些候選模型中選擇最適合某個學習問題的模型,我們該如何選擇?以多元回歸模型為例 我們假設模型集合為有限集 假設樣本集為s,根據經驗風險最小化原則 erm 可能會使用這樣的演算法 1.在s上訓練每個模型 2.選擇訓練誤差最小的假設函式,即為我們需要的函式。然而,這樣的演算法實際上並不有效...

機器學習 交叉驗證

交叉驗證是最好的測試方法 乙個問題叫做交叉驗證,是指假設要將乙份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集 乙份做測試集,並且每次選擇不同的那乙份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。交叉驗證確實是乙個還不錯的驗證的方法,但...

機器學習 KFold交叉驗證

section i brief introduction on stratifiedkfold from sebastian raschka,vahid mirjalili.python機器學習第二版.南京 東南大學出版社,2018.section ii code and analyses from...