測試集非常珍貴,相當於模型遇到的全新數據。壹個真正好的機器學習模型應該有很好的對全新數據的預測能力,所以測試數據集壹般不參與模型的創建和訓練過程,只用於模型訓練完成後的最終評估。
因此,在以前的研究中,對訓練集和測試集進行劃分是不合適的。解決方法是將數據集分為訓練集、驗證集和測試集。現在驗證集完成了測試集在之前的研究中所做的事情——調整超參數,最後使用測試集來評估模型的最終性能。當然,由於個別極端數據,驗證集可能會過擬合,所以我們有交叉驗證。
這裏有壹個3重交叉驗證,把訓練數據分成三部分,其中兩部分是訓練1,用於驗證調整參數。這樣可以得到三個模型,取這三個模型結果的平均值作為參數調整的最終結果,比只有壹個驗證集要好得多。接下來我們將使用knn算法對手寫數字數據集進行交叉驗證,看看效果如何。首先,我們來看看沒有交叉驗證的情況:
搜索結果:
在沒有交叉驗證的情況下,最優參數為k=2,p=2時,準確率達到99.2%。
使用交叉驗證:
使用交叉驗證搜索最佳參數:
最佳參數的交叉驗證:
交叉檢查測試集中最優模型的準確性;
壹般交叉驗證得到最優模型的最佳精度比沒有交叉驗證的略低,因為沒有交叉驗證會出現過擬合現象。
其實交叉驗證不壹定分三份,可能更多。這只是壹個例子,還有相應的k倍交叉驗證。K倍交叉驗證相當於訓練K個模型,所以整體性能會慢K倍。但這種訓練的參數會更可靠,它有壹個極端的情況是留壹個Loo-CV(leave-one-out-cross-validation),即k等於訓練集中的樣本數,這將完全不受隨機性的影響,最接近模型的真實性能指標,但計算量也會很巨大。
不可避免的誤差是客觀存在的,比如數據本身的噪聲,這樣的誤差算法是無能為力的。但是偏差和方差可以通過壹些方法來優化。產生偏差的原因往往是問題本身的假設不正確。例如,線性回歸用於非線性數據,偏差通常與欠擬合有關。方差是指數據的壹點擾動都會對模型產生很大的影響,通常是因為使用的模型過於復雜,比如高次多項式回歸,方差壹般與過擬合有關,會極大的引入方差。
有些算法本身就是高方差算法,比如knn,非參數學習通常是高方差算法,因為沒有對數據做任何假設。有些算法本身就是高偏差算法,比如線性回歸,由於對數據的強假設,參數學習通常是高偏差算法。偏差和方差通常是矛盾的,減少偏差會增加方差,減少方差會增加偏差。然而,壹般來說,該算法可以通過調整參數來適當地平衡偏差和方差。機器學習的主要挑戰來自方差(解決過擬合問題)!,解決高方差的手段壹般有以下幾種:
其中,模型正則化是機器學習中減少過擬合的壹種非常常見和重要的手段,將在下壹章介紹。