如何改進手上的機器學習模型

weixin_34124651發表於2017-07-13

假如,你手頭上正有一個機器學習的專案。你通過各種渠道手機資料,建立你自己的模型,並且得到了一些初期的結果。你發現,在你的測試集上你只有80%的正確率,這遠遠地低於你的預期。現在怎麼辦,你怎麼來改進你的模型?

你需要更多的資料嗎?或者建立個更復雜的模型?還是說調整正則引數?加減特徵?迭代更多次?不然全來一遍吧?

最近我的一個朋友也這麼問我,他覺得改進模型就是全憑運氣。這促使我決定寫這篇文章,來告知應該怎麼做一個有資訊量,有意義的舉措。

1. 偏差和方差

為了構建一個準確的模型,我們首先要了解模型帶來的各種誤差。

偏差:偏差誤差是來源於模型的期望(平均)預測數值與真實數值之間的差值。

方差:對於一個給定的數值,模型預測結果的變異(波動)程度。

1.1 數學定義

1818544-06a2df1675f0671d.png
2

這個誤差能夠被拆分成偏差和方差兩個組成部分:

1818544-f8f304ece444e2f7.png
3

1818544-7ef30af96bb63f15.png
4

必不可少的誤差來源於誤差項,任何模型都不能夠徹底地解決。只有給定問題本身的真實模型和無窮大的資料來修正它,我們能夠讓偏差和方差項都變成零。然而,在一個沒有完美的模型和無窮的資料的世界裡,我們必須要在減小偏差和方差中權衡。

2. 什麼是學習曲線

現在我們知道權衡偏差和誤差這件事了,但是如何改進我們的模型仍然有待考究。我們的模型面對 嚴重偏離和高度變異的時候應該怎麼處理?我們需要繪製模型的學習曲線來解答這個問題。

2.1 嚴重偏離

2.2 高度變異


1818544-885bb4aa0e0b2e6c.png
7

1818544-66d63aa817a30c47.png
8

3. 下一步做什麼?

我們已經明白,問題往往出在偏差或者方差上。這時候,我們要根據不同的情況,做出不同的抉擇。

3.1 嚴重偏離

1818544-82d6c3566748ccbb.png
10

3.2 高度變異


4.機器學習流程

大多數的機器學習系統都是由一個模型鏈組成的。通常情況下都會有一種困境,你已經有了一個機器學習的管道,但是接下來一步應該做什麼呢?上限分析在這裡很有幫助。

上限分析每一次在管道中的某一部分中插入一個完美的版本,並且由此來測度我們所觀察到的完整的管道能夠有多大的提升。這種方法能夠幫助我們明白在整個模型鏈中,哪一步能夠帶來最可觀的優化。

比如說上述的文字識別的管道(模型鏈),你發現一個完美的字元分割模型能夠給整個識別系統提升1%,但是一個完美的字元識別模型能夠提升7%。所以相比於改進字元分割模型,我們應該更關注字元識別模型的改進。

更多課程和文章盡在微訊號:「datartisan資料工匠」

1818544-f5c5896cfa66136d.png

相關文章