標籤:style blog http color 使用 ar strong 資料 2014
繼續第二篇筆記中的例子。
3.不斷的迭代與探索的過程
從上篇的圖看到,直線並不能很好的代表week4以後的趨勢。既然一階函數不行,我們試試二階函數?
f(x)= ax**2 + bx + c
繼續使用polyfit這個函數來確定a,b,c的值:
f2p =sp.polyfit(x,y,2) print f2p
上述代碼得到了一個數組
[ 1.05322215e-02 -5.26545650e+00 1.97476082e+03],這就是a,b,c分別的值。
f2 = sp.poly1d(f2p) print(error(f2,x,y))
繼續計算一下殘差平方和是:179983507.878 ,顯然要比1次的好。如果階數越高,效果就越好,我們為什麼不進一步增加階數?
try一下階數為3,10,100的情況
f3 = sp.poly1d(sp.polyfit(x, y, 3)) f10 = sp.poly1d(sp.polyfit(x, y, 10)) f100 = sp.poly1d(sp.polyfit(x, y, 100)) print ‘d3=‘ ,(error(f3,x,y)) print ‘d10=‘ ,(error(f10,x,y)) print ‘d100=‘ , (error(f100,x,y))
殘差平方和結果為:
d3= 139350144.032
d10= 121942326.364
d100= 109452403.459
結果是越來越好了,但是100項式的模型是否真的代表了使用者真實行為呢?我們繼續把圖畫出來。
紫色的曲線代表了100階多項式。看出它的問題了嗎?抖動的太厲害了!響應了所有資料的要求,但是,裡邊其實有不少資料算是雜訊資料,比如偏離太遠的點,沒有代表性。這樣的擬合被叫做 過度學習(overfitting),10階也同樣類似的問題(如果資料更多,效果會更加明顯)。所以,一味的提高模型的複雜度並不是一個好辦法。
問題在哪裡?從建模角度似乎遇上了一些瓶頸。我們返回來看資料,我們真的的理解資料了嗎?
機器學習系統設計-讀書筆記3