訓練機器學習模型的要點之一是避免過擬合。如果發生過擬合,模型的精確度會下降。這是由於模型過度嘗試捕獲訓練資料集的噪聲。本文介紹了兩種常用的正則化方法,通過視覺化解釋幫助你理解正則化的作用和兩種方法的區別。
噪聲,是指那些不能代表資料真實特性的資料點,它們的生成是隨機的。學習和捕捉這些資料點讓你的模型複雜度增大,有過擬合的風險。
避免過擬合的方式之一是使用交叉驗證(cross validation),這有利於估計測試集中的錯誤,同時有利於確定對模型最有效的引數。本文將重點介紹一種方法,它有助於避免過擬合併提高模型的可解釋性。
正則化
正則化是一種迴歸的形式,它將係數估計(coefficient estimate)朝零的方向進行約束、調整或縮小。也就是說,正則化可以在學習過程中降低模型複雜度和不穩定程度,從而避免過擬合的危險。
一個簡單的線性迴歸關係如下式。其中 Y 代表學習關係,β 代表對不同變數或預測因子 X 的係數估計。
Y ≈ β0 + β1X1 + β2X2 + …+ βpXp
擬合過程涉及損失函式,稱為殘差平方和(RSS)。係數選擇要使得它們能最小化損失函式。
這個式子可以根據你的訓練資料調整係數。但如果訓練資料中存在噪聲,則估計的係數就不能很好地泛化到未來資料中。這正是正則化要解決的問題,它能將學習後的引數估計朝零縮小調整。
嶺迴歸
上圖展示了嶺迴歸(Ridge Regression)。這一方法通過新增收縮量調整殘差平方和。現在,係數要朝最小化上述函式的方向進行調整和估計。其中,λ 是調整因子,它決定了我們要如何對模型的複雜度進行「懲罰」。模型複雜度是由係數的增大來表現的。我們如果想最小化上述函式,這些係數就應該變小。這也就是嶺迴歸避免係數過大的方法。同時,注意我們縮小了每個變數和響應之間的估計關聯,除了截距 β0 之外——這是因為,截距是當 xi1 = xi2 = …= xip = 0 時對平均值的度量。
當 λ=0 時,懲罰項沒有作用,嶺迴歸所產生的引數估計將與最小二乘法相同。但是當 λ→∞ 時,懲罰項的收縮作用就增大了,導致嶺迴歸下的係數估計會接近於零。可以看出,選擇一個恰當的 λ 值至關重要。為此,交叉驗證派上用場了。由這種方法產生的係數估計也被稱為 L2 範數(L2 norm)。
標準的最小二乘法產生的係數是隨尺度等變的(scale equivariant)。即,如果我們將每個輸入乘以 c,那麼相應的係數需要乘以因子 1/c。因此,無論預測因子如何縮放,預測因子和係數的乘積(X{β})保持不變。但是,嶺迴歸當中卻不是如此。因此,我們需要在使用嶺迴歸之前,對預測因子進行標準化,即將預測因子轉換到相同的尺度。用到的公式如下:
Lasso 迴歸
Lasso 是另一個變體,其中需要最小化上述函式。很明顯,這種變體只有在懲罰高係數時才有別於嶺迴歸。它使用 |β_j|(模數)代替 β 的平方作為懲罰項。在統計學中,這被稱為 L1 範數。
讓我們換個角度看看上述方法。嶺迴歸可以被認為是求解一個方程,其中係數的平方和小於等於 s。而 Lasso 可以看作係數的模數之和小於等於 s 的方程。其中,s 是一個隨收縮因子 λ 變化的常數。這些方程也被稱為約束函式。
假定在給定的問題中有 2 個引數。那麼根據上述公式,嶺迴歸的表示式為 β1² + β2² ≤ s。這意味著,在由 β1² + β2² ≤ s 給出的圓的所有點當中,嶺迴歸係數有著最小的 RSS(損失函式)。
同樣地,對 Lasso 而言,方程變為 |β1|+|β2|≤ s。這意味著在由 |β1|+|β2|≤ s 給出的菱形當中,Lasso 係數有著最小的 RSS(損失函式)。
下圖描述了這些方程。
上圖的綠色區域代表約束函式域:左側代表 Lasso,右側代表嶺迴歸。其中紅色橢圓是 RSS 的等值線,即橢圓上的點有著相同的 RSS 值。對於一個非常大的 s 值,綠色區域將會包含橢圓的中心,使得兩種迴歸方法的係數估計等於最小二乘估計。但是,上圖的結果並不是這樣。在上圖中,Lasso 和嶺迴歸係數估計是由橢圓和約束函式域的第一個交點給出的。因為嶺迴歸的約束函式域沒有尖角,所以這個交點一般不會產生在一個座標軸上,也就是說嶺迴歸的係數估計全都是非零的。然而,Lasso 約束函式域在每個軸上都有尖角,因此橢圓經常和約束函式域相交。發生這種情況時,其中一個係數就會等於 0。在高維度時(引數遠大於 2),許多係數估計值可能同時為 0。
這說明了嶺迴歸的一個明顯缺點:模型的可解釋性。它將把不重要的預測因子的係數縮小到趨近於 0,但永不達到 0。也就是說,最終的模型會包含所有的預測因子。但是,在 Lasso 中,如果將調整因子 λ 調整得足夠大,L1 範數懲罰可以迫使一些係數估計值完全等於 0。因此,Lasso 可以進行變數選擇,產生稀疏模型。
正則化有何效果?
標準的最小二乘模型常常產生方差。即對於與訓練集不同的資料集,模型可能不能很好地泛化。正則化能在不顯著增大偏差的的同時,顯著減小模型的方差。因此,正則化技術中使用的調整因子 λ,能控制對方差和偏差的影響。當 λ 的值開始上升時,它減小了係數的值,從而降低了方差。直到上升到某個值之前,λ 的增大很有利,因為它只是減少方差(避免過擬合),而不會丟失資料的任何重要特性。但是在某個特定值之後,模型就會失去重要的性質,導致偏差上升產生欠擬合。因此,要仔細選擇 λ 的值。
這就是你開始使用正則化之前所要掌握的全部基礎,正則化技術能夠幫助你提高迴歸模型的準確性。實現這些演算法的一個很流行的庫是 Scikit-Learn,它可以僅僅用 Python 中的幾行程式碼執行你的模型。