機器學習演算法究竟需要試驗多少次,才能有效反映模型性能?
編者按:本文作者 Jason Brownlee 為澳大利亞知名機器學習專家,對時間序列預測尤有心得。原文發佈於其博客。AI 研習社編譯。文中相關鏈接詳見文末「閱讀原文」。
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個隨機數,它們代表了隨機演算法重複運行的模擬結果。
下面是該文件的最後十行數據。
3.722702003339634302e+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之間時尤其明顯。
這是由上述代碼生成的樣本均值和誤差線隨試驗次數變化的曲線。此圖能更好的反映樣本均值與總體均值的偏差。
點擊展開全文
※機器學習,AI進階之匙
※很污的機器學習:從xhamster網站找到喜歡的片子
※微軟Contana智能語音套件介紹&微軟機器學習介紹
※最懂機器學習的圍棋高手,解讀柯潔首戰AlphaGo時的失誤
TAG:機器學習 |
※測測你是什麼臀型?針對性練習才能有效哦
※苛刻的試驗才能確保飛機發動機能承受大鳥的撞擊
※怎樣才能有效的預防痔瘡
※努力也是一種需要培養的才能
※怎樣才能有效的瘦腿?
※設計進入「瓶頸期」,你如何才能有效提升「造型能力」?
※怎麼才能讓俯卧撐更加有效?
※瑜伽習練怎樣才能高效
※區塊鏈並非「顛覆性」技術,真正的行業變革需要多年才能實現
※有氧運動如何才能有效果,心率控制是關鍵!
※學會控制膝蓋,才能減少傷害。這組簡單練習讓你更有掌控力
※就算沒有才能,學鋼琴也不會是種浪費
※戰鬥機怎麼換髮動機?需要多少人?需要多久時間才能完成?
※補鈣,您需要這樣做才能達到最好的補鈣效果,缺少一樣都不行
※我要有多努力?才能換你一次回頭複合的機會
※俯卧撐能減肥嗎 怎麼做才能達到自己想要的效果
※真正有實力的髮型師,才能剪好的髮型,絕對精品
※一件衣服反覆穿怎樣才能避免重複感?學會這三招就能時髦百變
※怎樣才能達到瘦身效果?這些小習慣能讓你極速瘦身
※怎麼跳繩才能減肥 要跳多久才有效果