如何理解過擬合、正則化和交叉驗證

shuaishuai3409發表於2016-03-28

機器學習中大家經常會遇到過擬合問題,過擬合就是模型在訓練集模型表現良好,但是在測試集就不行了。具體表現在訓練集為追求好的效果(經驗損失小,準確率高等),模型建立的過於複雜(下圖3),能夠很好反映已知資料,但泛化能力太差。學術點說就是empirical loss比較小,而Generalized loss比較大。

過擬合

通常資料師在建模型時,基本都在遵循簡化原則,即在擬合效果差不多的情況下,模型越簡單則在測試集表現的越優(奧卡姆剃刀原理),這也就解釋了決策樹要“剪枝”的原因。但對於某些複雜問題,我們的模型相應的也會變得複雜,為解決因此帶來的過擬合問題,我們採用交叉驗證和正則化來解決。

交叉驗證:(Cross Validation)

在驗證模型時,我們會將訓練集分為兩部分,子訓練集和測試集,線下驗證模型優劣。通常採用7:3的劃分方法,但大家都知道不同的劃分策略,模型的準確性驗證會不同。所以為解決因人工劃分帶來的隨機性問題,選擇交叉驗證(CV),即不斷的劃分訓練集(比例上子訓練集大於測試集),反覆測試,從有限的資料中儘可能獲得多的有效資訊,返回模型準確率的均值。通過交叉驗證,如果模型的表現仍然很好,就認為該模型泛化能力也不差。

  1. 交叉驗證目的:選出最優引數的模型。模型建立後,調引數是個很費時的過程,通過交叉驗證我們可以得出最優引數的模型。
    1.1 準備候選模型,M1,M2,M3,……(模型框架一致,只是引數不同)
    1.2 對於每個模型,分別進行交叉驗證,返回該模型的準確率或者錯誤率等資訊(自己選擇是計算accuracy還是error),其返回應該是交叉驗證後得出的均值。
    1.3 通過比較不同模型的accuracy或error,選擇最佳模型。

  2. 交叉驗證分類:留P驗證(Leave-p-out Cross Validation)、k-fold交叉驗證(K-fold Cross Validation)等。
    2.1 留p驗證(LpO CV)是指訓練集上隨機選擇p個樣本作為測試集,其餘作為子訓練集。時間複雜度為CpN

    C_N^p
    ,是階乘的複雜度,不可取。
    2.2 k-fold交叉驗證就是將資料集平均分割成k份,依次選擇一份作為測試集,其餘作為子訓練集,最後將得到的k個accuracy取平均。通常K取10,也就是經常聽到的10折交叉驗證。


正則化:

先給出知乎上一乎友的見解:
https://www.zhihu.com/question/20700829/answer/21156998

通俗解釋:讓模型引數不要在優化的方向上縱慾過度。

《紅樓夢》裡,賈瑞喜歡王熙鳳得了相思病,病榻中得到一枚風月寶鑑,可以進入和心目中的女神XXOO,它腦子裡的模型目標函式就是“最大化的爽”,所以他就反覆去擬合這個目標,多次XXOO,於是人掛掉了,如果給他加一個正則化,讓它爽,又要控制爽的頻率,那麼他可以爽得更久。

再補充一個角度:
正則化其實就是對模型的引數設定一個先驗,這是貝葉斯學派的觀點,不過我覺得也可以一種理解。
L1正則是laplace先驗,l2是高斯先驗,分別由引數sigma確定。
求不要追究sigma是不是也有先驗,那一路追究下去可以天荒地老。

相關文章