对模型方差和偏差的解释之一:过拟合
原文:http://blog.csdn.net/vivihe0/article/details/33317041
在說到模型過擬合問題的時(shí)候,我們經(jīng)常聽說到模型的方差和偏差,本系列就通過多項(xiàng)式擬合為例來說明什么是模型的方差和偏差,進(jìn)而說明模型復(fù)雜度與模型預(yù)測效果之間的關(guān)系。
我們通過計(jì)算機(jī)產(chǎn)生樣本數(shù)據(jù)點(diǎn)來進(jìn)行多項(xiàng)式擬合。為了能在2維平面上方便顯示擬合的函數(shù),我們的輸入向量和輸出向量都是1維的。我們產(chǎn)生數(shù)據(jù)的函數(shù)是:
y = sin(2*pi*x)
根據(jù)這個(gè)函數(shù),我們以(0,0.1,....,0.9,1)這11個(gè)點(diǎn)作為輸入樣本x,產(chǎn)生y值,然后再將一個(gè)均值為0,標(biāo)準(zhǔn)差為0.3的正態(tài)分布 噪聲項(xiàng)疊加在y上,產(chǎn)生了目標(biāo)輸出樣本t。我們用這11個(gè)樣本點(diǎn)來擬合4種不同階數(shù)的多項(xiàng)式,將其對應(yīng)的曲線再分別與真實(shí)的函數(shù)關(guān)系y = sin(2*pi*x)的曲線做對比。這樣可以看出我們擬合的曲線有沒有提取出11個(gè)樣本點(diǎn)背后隱含的函數(shù)關(guān)系。
注意,如果是在實(shí)際應(yīng)用中,我們并不知道產(chǎn)生數(shù)據(jù)的真實(shí)函數(shù)關(guān)系。在那種情況下,我們的目標(biāo)是在不知道真實(shí)函數(shù)關(guān)系的情況下,僅僅通過10個(gè)樣本點(diǎn),擬合一條曲線,然后對未知的x值預(yù)測其t值。而在本文中,我們是知道產(chǎn)生數(shù)據(jù)的真實(shí)函數(shù)關(guān)系的。
下面是相應(yīng)的MATLAB代碼,在這里我們直接使用MATLAB的多項(xiàng)式擬合函數(shù)polyfit和polyval。polyfit函數(shù)可以計(jì)算指定階數(shù)多項(xiàng)式擬合的系數(shù),polyfit函數(shù)根據(jù)系數(shù)來計(jì)算給定輸入變量的輸出值。其具體的使用細(xì)節(jié)見下面的代碼。
[plain] view plaincopy注意,圖中的藍(lán)線是產(chǎn)生數(shù)據(jù)點(diǎn)真實(shí)的函數(shù)關(guān)系,圈是數(shù)據(jù)點(diǎn),而紅線是擬合的多項(xiàng)式曲線。
從圖中可以看出,階數(shù)為1和2時(shí),擬合的效果不好,擬合的曲線與正弦曲線y = sin(2*pi*x)差距甚遠(yuǎn)。在階數(shù)為3的時(shí)候,擬合的效果較好。當(dāng)我們把階數(shù)增加到9的時(shí)候,多項(xiàng)式對10個(gè)數(shù)據(jù)點(diǎn)有著完美的擬合,實(shí)際上擬合曲線 準(zhǔn)確地穿過了10個(gè)樣本點(diǎn),但是擬合曲線與y = sin(2*pi*x)卻差距很大。
我們把前2個(gè)子圖的情況叫做欠擬合,在這種情況下,由于模型的階數(shù)較低,用于擬合的模型不夠靈活,所以沒有有效提取出數(shù)據(jù)包含的信息。最后一個(gè)子圖 的情況叫做過擬合,在這種情況下,模型過分靈活,以至于能夠適應(yīng)數(shù)據(jù)的任何隨機(jī)的波動(dòng),這樣擬合的曲線就把數(shù)據(jù)包含的噪聲也作為了有價(jià)值的信息而加以利用 了。所以說這兩種情況都是需要避免的,我們需要的是在這兩種情況之間做一個(gè)折中,也就是擬合的模型既不能太復(fù)雜也不能太簡單。
當(dāng)然你會(huì)說,在實(shí)際應(yīng)用的情況下,我們不知道數(shù)據(jù)是由什么函數(shù)產(chǎn)生的(也就是我們無法畫出圖中的藍(lán)線),那么如何判斷有沒有過擬合呢?且聽下回。
好了,本文的結(jié)論:過猶不及。
總結(jié)
以上是生活随笔為你收集整理的对模型方差和偏差的解释之一:过拟合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL札记3-2(hashtable关联
- 下一篇: android-menudrawer 和