Debugging
當(dāng)我們實(shí)現(xiàn)了一個(gè)機(jī)器學(xué)習(xí)算法后舵盈,通常需要分析并解決一些性能問(wèn)題鄙才,比如我們?cè)陬A(yù)測(cè)新的測(cè)試樣本時(shí)產(chǎn)生很大的誤差庵朝,我們需要怎么做呢阱洪?通常有以下幾種做法:
- 獲取更多數(shù)據(jù)
解決高方差問(wèn)題 - 減少特征
解決高方差問(wèn)題 - 增加特征
解決高偏差問(wèn)題 - 增加多項(xiàng)式
解決高偏差問(wèn)題 - 增大正則項(xiàng)系數(shù)
解決高方差問(wèn)題 - 減小正則項(xiàng)系數(shù)
解決高偏差問(wèn)題
交叉驗(yàn)證
將原始訓(xùn)練樣本隨機(jī)抽取 30% 作為測(cè)試集芬迄,剩下 70% 作為訓(xùn)練集问顷。然后在訓(xùn)練集進(jìn)行訓(xùn)練并得到最小誤差參數(shù) ,最后計(jì)算模型在測(cè)試集中的誤差作為模型評(píng)估標(biāo)準(zhǔn),線性回歸通常采用平方誤差:
在邏輯回歸中可以使用對(duì)數(shù)代價(jià)函數(shù)計(jì)算誤差:
或者使用 0 / 1 誤差杜窄,即預(yù)測(cè)錯(cuò)誤時(shí)誤差為 1肠骆,預(yù)測(cè)正確時(shí)誤差為 0:
求所有樣本的平均誤差:
模型選擇
首先在算法中加入?yún)?shù) ,代表模型的多項(xiàng)式階數(shù)(degree of polynomial)塞耕,然后將數(shù)據(jù)集分為訓(xùn)練集(60%)蚀腿、驗(yàn)證集(Cross Validation,20%)、測(cè)試集(20%)扫外,并分別使用不同階數(shù)的模型在訓(xùn)練集進(jìn)行訓(xùn)練莉钙,得出各自的參數(shù)
,在驗(yàn)證集中選擇誤差最小的模型作為最終選擇筛谚, 最后通過(guò)測(cè)試集估測(cè)模型的泛化能力磁玉。
偏差(Bias)和方差(Variance)
通常簡(jiǎn)單(低階)的模型參數(shù)較少,偏差較高驾讲,會(huì)造成欠擬合問(wèn)題蚊伞。復(fù)雜(高階)的模型參數(shù)較多,方差較高吮铭,會(huì)造成過(guò)擬合問(wèn)題时迫。所以我們通常要分析模型是高偏差還是高方差,進(jìn)而使用恰當(dāng)?shù)牟呗愿倪M(jìn)模型谓晌。
我們可以通過(guò)調(diào)節(jié)模型的多項(xiàng)式階數(shù)掠拳,記作 ,來(lái)得到合適的模型纸肉。
可以發(fā)現(xiàn)碳想,訓(xùn)練集誤差 隨著多項(xiàng)式階數(shù)
的增加持續(xù)下降,驗(yàn)證集誤差隨著多項(xiàng)式階數(shù)
的增加先降后升毁靶。也就是說(shuō)胧奔,如果模型在訓(xùn)練集和驗(yàn)證集都產(chǎn)生很大的誤差,則是一個(gè)高偏差的模型预吆,如果在驗(yàn)證集的誤差遠(yuǎn)大于訓(xùn)練集的誤差龙填,則是一個(gè)高方差的模型,即:
正則化和偏差拐叉、方差
通常我們使用正則化的目的是讓參數(shù)值盡可能地小岩遗,而正則項(xiàng)系數(shù) 則是平衡參數(shù)權(quán)重和擬合程度之間的關(guān)系。通過(guò)上圖可以發(fā)現(xiàn)凤瘦,如果
取值過(guò)大宿礁,會(huì)使得參數(shù)懲罰過(guò)重,使模型產(chǎn)生高偏差蔬芥,從而導(dǎo)致欠擬合梆靖。如果
取值過(guò)小控汉,會(huì)使得參數(shù)權(quán)重過(guò)大,模型過(guò)于復(fù)雜返吻,使模型產(chǎn)生高方差姑子,泛化能力變差,從而導(dǎo)致過(guò)擬合测僵。所以恰當(dāng)?shù)恼齽t項(xiàng)系數(shù)對(duì)模型十分重要街佑。我們可以選取一系列待定的正則項(xiàng)系數(shù),比如
捍靠,分別代入代價(jià)函數(shù)沐旨,在訓(xùn)練集進(jìn)行擬合,然后在驗(yàn)證集中選擇誤差最小的模型作為最終選擇榨婆,最后通過(guò)測(cè)試集估測(cè)模型的泛化能力磁携。
可以發(fā)現(xiàn),訓(xùn)練集的誤差 隨著
的增大而增大纲辽。驗(yàn)證集的誤差
在
過(guò)大(underfitting)或過(guò)小(overfitting)都會(huì)很高璃搜。所以拖吼,如果當(dāng)驗(yàn)證集誤差
和訓(xùn)練集誤差
都很大時(shí),說(shuō)明正則項(xiàng)系數(shù)
過(guò)大这吻,參數(shù)過(guò)少吊档,使模型產(chǎn)生了高偏差,從而導(dǎo)致了欠擬合唾糯。如果當(dāng)驗(yàn)證集誤差
遠(yuǎn)大于訓(xùn)練集誤差
時(shí)怠硼,說(shuō)明正則項(xiàng)系數(shù)
過(guò)小,參數(shù)過(guò)多移怯,使模型產(chǎn)生了高方差香璃,從而導(dǎo)致了過(guò)擬合。通過(guò)觀察可以手動(dòng)或自動(dòng)得出使得驗(yàn)證集誤差
最小的點(diǎn)舟误,然后選取該點(diǎn)對(duì)應(yīng)的正則項(xiàng)系數(shù)
即可葡秒。所以繪制學(xué)習(xí)曲線通常可以幫助我們分析算法是處于高偏差還是高方差嵌溢。
樣本數(shù)量和偏差眯牧、方差
可以發(fā)現(xiàn),訓(xùn)練集的誤差 會(huì)隨著訓(xùn)練樣本數(shù)量
的增加而增加赖草,驗(yàn)證集的誤差
會(huì)隨著訓(xùn)練樣本數(shù)量
的增加而減小学少,因?yàn)殡S著樣本的增加,泛化能力逐漸增強(qiáng)秧骑,所以數(shù)據(jù)越多版确,越能擬合出合適的模型扣囊。
在高偏差的情況下,訓(xùn)練集誤差 會(huì)隨著樣本
的增加而增加阀坏,驗(yàn)證集的誤差
隨著樣本的增加而減少如暖,但
增加到一定程度后
下降逐漸趨緩,最后會(huì)收斂在一個(gè)較高的水平忌堂,得到的是比較大的
和
盒至,所以在高偏差的情況下,增加樣本并不能明顯減小驗(yàn)證集的誤差士修。
在高方差的情況下枷遂,訓(xùn)練集的誤差 隨著樣本的增加而增加,驗(yàn)證集的誤差
隨著樣本的增加而減小棋嘲,
和
目前可能有很大一段差距酒唉,如果持續(xù)增加樣本,
會(huì)持續(xù)下降沸移,從而接近
痪伦,所以增加樣本對(duì)高方差的模型是有明顯幫助的。
神經(jīng)網(wǎng)絡(luò)
結(jié)構(gòu)簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)雹锣,參數(shù)較少网沾,雖然計(jì)算量小,但容易欠擬合蕊爵。結(jié)構(gòu)復(fù)雜的神經(jīng)網(wǎng)絡(luò)辉哥,參數(shù)較多,計(jì)算量大攒射,容易過(guò)擬合醋旦。可以使用正則項(xiàng)優(yōu)化会放,也可以比較不同層數(shù)或神經(jīng)元數(shù)的模型在驗(yàn)證集的誤差饲齐,進(jìn)而選擇合適的層數(shù)或神經(jīng)元數(shù)。