構建學習模型之后,我們需要對模型的性能進行評估。如果一個模型過於簡單,就會導致欠擬合(高偏差)問題,如果模型過於復雜,就會導致過擬合(高方差)問題。下面介紹holdout交叉驗證和k折交叉驗證
一、holdout交叉驗證
holdout交叉驗證(holdout cross-validation)是評估機器學習模型泛化能力一種常用的方法。holdout方法是將數據集划分為訓練集和測試集,訓練集用於訓練模型,測試集用於評估模型的性能。
但是,如果我們在模型選中過程中不斷的重復使用相同的測試數據,容易導致模型的過擬合。
使用holdout交叉驗證時,為了避免過擬合,數據集可分為三部分:訓練集、測試集和驗證集。訓練集用於不同模型的擬合,驗證集作為模型性能的評估和選擇標准,測試集是當模型的參數優化完成之后,再用來評估模型的泛化誤差。
holdout方法的缺點:模型性能的評估對於訓練集和驗證集的划分是敏感的,評價的結果會隨着樣本的不同而發生變化
二、k折交叉驗證
k折交叉驗證(k-fold cross-validation),不重復的將訓練集划分為k個,其中k-1個用於模型的訓練,剩下的一個用於測試。重復k次,可以得到k個模型及對應模型的性能評價。
通過這些獨立且不同的數據子集來獲取評價結果,最后取這些結果的平均性能,與holdout方法相比,這樣的結果對於數據集的划分敏感度相對較低。
通過k折交叉驗證來驗證模型參數的調優,從而找到模型泛化性能最優的參數,找到滿意的參數之后,就使用整個訓練集作為訓練數據來訓練模型,然后通過測試集來評價模型的性能。
在k折交叉驗證中,每一個樣本都會被划分為訓練集或者測試集(驗證集)的機會,與holdout方法相比,這樣模型可以獲得一個較小的方差。
在k則交叉驗證中,常用的k值是10,即訓練數據被划分為10塊,其中9塊用於訓練,1塊用於測試評價模型的性能,每一次評價都能獲得一個評價指標Ei(分類的准確率或者誤差),最后我們選取模型平均指標的平均值。
當訓練數據相對較少的時候,我們可以增加k的大小,使得每次迭代中將會有更多的數據可以用於訓練,這樣可以獲得較小的偏差。
在增加k值的同時,也會導致交叉驗證的算法運行時間較長,而且由於訓練塊之間高度相似,從而導致評價結果的方差較高。
如果訓練數據較大的時候,我們可以減少k值,這樣不僅能夠較少交叉驗證需要消耗的時間還可以降低模型在不同數據上的重復擬合,從而獲得一個較准確的模型評估結果。