本篇文章是要記錄在機器學習當中常見的拆分資料的方法。作為資料科學工作者的我們都知道,選用合適的方式來將原始資料拆分成訓練組資料(Training set)、鑑效組資料(Validation set)、與測試組(Testing set),對於模型好壞有著重大的影響,而這一系列拆分資料的方法,即稱為「交叉驗證」(Cross-Validation, CV),同時也介紹如何使用 R 語言來執行常見的交叉驗證方法,包含:Holdout Method、K-Fold CV、Leave One out CV、Bootstrap。此外,文章後半段會針對時間序列資料的交叉驗證做介紹。 # Holdout CV 最簡單直觀的做法,即隨機把原始數據分為三組即可,不同的劃分會得到不同的最優模型,但該方法對模型的敏感度影響較大。如果僅做一次分割,則訓練集、驗證集和測試集的樣本數比例,還有分割後的資料分布是否和原始資料集的分布相同等等因素,皆會影響模型的敏感度。且各個子集能夠分配到的資料樣本數量就會受限於原始的資料量,較不利於樣本數較少的資料集。 # K-Fold CV 為解決 Holdout Method 的困境,於是便有了 K-Fold CV,即對 k 個不同分組訓練的結果進行平均來減少變異,模型效能就不會對原始數據拆分過於敏感。最好的 k 要設定多少,並沒有一定答案,但是從經驗法則來看,資料量小的時候,k 可以設大一點,這樣訓練集占整體比例就比較大,但訓練的模型個數也增多,需要更多的運算時間;相對地,資料量大的時候,k 可以設小一點。 # Leave One out CV 當資料分割的組數 k 等於總樣本數 m 時,即為 Leave one out CV。每次的測試集都只有一個樣本,進行 m 次訓練和預測。這個方法用於訓練的資料只比整體資料集少了一個樣本,因此最接近原始樣本的分布,對於降低原始資料分布對模型的影響非常有效,但同時也增加了訓練的複雜度以及所需時間,一般而言是在資料量較少的時候使用。 # Bootstrap 在統計學當中,也被稱作「自助重抽法」。其透過重複抽樣,可以避免 Holdout Method 造成的樣本減少問題,其次,Bootstrap 也可以於創造訓練資料的隨機性。該方法的優點是訓練資料集的樣本總數和原始資料集相同,並且仍有約 1/3 的資料不被訓練到