0
本文作者: 光陰 | 2017-05-25 17:15 |
雷鋒網(wǎng)按:本文作者 Jason Brownlee 為澳大利亞知名機(jī)器學(xué)習(xí)專家,對(duì)時(shí)間序列預(yù)測尤有心得。原文發(fā)布于其博客。雷鋒網(wǎng)編譯。
Jason Brownlee
許多隨機(jī)機(jī)器學(xué)習(xí)算法存在同樣的問題:相同的算法、相同的數(shù)據(jù),得到的計(jì)算結(jié)果卻每次都不同。這意味著在進(jìn)行隨機(jī)算法檢驗(yàn)或者算法比較的時(shí)候,必須重復(fù)試驗(yàn)很多次,然后用它們的平均值來評(píng)價(jià)模型。
那么對(duì)于給定問題,隨機(jī)機(jī)器學(xué)習(xí)算法需要試驗(yàn)多少次,才足以客觀有效的反映模型性能?
一般建議重復(fù)30次以上甚至100次左右。有人甚至重復(fù)幾千次,完全無視邊際遞減效應(yīng)。
對(duì)于衡量隨機(jī)機(jī)器學(xué)習(xí)算法性能所需的重復(fù)試驗(yàn)次數(shù),在本教程中,我將教會(huì)大家如何用統(tǒng)計(jì)學(xué)方法來正確預(yù)估。
本教程分以下4部分:
數(shù)據(jù)生成
基本分析
重復(fù)次數(shù)的影響分析
標(biāo)準(zhǔn)誤差計(jì)算
本教程使用Python語言,版本 2或者3均可,為順利運(yùn)行示例代碼,請(qǐng)務(wù)必安裝SciPy 、NumPy、Pandas和Matplotlib庫。
下面正式開始我們的教程
第一步是生成可用的數(shù)據(jù)。
假設(shè)我們將一個(gè)神經(jīng)網(wǎng)絡(luò)模型或其它隨機(jī)算法,在數(shù)據(jù)的訓(xùn)練集上重復(fù)訓(xùn)練了1000次,并且記錄了模型在測試集上的均方根誤差(RMSE)。作為本教程后續(xù)分析的前提,假設(shè)我們所用的數(shù)據(jù)呈正態(tài)分布。
務(wù)必查看一下結(jié)果的分布形態(tài),通常結(jié)果會(huì)呈高斯分布(即正態(tài)分布)。
我們會(huì)預(yù)先生成研究用的樣本總體,這么做對(duì)后續(xù)研究非常有幫助,因?yàn)槌绦蛏傻臉颖究傮w其均值和標(biāo)準(zhǔn)差就確定下來,而這在實(shí)際應(yīng)用中常常是無法得知的。
我們用均值=60,標(biāo)準(zhǔn)差=10作為參數(shù)生成試驗(yàn)數(shù)據(jù)。
下面是生成1000個(gè)隨機(jī)數(shù)的代碼,將結(jié)果保存為results.csv文件.
代碼中我們用seed()作為隨機(jī)數(shù)生成器種子函數(shù),來確保每次運(yùn)行代碼后得到的數(shù)據(jù)都一致。使用normal()函數(shù)生成正態(tài)分布隨機(jī)數(shù),用savetxt()函數(shù)將數(shù)據(jù)保存為ASCII格式。
運(yùn)行這段代碼后,我們得到一個(gè)名為results.csv的文件,里面保存了1000個(gè)隨機(jī)數(shù),它們代表了隨機(jī)算法重復(fù)運(yùn)行的模擬結(jié)果。
下面是該文件的最后十行數(shù)據(jù)。
6.160564991742511864e+01
5.879850024371251038e+01
6.385602292344325548e+01
6.718290735754342791e+01
7.291188902850875309e+01
5.883555851728335995e+01
3.722702003339634302e+01
5.930375460544870947e+01
6.353870426882840405e+01
5.813044983467250404e+01
現(xiàn)在咱們先把如何得到這批數(shù)據(jù)的事放一邊,繼續(xù)往下進(jìn)行。
得到樣本總體之后,我們先對(duì)其進(jìn)行簡單的統(tǒng)計(jì)分析。
下面三種是非常簡單有效的方法:
計(jì)算統(tǒng)計(jì)信息,比如均值、標(biāo)準(zhǔn)差和百分位數(shù)。
繪制箱線圖來查看數(shù)據(jù)散布程度
繪制直方圖來查看數(shù)據(jù)分布情況
通過下面的代碼進(jìn)行簡單的統(tǒng)計(jì)分析,首先加載results.csv數(shù)據(jù)文件,然后進(jìn)行統(tǒng)計(jì)計(jì)算,并繪圖顯示。
可以看出,算法的平均性能約為60.3,標(biāo)準(zhǔn)差約為9.8。
假定數(shù)據(jù)表示的是類似均方根誤差一樣的最小值,從統(tǒng)計(jì)結(jié)果看,最大值為99.5,而最小值為29.4。
下面的箱線圖中展示了數(shù)據(jù)的散布程度,其中箱形部分是樣本中段(上下四分位之間)數(shù)據(jù)(約占樣本的50%),圓點(diǎn)代表異常值,綠線表示中位數(shù)。
由圖可知,結(jié)果圍繞中值分布合理。
最后生成的是數(shù)據(jù)的直方圖,圖中顯示出了正態(tài)分布的貝爾曲線(鐘形曲線),這意味著我們?cè)谶M(jìn)行數(shù)據(jù)分析工作時(shí),可以使用標(biāo)準(zhǔn)的統(tǒng)計(jì)分析工具。
由圖可知,數(shù)據(jù)以60為對(duì)稱軸,左右?guī)缀鯖]有偏斜。
3.重復(fù)次數(shù)的影響分析
之前我們生成了1000個(gè)結(jié)果數(shù)據(jù)。對(duì)于問題的研究來說可能多了,也可能不夠。
該如何判斷呢?
第一個(gè)想法就是畫出試驗(yàn)重復(fù)次數(shù)和這些試驗(yàn)結(jié)果均值之間的曲線圖。我們希望隨著重復(fù)次數(shù)的增加,結(jié)果的均值能很快穩(wěn)定。繪制成曲線后,看起來起始段波動(dòng)較大且短,而中后部平穩(wěn)且長。
利用下面的代碼繪制出該曲線。
由圖可以看出,前200次數(shù)據(jù)均值波動(dòng)較大, 600次后,均值趨于穩(wěn)定,曲線波動(dòng)較小。
為了更好的觀察曲線,將其放大,只顯示前500次重復(fù)試驗(yàn)結(jié)果。
同時(shí)將1000次試驗(yàn)結(jié)果的均值線疊加上,以便找到兩者之間的偏差關(guān)系。
圖中橙色直線就是1000重復(fù)試驗(yàn)結(jié)果的均值線。
同時(shí)也能看到重復(fù)100次時(shí),結(jié)果與均值較近,重復(fù)次數(shù)達(dá)到400時(shí),結(jié)果更理想,但是提升不明顯。
是不是很棒?不過會(huì)不會(huì)還有更好的辦法呢?
標(biāo)準(zhǔn)誤差用來計(jì)算樣本均值偏離總體均值的多少。它和標(biāo)準(zhǔn)差不同,標(biāo)準(zhǔn)差描述了樣本觀察值的平均變化量。標(biāo)準(zhǔn)誤差能夠根據(jù)樣本均值的誤差量或者誤差散布來估計(jì)總體均值。
標(biāo)準(zhǔn)誤差可以通過下式計(jì)算:
standard_error = sample_standard_deviation / sqrt(number of repeats)
即標(biāo)準(zhǔn)誤差等于樣本的標(biāo)準(zhǔn)差除以重復(fù)次數(shù)的均方根。
我們希望標(biāo)準(zhǔn)誤差會(huì)隨著試驗(yàn)次數(shù)的增加而減小。通過下面的代碼,計(jì)算每個(gè)重復(fù)試驗(yàn)次數(shù)對(duì)應(yīng)的樣本均值的標(biāo)準(zhǔn)誤差,并繪制標(biāo)準(zhǔn)誤差圖。
運(yùn)行代碼后,會(huì)繪制出標(biāo)準(zhǔn)誤差與重復(fù)次數(shù)的關(guān)系曲線。
和預(yù)期的一樣,隨著重復(fù)試驗(yàn)次數(shù)的增加,標(biāo)準(zhǔn)誤差快速減小。標(biāo)準(zhǔn)誤差下降到一定程度后,趨于穩(wěn)定,通常把1~2個(gè)單位內(nèi)的值,稱為可接受誤差。
標(biāo)準(zhǔn)誤差的單位和樣本數(shù)據(jù)的單位一致。
在上圖中添加縱坐標(biāo)為0.5和1的輔助線,幫助我們找到可接受的標(biāo)準(zhǔn)誤差值。代碼如下:
雷鋒網(wǎng)友情提醒,圖中出現(xiàn)的兩條紅色輔助線,分別代表標(biāo)準(zhǔn)誤差等于0.5和1。
由圖可知,如果試驗(yàn)重復(fù)次數(shù)等于100次左右,標(biāo)誤差開始小于1,如果試驗(yàn)重復(fù)次數(shù)等于300~350次左右,標(biāo)準(zhǔn)誤差小于0.5。隨著重復(fù)試驗(yàn)次數(shù)的增加,標(biāo)準(zhǔn)誤差趨于穩(wěn)定,變化較小。再次提醒大家記住,標(biāo)準(zhǔn)誤差可以衡量樣本均值偏離總體均值的多少。
我們也可以使用標(biāo)準(zhǔn)誤差來作為均值的置信區(qū)間。比如,用總體均值的95%作為置信區(qū)間的上下界。這種方法只適合試驗(yàn)重復(fù)次數(shù)大于20的情況。
置信區(qū)間定義如下:
樣本均值 +/- (標(biāo)準(zhǔn)誤差*1.96)
下面計(jì)算置信區(qū)間,并將其作為誤差線添加到重復(fù)試驗(yàn)次數(shù)對(duì)應(yīng)的樣本均值上。這是計(jì)算代碼。
下圖創(chuàng)建了帶置信區(qū)間的樣本均值曲線。
其中紅色直線表示總體的均值(在教程開始根據(jù)給定的均值和標(biāo)準(zhǔn)差生成了總體,所以總體的均值已知),重復(fù)1000次或更多后,可以用樣本均值代替總體均值。
圖中誤差線包裹著均值線。而且樣本均值夸大或高估了總體均值,不過還是落在總體均值的95%置信區(qū)間內(nèi)。
95%置信區(qū)間的含義是做100次重復(fù)試驗(yàn),有95次包含了總體均值的真值,另外5次沒有包括。
圖中可以看出,隨著重復(fù)次數(shù)的增加,由于標(biāo)準(zhǔn)誤差的減小,95%置信區(qū)間也逐漸變窄。
放大上圖后,這種趨勢在20到200之間時(shí)尤其明顯。
這是由上述代碼生成的樣本均值和誤差線隨試驗(yàn)次數(shù)變化的曲線。此圖能更好的反映樣本均值與總體均值的偏差。
實(shí)際上,既涉及使用隨機(jī)算法的計(jì)算試驗(yàn)方法又涉及統(tǒng)計(jì)學(xué)的參考資料非常少。
我個(gè)人認(rèn)為1995年科恩的書是兩者結(jié)合最好的:
Empirical Methods for Artificial Intelligence(人工智能實(shí)證方法),Cohen(科恩),1995
如果你對(duì)這篇教程感興趣,我強(qiáng)烈推薦此書。
另外,維基百科上還有幾篇文章可能對(duì)你有幫助:
如果你還有其他好的相關(guān)資料,可以在評(píng)論區(qū)與大家交流。謝謝。
在這篇教程里,我們提供了一種合理選擇試驗(yàn)重復(fù)次數(shù)的方法,這有助于我們?cè)u(píng)價(jià)隨機(jī)機(jī)器學(xué)習(xí)算法的正確性。
下面是幾種重復(fù)次數(shù)選擇的方法:
簡單粗暴的直接用30、100或者1000次。
繪制樣本均值和重復(fù)次數(shù)的關(guān)系曲線,并根據(jù)拐點(diǎn)進(jìn)行選擇。
繪制標(biāo)準(zhǔn)誤差和重復(fù)次數(shù)的關(guān)系曲線,并根據(jù)誤差閾值進(jìn)行選擇。
繪制樣本置信區(qū)間和重復(fù)次數(shù)的關(guān)系曲線,并根據(jù)誤差散布進(jìn)行選擇。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。