1.欠擬合(underfitting)與過擬合(overfitting)
在機器學習中,我們的主要思想是通過對數據集的學習來生成我們的假設模型。在對數據集進行擬合的過程中,我們可能會遇到欠擬合和過擬合的問題。以身高預測的例子為例,這里給出7-18歲男生的身高標准(數據來源:7 歲~18 歲兒童青少年身高發育等級評價),如圖1:
將中位數隨年齡的變化繪制成散點圖,如圖2:
由圖2中的散點可知,先開始身高隨年齡幾乎成一條直線關系,后來增長率逐漸下降。如果我們采用線性函數取擬合,這顯然是不合理的(線性函數的增長率不會發生變化)。如果我們用一個多項式函數去擬合,雖然這個多項式可能會很復雜,但是我們總可能找到一個多項式函數使得該函數完美經過圖中的散點,如圖3:
現在,我們來看一下線性擬合(圖3紅線):年齡大於18歲以后,按照散點圖的趨勢,身高應該逐漸趨於穩定,但是線性擬合的結果是身高隨年齡增長依舊保持很高的增長率。顯然這並不是一種很好的擬合方式,對於這種情況,我們稱之為欠擬合,即高偏差(high bias)。
接下來,我們來看一下“完美的多項式擬合”(圖3藍線):藍線的損失函數為0,在回歸問題中,我們求解參數矩陣的方法就是盡可能地讓損失函數的值最小化。這是否意味着當損失函數為0時,這時我們的學習模型最好呢?並不是這樣子的。在”完美的多項式擬合“當中,我們的假設函數通常情況下會非常復雜,一般會涉及到高次多項式,函數圖像會非常扭曲。以五次多項式為例,即便我們的自變量之間的偏差數量級為10,但對應輸出結果的偏差會達到$10^5$數量級。圖3的例子可能還不明顯,圖4很好的說明了“完美擬合”的扭曲情況。對於這種為了最小化損失函數,而將假設函數“過度扭曲”的情況,我們稱之為過擬合,即高方差(high variance)。
2.偏差(bias)和方差(variance)
2.1偏差和誤差的概念
偏差(bias),是不同數據集在特定模型上預測值的期望與實際值之間的差值。如果平均預測值與實際值相差甚遠,則偏差較高。高偏差導致算法無法正確表示輸入和輸出變量之間的相關關系。當模型具有較高的偏差時,則表示該模型過於簡單,無法捕獲數據的復雜性,因此無法擬合數據。
方差(variance),指的是不同數據集在特定模型上的預測值的方差。當模型在訓練后的數據集上表現良好但在未訓練的數據集(例如測試數據集或驗證數據集)上表現不佳時,就會發生方差。 方差反映了預測值與實際值之間的分散程度。高方差會導致過度擬合,這表明該算法對訓練數據中存在的隨機噪聲也進行了建模。當模型具有較高的方差時,該模型將變得非常復雜,並將“完美擬合”訓練集的數據點。 當高方差模型遇到尚未學習的其他數據點時,就無法做出正確的預測。
圖5顯示了偏差和誤差,其中藍色點表示我們的預測值,紅色點表示我們的真實值。可以看到,偏差越高,預測值離真實值越遠;方差越高,預測值越分散。
######2.2.用數學公式表示偏差和誤差
我們用$Y$表示我們要預測的值(樣本真實值),$X$表示我們的自變量。考慮到樣本數據其實是采樣,$Y$並不是真實值,假設真實模型是$f$,則有這樣的關系:\(Y=f(X)+\epsilon\),其中$\epsilon$表示噪音,服從均值為0的正態分布,即$\epsilon\sim N(\mu,\sigma_\epsilon)\(。用\)\hat f$來表示我們的模型(即擬合函數),則我們的預測值為$\hat f(X)$,則在點$x$處的平方誤差的期望為:
\(\begin{align}Err(x)& =E\left[(Y -\hat f(x))^2\right] = E\left[(\epsilon + f(x) -\hat f(x))^2\right]\\&=E[f(x)^2] + E[\hat f(x)^2] + E(\epsilon^2) -2E[f(x)]E[\hat f(x)]-2E(\epsilon)E[f(x)]-2E(\epsilon)E[\hat f(x)]\\& = f(x)^2+(E[\hat f(x)])^2 + Var[\hat f(x)] -2f(x)E[\hat f(x)] + Var[\epsilon] + E(\epsilon) \\& = \left(E[\hat{f}(x)]-f(x)\right)^2 + E\left[\left(\hat{f}(x)-E[\hat{f}(x)]\right)^2\right] +\sigma_e^2\\&= \mathrm{Bias}^2 + \mathrm{Variance} + \mathrm{Irreducible\ Error} \end{align}\)
注意:$f(x),\hat f(x), \epsilon$三者獨立,且$f(x)$不是變量,是固定值。所以$E[f(x)] = f(x),E[f(x)^2] = f(x)^2$。
即**誤差的期望值 = 預測值相對真實值的偏差的平方 + 模型預測值的方差 + 噪音的方差 **
上式中的第三項,為不可減少的誤差,是真實模型和樣本值的關系中的噪聲項,任何模型都無法從根本上減少噪聲項。 給定真實模型和無窮大數據進行校准,理論上可以將偏差項和方差項都減少到0。但是,在模型和有限數據不完善的現實情況下,需要在最小化偏差和最小化方差之間進行權衡 。
關於偏差和方差的更多內容可以參見:
偏差Bias和方差Variance--機器學習中的模型選擇(中文)
Understanding the Bias-Variance Tradeoff(英文)
3.解決方法
模型的效果通常是:方差小,偏差小 > 方差小,偏差大 > 方差大,偏差小 > 方差大,偏差大。所以,我們盡量減少模型的偏差和方差。如果出現了欠擬合和過擬合的情況,我們應該怎么解決呢?
對於欠擬合而言,我們有如下解決方案:
- 增加新的特征,可以考慮加入進特征組合、高次特征,來增大假設空間
- 采用非線性模型,比如核SVM 、決策樹、DNN等模型
- Boosting,Boosting 往往會有較小的 Bias,比如 Gradient Boosting 等
- 如果已正則化,嘗試減少正則化程度$\lambda$
對於過擬合而言,我們有如下解決方案:
- 交叉檢驗,通過交叉檢驗得到較優的模型參數
- 特征選擇,減少特征數或使用較少的特征組合,對於按區間離散化的特征,增大划分的區間
- 正則化,常用的有 L1、L2 正則
- 如果已正則化,嘗試增大正則化程度$\lambda$
- 增加訓練數據可以有限的避免過擬合
- Bagging,將多個弱學習器Bagging 一下效果會好很多,比如隨機森林等
參考鏈接: