隨機機器學習演算法需要試驗多少次,才足以客觀有效的反映模型性能?
雷鋒網按:本文作者 Jason Brownlee 為澳大利亞知名機器學習專家,對時間序列預測尤有心得。原文發佈於其博客。雷鋒網編譯。
Jason Brownlee
許多隨機機器學習演算法存在同樣的問題:相同的演算法、相同的數據,得到的計算結果卻每次都不同。這意味著在進行隨機演算法檢驗或者演算法比較的時候,必須重複試驗很多次,然後用它們的平均值來評價模型。
那麼對於給定問題,隨機機器學習演算法需要試驗多少次,才足以客觀有效的反映模型性能?
一般建議重複30次以上甚至100次左右。有人甚至重複幾千次,完全無視邊際遞減效應。
對於衡量隨機機器學習演算法性能所需的重複試驗次數,在本教程中,我將教會大家如何用統計學方法來正確預估。
教程概述本教程分以下4部分:
數據生成
基本分析
重複次數的影響分析
標準誤差計算
本教程使用Python語言,版本 2或者3均可,為順利運行示例代碼,請務必安裝SciPy 、NumPy、Pandas和Matplotlib庫。
下面正式開始我們的教程
1.數據生成第一步是生成可用的數據。
假設我們將一個神經網路模型或其它隨機演算法,在數據的訓練集上重複訓練了1000次,並且記錄了模型在測試集上的均方根誤差(RMSE)。作為本教程後續分析的前提,假設我們所用的數據呈正態分布。
務必查看一下結果的分布形態,通常結果會呈高斯分布(即正態分布)。
我們會預先生成研究用的樣本總體,這麼做對後續研究非常有幫助,因為程序生成的樣本總體其均值和標準差就確定下來,而這在實際應用中常常是無法得知的。
我們用均值=60,標準差=10作為參數生成試驗數據。
下面是生成1000個隨機數的代碼,將結果保存為results.csv文件.
代碼中我們用seed作為隨機數生成器種子函數,來確保每次運行代碼後得到的數據都一致。使用normal函數生成正態分布隨機數,用savetxt函數將數據保存為ASCII格式。
運行這段代碼後,我們得到一個名為results.csv的文件,裡面保存了1000個隨機數,它們代表了隨機演算法重複運行的模擬結果。
下面是該文件的最後十行數據。
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
現在咱們先把如何得到這批數據的事放一邊,繼續往下進行。
2.基本分析
得到樣本總體之後,我們先對其進行簡單的統計分析。
下面三種是非常簡單有效的方法:
計算統計信息,比如均值、標準差和百分位數。
繪製箱線圖來查看數據散布程度
繪製直方圖來查看數據分布情況
通過下面的代碼進行簡單的統計分析,首先載入results.csv數據文件,然後進行統計計算,並繪圖顯示。
可以看出,演算法的平均性能約為60.3,標準差約為9.8。
假定數據表示的是類似均方根誤差一樣的最小值,從統計結果看,最大值為99.5,而最小值為29.4。
下面的箱線圖中展示了數據的散布程度,其中箱形部分是樣本中段(上下四分位之間)數據(約佔樣本的50%),圓點代表異常值,綠線表示中位數。
由圖可知,結果圍繞中值分布合理。
最後生成的是數據的直方圖,圖中顯示出了正態分布的貝爾曲線(鐘形曲線),這意味著我們在進行數據分析工作時,可以使用標準的統計分析工具。
由圖可知,數據以60為對稱軸,左右幾乎沒有偏斜。
3.重複次數的影響分析
之前我們生成了1000個結果數據。對於問題的研究來說可能多了,也可能不夠。
該如何判斷呢?
第一個想法就是畫出試驗重複次數和這些試驗結果均值之間的曲線圖。我們希望隨著重複次數的增加,結果的均值能很快穩定。繪製成曲線後,看起來起始段波動較大且短,而中後部平穩且長。
利用下面的代碼繪製出該曲線。
由圖可以看出,前200次數據均值波動較大, 600次後,均值趨於穩定,曲線波動較小。
為了更好的觀察曲線,將其放大,只顯示前500次重複試驗結果。
同時將1000次試驗結果的均值線疊加上,以便找到兩者之間的偏差關係。
圖中橙色直線就是1000重複試驗結果的均值線。
同時也能看到重複100次時,結果與均值較近,重複次數達到400時,結果更理想,但是提升不明顯。
是不是很棒?不過會不會還有更好的辦法呢?
4.計算標準誤差
標準誤差用來計算樣本均值偏離總體均值的多少。它和標準差不同,標準差描述了樣本觀察值的平均變化量。標準誤差能夠根據樣本均值的誤差量或者誤差散布來估計總體均值。
標準誤差可以通過下式計算:
standard_error = sample_standard_deviation / sqrt(number of repeats)
即標準誤差等於樣本的標準差除以重複次數的均方根。
我們希望標準誤差會隨著試驗次數的增加而減小。通過下面的代碼,計算每個重複試驗次數對應的樣本均值的標準誤差,並繪製標準誤差圖。
運行代碼後,會繪製出標準誤差與重複次數的關係曲線。
和預期的一樣,隨著重複試驗次數的增加,標準誤差快速減小。標準誤差下降到一定程度後,趨於穩定,通常把1~2個單位內的值,稱為可接受誤差。
標準誤差的單位和樣本數據的單位一致。
在上圖中添加縱坐標為0.5和1的輔助線,幫助我們找到可接受的標準誤差值。代碼如下:
雷鋒網友情提醒,圖中出現的兩條紅色輔助線,分別代表標準誤差等於0.5和1。
由圖可知,如果試驗重複次數等於100次左右,標誤差開始小於1,如果試驗重複次數等於300~350次左右,標準誤差小於0.5。隨著重複試驗次數的增加,標準誤差趨於穩定,變化較小。再次提醒大家記住,標準誤差可以衡量樣本均值偏離總體均值的多少。
我們也可以使用標準誤差來作為均值的置信區間。比如,用總體均值的95%作為置信區間的上下界。這種方法只適合試驗重複次數大於20的情況。
置信區間定義如下:
樣本均值 +/- (標準誤差*1.96)
下面計算置信區間,並將其作為誤差線添加到重複試驗次數對應的樣本均值上。這是計算代碼。
下圖創建了帶置信區間的樣本均值曲線。
其中紅色直線表示總體的均值(在教程開始根據給定的均值和標準差生成了總體,所以總體的均值已知),重複1000次或更多後,可以用樣本均值代替總體均值。
圖中誤差線包裹著均值線。而且樣本均值誇大或高估了總體均值,不過還是落在總體均值的95%置信區間內。
95%置信區間的含義是做100次重複試驗,有95次包含了總體均值的真值,另外5次沒有包括。
圖中可以看出,隨著重複次數的增加,由於標準誤差的減小,95%置信區間也逐漸變窄。
放大上圖後,這種趨勢在20到200之間時尤其明顯。
這是由上述代碼生成的樣本均值和誤差線隨試驗次數變化的曲線。此圖能更好的反映樣本均值與總體均值的偏差。
擴展閱讀實際上,既涉及使用隨機演算法的計算試驗方法又涉及統計學的參考資料非常少。
我個人認為1995年科恩的書是兩者結合最好的:
Empirical Methods for Artificial Intelligence(人工智慧實證方法),Cohen(科恩),1995
如果你對這篇教程感興趣,我強烈推薦此書。
另外,維基百科上還有幾篇文章可能對你有幫助:
Standard Error
Confidence Interval
68–95–99.7 rule
如果你還有其他好的相關資料,可以在評論區與大家交流。謝謝。
小結在這篇教程里,我們提供了一種合理選擇試驗重複次數的方法,這有助於我們評價隨機機器學習演算法的正確性。
下面是幾種重複次數選擇的方法:
簡單粗暴的直接用30、100或者1000次。
繪製樣本均值和重複次數的關係曲線,並根據拐點進行選擇。
繪製標準誤差和重複次數的關係曲線,並根據誤差閾值進行選擇。
繪製樣本置信區間和重複次數的關係曲線,並根據誤差散布進行選擇。
※豐田與MIT合作,要將區塊鏈技術引入自動駕駛研發
※這項 AR 技術將你活生生地「解剖」給別人看
※大華股份智能雲存儲震撼首發 閃耀2017數博會
※柯潔會後採訪談認輸:中途曾 「覺得這棋有機會了」
TAG:雷鋒網 |
※茶價格反映的不一定是質量,可能是人心
※不同的肝功能指標,反映肝臟實質損害程度,也不相同
※肺部好壞,可用3個測試法來反映,簡單又有效
※常被高血壓患者忽視的一項檢查,它能直觀反映血壓控制效果的優劣
※痘痘位置也能反映你身體的問題 一定要多留意
※科學家調查研究發現,貓的行為習慣,可能都在反映你的性格特徵
※為何突然冒出那麼多五代機模型?反映了一個多極但複雜的國際體系
※自重徒手健身並不能真實反映身體素質,因為徒手健身受到的影響太多
※老照片:反映侵略的雜誌要請模特促銷,戰後的美容法有點嚇人
※我們不是拍不出反映現實的好電影,只是很多人沒能看到
※你的體態,反映了你的生活質量
※你對事情的看法,是不是也反映出你內心真正的態度?
※俯卧撐的個數能反映你的健康程度, 你合格了沒有?
※別以為放屁只是活躍氣氛!屁還有反映身體健康狀況這樣的作用
※睡覺也能反映臟腑問題,下列三種情況,可能和心肝肺有關
※側額骨能反映一個人能不能有貴人相幫
※這樣的獲得感指數能否反映您的感受
※孩子在摔倒之後的表現,能直接反映出他的性格,有一種要特別注意
※多夢就是睡眠質量差?夢境也可以反映健康狀況,6個方法讓你好眠……
※研究表明腰部僵硬感可能不能反映脊柱和關節的實際狀態