如何改進手上的機器學習模型
假如,你手頭上正有一個機器學習的項目。你通過各種渠道手機數據,建立你自己的模型,並且得到了一些初期的結果。你發現,在你的測試集上你只有80%的正確率,這遠遠地低於你的預期。現在怎麼辦,你怎麼來改進你的模型?
你需要更多的數據嗎?或者建立個更複雜的模型?還是說調整正則參數?加減特徵?迭代更多次?不然全來一遍吧?
最近我的一個朋友也這麼問我,他覺得改進模型就是全憑運氣。這促使我決定寫這篇文章,來告知應該怎麼做一個有信息量,有意義的舉措。
1. 偏差和方差
為了構建一個準確的模型,我們首先要了解模型帶來的各種誤差。
偏差:偏差誤差是來源於模型的期望(平均)預測數值與真實數值之間的差值。
方差:對於一個給定的數值,模型預測結果的變異(波動)程度。n
1.1 數學定義
這個誤差能夠被拆分成偏差和方差兩個組成部分:n
必不可少的誤差來源於誤差項,任何模型都不能夠徹底地解決。只有給定問題本身的真實模型和無窮大的數據來修正它,我們能夠讓偏差和方差項都變成零。然而,在一個沒有完美的模型和無窮的數據的世界裡,我們必須要在減小偏差和方差中權衡。2. 什麼是學習曲線
現在我們知道權衡偏差和誤差這件事了,但是如何改進我們的模型仍然有待考究。我們的模型面對 嚴重偏離和高度變異的時候應該怎麼處理?我們需要繪製模型的學習曲線來解答這個問題。
2.1 嚴重偏離
2.2 高度變異
3. 下一步做什麼?
我們已經明白,問題往往出在偏差或者方差上。這時候,我們要根據不同的情況,做出不同的抉擇。
3.1 嚴重偏離
3.2 高度變異
4.機器學習流程
大多數的機器學習系統都是由一個模型鏈組成的。通常情況下都會有一種困境,你已經有了一個機器學習的管道,但是接下來一步應該做什麼呢?上限分析在這裡很有幫助。
上限分析每一次在管道中的某一部分中插入一個完美的版本,並且由此來測度我們所觀察到的完整的管道能夠有多大的提升。這種方法能夠幫助我們明白在整個模型鏈中,哪一步能夠帶來最可觀的優化。n
比如說上述的文字識別的管道(模型鏈),你發現一個完美的字元分割模型能夠給整個識別系統提升1%,但是一個完美的字元識別模型能夠提升7%。所以相比於改進字元分割模型,我們應該更關注字元識別模型的改進。
更多課程和文章盡在微信號:「datartisan數據工匠」
推薦閱讀:
※Kaggle HousePrice : LB 0.11666(排名前15%), 用搭積木的方式(1.原理)
※用深度學習檢測WAF惡意請求
※數學 · RNN(一)· 從 NN 到 RNN
TAG:机器学习 |