03.21 通過交叉驗證來評價模型的性能

在構建一個機器學習模型之後,我們需要對模型的性能進行評估。如果一個模型過於簡單,就會導致欠擬合(高偏差)問題,如果模型過於複雜,就會導致過擬合(高方差)問題。為了使模型能夠在欠擬合和過擬合之間找到一個折中方案,我們需要對模型進行評估,後面將會介紹holdout交叉驗證和k折交叉驗證,通過這兩種方法,我們可以獲得一個模型泛化誤差的可靠估計,也就是模型在新數據上的性能。

一、holdout交叉驗證

holdout交叉驗證(holdout cross-validation)是評估機器學習模型泛化能力一種常用的方法。holdout方法是將數據集劃分為訓練集和測試集,訓練集用於訓練模型,測試集用於評估模型的性能。

但是,如果我們在模型選中過程中不斷的重複使用相同的測試數據,其實就可以將測試數據看作訓練數據的一部分,從而導致模型的過擬合。在使用holdout交叉驗證的時候,有一種更好的方法可以避免過擬合,將數據集分為三個部分:訓練集、測試集和驗證集。訓練集用於不同模型的擬合,模型在驗證集上的表現作為模型性能的評估和選擇標準,測試集是當模型的參數優化完成之後,再用來評估模型的泛化誤差。

通過交叉驗證來評價模型的性能

holdout方法的缺點:模型性能的評估對於訓練集和驗證集的劃分是敏感的,評價的結果會隨著樣本的不同而發生變化。接下來將介紹一種魯棒性更高的性能評價技術:k折交叉驗證。

二、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值,這樣不僅能夠較少交叉驗證需要消耗的時間還可以降低模型在不同數據上的重複擬合,從而獲得一個較準確的模型評估結果。

三、sklearn實現k折交叉驗證

數據集下載地址:https://www.kaggle.com/uciml/breast-cancer-wisconsin-data/data

通過交叉驗證來評價模型的性能

通過交叉驗證來評價模型的性能

通過交叉驗證來評價模型的性能


分享到:


相關文章: