將原始數據隨機分為兩組,一組做為訓練集,一組做為驗證集,利用訓練集訓練分類器,然后利用驗證集驗證模型,記錄最后的分類准確率為此Hold-OutMethod下分類器的性能指標.此種方法的好處的處理簡單,只需隨機把原始數據分為兩組即可,其實嚴格意義來說Hold-Out Method並不能算是CV,因為這種方法沒有達到交叉的思想,由於是隨機的將原始數據分組,所以最后驗證集分類准確率的高低與原始數據的分組有很大的關系,所以這種方法得到的結果其實並不具有說服性.
a.每一回合中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分布,這樣評估所得的結果比較可靠。
b.實驗過程中沒有隨機因素會影響實驗數據,確保實驗過程是可以被復制的。
但LOO-CV的缺點則是計算成本高,因為需要建立的模型數量與原始數據樣本數量相同,當原始數據樣本數量相當多時,LOO-CV在實作上便有困難幾乎就是不顯示,除非每次訓練分類器得到模型的速度很快,或是可以用並行化計算減少計算所需的時間.
對交叉驗證這個問題,一直以來,不明白是怎么回事。近期看材料,涉及到了這個問題,寫的通俗易懂,有種恍然大悟的感覺。下面,我寫下對這個問題的理解。
現在假設這里有一堆數據,作為統計er的任務就是從這些數據中提取有用的信息。如何提取信息呢,我們的法寶就是–模型。模型在統計當中是極其重要的,學統計就是跟各種各樣的模型混個臉熟。在模型的基礎上,我們利用數據對模型的參數進行估計,從而通過參數化后的模型來描述數據的內在關系,了解數據內在的關系(pattern)非常必要,有助於對未來進行預測。
那么對於手里的數據,我們該套用什么樣的模型呢?事實上,對於一個數據分析問題而言,可用的模型不只一個,不存在所謂最優的模型。你不能說,某個模型是最好的,其他模型都是不可取的,某個模型在某個問題下,可能解釋能力優於其他模型,但這並不意味着在該類問題下,該模型就是萬能的,可能換一種評價標准,這種模型就不是最好的。我們的任務是從幾個備選模型中,按照某種評價標准,選擇出較為合理的一個模型。
一個直接的想法是比較各個模型的對數據的擬合效果。例如,對於一個x,y
數據而言,線性回歸的殘差平方和可能比非線性回歸的殘差平方和要小,這時我們說,線性回歸擬合效果更好,線性回歸模型是理想的選擇。但是這種比較方式存在一種缺陷—過擬合問題。有些模型,對原始數據擬合相當好,但是它的預測效果卻出奇的差。更重要的是,數據分析的最終目的並不是擬合數據,而是對未來進行預測。一個合理的模型一方面可以擬合原始數據,另一方面又應該可以以高准確率進行預測。所以進行模型選擇時,要綜合考慮這兩方面因素。情況常常是,擬合效果和預測誤差二者魚和熊掌不能兼得,我們需要在二者之間尋找一種平衡。
交叉驗證就是基於這樣的考慮。我們以K折交叉驗證(k-folded cross validation)來說明它的具體步驟。
{A1,A2,A3,A4,A5,A6,A7,A8,A9}{A1,A2,A3,A4,A5,A6,A7,A8,A9}
為了簡化,取k=10。在原始數據A的基礎上,我們隨機抽取一組觀測,構成一個數據子集(容量固定),記為A1
重復以上過程10次,我們就會獲得一個數據子集集合 {A1,A2,A3,A4,A5,A6,A7,A8,A9,A10}
。
接下來,我們首先對模型M
進行交叉驗證,如下,
在{A2,A3,A4,A5,A6,A7,A8,A9,A10}基礎上構建模型M1,並對數據集A1進行驗證,將預測值與真值進行比較,在某一評價標准下,計算一個得分a1,1
.
在{A1,A3,A4,A5,A6,A7,A8,A9,A10}
基礎上構建模型M1,並對數據集A2進行驗證,將預測值與真值進行比較,在同一評價標准下,計算一個得分a1,2
.
……
在{A1,A2,A3,A4,A5,A6,A7,A8,A9}
基礎上構建模型,並對數據集A10進行驗證,將預測值與真值進行比較,在同一評價標准下,計算一個得分a1,10
.
a1=a1,1+a1,2+…+a1,10/10
作為模型M1的綜合得分。
{A2,A3,A4,A5,A6,A7,A8,A9,A1
對每個模型都這樣過一遍,最后得到了每個模型的一個得分,按照得分,我們就可以選擇最合理的模型。
將數據打成好多份,交叉驗證模型,很有點bootstrap的意思,bootstrap的思想滲透到了統計學的各個領域了已經。
除了K折交叉驗證,另外兩種交叉驗證為Hold Out 驗證和留一驗證:
Hold驗證:常識來說,Holdout 驗證並非一種交叉驗證,因為數據並沒有交叉使用。 隨機從最初的樣本中選出部分,形成交叉驗證數據,而剩余的就當做訓練數據。 一般來說,少於原本樣本三分之一的數據被選做驗證數據。
留一驗證: 正如名稱所建議, 留一驗證(LOOCV)意指只使用原本樣本中的一項來當做驗證資料, 而剩余的則留下來當做訓練資料。 這個步驟一直持續到每個樣本都被當做一次驗證資料。 事實上,這等同於 K-fold 交叉驗證是一樣的,其中K為原本樣本個數。
一、訓練集 vs. 測試集
在模式識別(pattern recognition)與機器學習(machine learning)的相關研究中,經常會將數據集(dataset)分為訓練集(training set)跟測試集(testing set)這兩個子集,前者用以建立模型(model),后者則用來評估該模型對未知樣本進行預測時的精確度,正規的說法是泛化能力(generalization ability)。怎么將完整的數據集分為訓練集跟測試集,必須遵守如下要點:
1、只有訓練集才可以用在模型的訓練過程中,測試集則必須在模型完成之后才被用來評估模型優劣的依據。
2、訓練集中樣本數量必須夠多,一般至少大於總樣本數的50%。
3、兩組子集必須從完整集合中均勻取樣。
其中最后一點特別重要,均勻取樣的目的是希望減少訓練集/測試集與完整集合之間的偏差(bias),但卻也不易做到。一般的作法是隨機取樣,當樣本數量足 夠時,便可達到均勻取樣的效果,然而隨機也正是此作法的盲點,也是經常是可以在數據上做手腳的地方。舉例來說,當辨識率不理想時,便重新取樣一組訓練集/ 測試集,直到測試集的識別率滿意為止,但嚴格來說這樣便算是作弊了。
二、交叉驗證(Cross Validation)
交叉驗證(Cross Validation)是用來驗證分類器的性能一種統計分析方法,基本思想是把在某種意義下將原始數據(dataset)進行分組,一部分做為訓練集 (training set),另一部分做為驗證集(validation set),首先用訓練集對分類器進行訓練,在利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的性能指標。常見的交叉驗證方法如下:
1、Hold-Out Method
將原始數據隨機分為兩組,一組做為訓練集,一組做為驗證集,利用訓練集訓練分類器,然后利用驗證集驗證模型,記錄最后的分類准確率為此分類器的性能指標。 此種方法的好處的處理簡單,只需隨機把原始數據分為兩組即可,其實嚴格意義來說Hold-Out Method並不能算是CV,因為這種方法沒有達到交叉的思想,由於是隨機的將原始數據分組,所以最后驗證集分類准確率的高低與原始數據的分組有很大的關 系,所以這種方法得到的結果其實並不具有說服性。
2、Double Cross Validation(2-fold Cross Validation,記為2-CV)
做法是將數據集分成兩個相等大小的子集,進行兩回合的分類器訓練。在第一回合中,一個子集作為training set,另一個便作為testing set;在第二回合中,則將training set與testing set對換后,再次訓練分類器,而其中我們比較關心的是兩次testing sets的辨識率。不過在實務上2-CV並不常用,主要原因是training set樣本數太少,通常不足以代表母體樣本的分布,導致testing階段辨識率容易出現明顯落差。此外,2-CV中分子集的變異度大,往往無法達到“實 驗過程必須可以被復制”的要求。
3、K-fold Cross Validation(K-折交叉驗證,記為K-CV)
將原始數據分成K組(一般是均分),將每個子集數據分別做一次驗證集,其余的K-1組子集數據作為訓練集,這樣會得到K個模型,用這K個模型最終的驗證 集的分類准確率的平均數作為此K-CV下分類器的性能指標。K一般大於等於2,實際操作時一般從3開始取,只有在原始數據集合數據量小的時候才會嘗試取 2。K-CV可以有效的避免過學習以及欠學習狀態的發生,最后得到的結果也比較具有說服性。
4、Leave-One-Out Cross Validation(記為LOO-CV)
如果設原始數據有N個樣本,那么LOO-CV就是N-CV,即每個樣本單獨作為驗證集,其余的N-1個樣本作為訓練集,所以LOO-CV會得到N個模 型,用這N個模型最終的驗證集的分類准確率的平均數作為此下LOO-CV分類器的性能指標。相比於前面的K-CV,LOO-CV有兩個明顯的優點:
(1)每一回合中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分布,這樣評估所得的結果比較可靠。
(2)實驗過程中沒有隨機因素會影響實驗數據,確保實驗過程是可以被復制的。
但LOO-CV的缺點則是計算成本高,因為需要建立的模型數量與原始數據樣本數量相同,當原始數據樣本數量相當多時,LOO-CV在實作上便有困難幾乎就是不顯示,除非每次訓練分類器得到模型的速度很快,或是可以用並行化計算減少計算所需的時間。
三、使用Cross-Validation時常犯的錯誤
由於實驗室許多研究都有用到 evolutionary algorithms(EA)與 classifiers,所使用的 fitness function 中通常都有用到 classifier 的辨識率,然而把cross-validation 用錯的案例還不少。前面說過,只有 training data 才可以用於 model 的建構,所以只有 training data 的辨識率才可以用在 fitness function 中。而 EA 是訓練過程用來調整 model 最佳參數的方法,所以只有在 EA結束演化后,model 參數已經固定了,這時候才可以使用 test data。那 EA 跟 cross-validation 要如何搭配呢?Cross-validation 的本質是用來估測(estimate)某個 classification method 對一組 dataset 的 generalization error,不是用來設計 classifier 的方法,所以 cross-validation 不能用在 EA的 fitness function 中,因為與 fitness function 有關的樣本都屬於 training set,那試問哪些樣本才是 test set 呢?如果某個 fitness function 中用了cross-validation 的 training 或 test 辨識率,那么這樣的實驗方法已經不能稱為 cross-validation 了。
EA 與 k-CV 正確的搭配方法,是將 dataset 分成 k 等份的 subsets 后,每次取 1份 subset 作為 test set,其余 k-1 份作為 training set,並且將該組 training set 套用到 EA 的 fitness function 計算中(至於該 training set 如何進一步利用則沒有限制)。因此,正確的 k-CV 會進行共 k 次的 EA 演化,建立 k 個classifiers。而 k-CV 的 test 辨識率,則是 k 組 test sets 對應到 EA 訓練所得的 k 個 classifiers 辨識率之平均值。
