從 0 開始機器學習 - 機器學習系統的設計與偏差分析!

1、構建算法的推薦步驟

當咱們遇到一個問題,好比預測房價,咱們想要用機器學習算法來更好的解決這個問題,推薦的步驟以下:算法

1.1 實現一個簡單的算法

建議先花點時間實現一個簡單能用的算法,好比線性迴歸預測房價,不須要一開始就花不少時間設計複雜的算法(在軟件開發中叫避免過早優化),你能夠先實現能用的算法,而後利用上篇文章從 0 開始機器學習 - 機器學習算法診斷中的學習曲線等診斷法來分析算法的優化方向,這樣一個簡單的算法就成爲了優化問題的好工具!網絡

1.2 分析學習曲線

有個簡單的算法後,咱們就能夠畫出學習曲線了,而後就能夠決定下一步到底要往哪一個方向作優化:機器學習

  1. 得到更多的訓練樣本
  2. 嘗試減小特徵的數量
  3. 嘗試得到更多的特徵
  4. 嘗試增長多項式特徵
  5. 嘗試減小正則化程度
  6. 嘗試增長正則化程度
  7. ...

1.3 偏差分析

假如咱們有多個方向能夠做爲優化的方向,好比如下的方向均可以解決模型的高方差問題:工具

  1. 得到更多的訓練樣本 - 適用於高方差的模型
  2. 嘗試減小特徵的數量 - 適用於高方差的模型
  3. 嘗試增長正則化程度 $\lambda$ - 適用於高方差的模型

那咱們又如何來評估每種方法的性能到底提高多少呢?或者說有沒有一種直接的指標來告訴我,使用了這樣一種優化措施後個人算法性能到底提升了多少百分比?post

今天就來看看如何分析機器學習算法的偏差。性能

2、機器學習算法偏差分析

2.1 偏斜類問題

在介紹偏差分析指標前,先來了解一個偏斜類問題:學習

訓練集中有很是多同一類的樣本,只有不多或者沒有其餘類的樣本,這樣的訓練樣本稱爲偏斜類。優化

好比預測癌症是否惡性的 100 個樣本中:95 個是良性的腫瘤,5 個惡性的腫瘤,假設咱們在這個樣本上對比如下 2 種分類算法的百分比準確度,即分類錯誤的百分比:spa

  1. 普通非機器學習算法:人爲把全部的樣本都預測爲良性,則分錯了 5 個惡性的樣本,錯誤率爲 5 / 100 = 0.05 = 5%
  2. 神經網絡算法:訓練後預測 100 個樣本,把 10 個良性的樣本誤分類爲惡性的樣本,錯誤率爲 10 / 100 = 10%

若是僅僅從錯誤率大小來判斷算法的優劣是不合適的,由於第一種人爲設置樣本都爲良性的算法不會在實際項目中使用,可是經過指標卻發現效果比神經網絡還要好,這確定是有問題的。設計

正是由於存在這麼一種偏斜類的訓練樣本,因此咱們須要用一個更加通常性的算法準確度評價指標,以此適用與任何類型的樣本,解決上面那種荒唐的結論。

2.2 查準率與查全率

爲了解決這個問題,使用查準率(Precision)和查全率(Recall)這 2 個偏差指標,爲了計算這 2 者,咱們須要把算法預測的結果分爲如下 4 種:

  1. 正確確定(True Positive,TP):預測爲真,實際爲真
  2. 正確否認(True Negative,TN):預測爲假,實際爲假
  3. 錯誤確定(False Positive,FP):預測爲真,實際爲假
  4. 錯誤否認(False Negative,FN):預測爲假,實際爲真

把這 4 個寫到表格裏面:

實際值 預測值
Positive Negative
Positive TP FN
Negative FP TN

而後咱們就能夠定義這 2 個指標啦:

  • 查準率 = TP / (TP + FP):預測爲真(惡性腫瘤)的狀況中,實際爲真(惡性腫瘤)的比例,越高越好
  • 查全率 = TP / (TP + FN):實際爲真(惡性腫瘤)的狀況中,預測爲真(惡性腫瘤)的比例,越高越好

有了這 2 個指標咱們再來分析下上面的算法性能,第一我的爲的算法認爲全部的腫瘤都是良性的,也就等價於原樣本中 5 個惡性的腫瘤樣本一個都沒有預測成功,也即全部惡性腫瘤樣本,該算法成功預測惡性腫瘤的比例爲 0,因此查全率爲 0,這說明該算法的效果並很差。

2.3 查準率與查全率的整合

在實際的使用中,查準率和查全率每每不能很好的權衡,要想保持二者都很高不太容易,經過使用如下的公式來整合這 2 個評價指標能夠幫助咱們直接看出一個算法的性能優劣:

$$ F_1 Score = 2 \frac {PR} {P + R} $$

之後評價一個算法的性能直接比較 F1 Score 便可,這就大大方便了咱們對比算法的性能。

3、機器學習的樣本規模

除了評價指標,還有一個要關心的問題就是樣本的規模,在機器學習領域有一句話:「取得成功的人不是擁有最好算法的人,而是擁有最多數據的人」,這句話的意思就是說當咱們擁有很是多的數據時,選擇什麼樣的算法不是最最重要的,一些在小樣本上表現很差的算法,通過大樣本的訓練每每也能表現良好,好比下面這 4 種算法在很大樣本上訓練後的效果相差不是很大,可是在小樣本時有挺大差距:

但在實際的機器學習算法中,爲了可以使得訓練數據發揮最大效用,咱們每每會選一個比較好的模型(不太容易欠擬合,好比神經網絡),再加上不少的樣本數據(防止過擬合),經過這 2 者就可讓一個算法變的很強大,因此之後當你設計機器學習算法的時候必定要考慮本身的樣本規模,選擇合適的模型適應你的數據,若是你有不少不少的數據,那麼能夠選擇複雜一點的模型,不能白白浪費你的數據!

相關文章
相關標籤/搜索