[筆記] 機器學習 系統的設計
提高機器準確性的方法
- 收集大量數據
- 開發複雜的特徵量
- 開發算法以不同方式處理輸入
P.S. 很難說哪個項目最有用
誤差分析 ( Error analysis )
- 從簡單的算法開始,快速實作,並在交叉驗證集測試
- 繪製出學習曲線,已確定算法該往哪個方向進行
手動檢查交叉驗證集中錯誤的資料,查找這些資料大多數發生錯誤的特徵
- 例如 : 分類垃圾郵件時,釣魚郵件大多數分類錯誤,就針對釣魚郵件下去改善算法
將錯誤結果數值化很重要,否則很難評估算法性能
P.S. 分析時最好用交叉驗證集測試,如果用測試集去做誤差分析,算法只會越來越偏向測試集,在最後完成算法時,測試結果就會變得沒什麼參考價值
偏斜類 ( Skewed classes ) 問題
偏斜類是指大量的樣本傾向了某個類型,例如 :
通過邏輯回歸來預測病人是否有罹患癌症
y = 1
為罹癌,y = 0
為沒有罹癌
假設此錯誤率只有 1%,但我們的測試集中只有 0.5% 的人罹癌
這時只要使用算法 :
- hθ(x) = 0
此算法的錯誤率甚至只有 0.5%
查準率 ( Precision ) 與召回率 (Recall)
由上可知單純使用錯誤率並不能完善的評價模型好壞,所以我們需要兩種評價指標 :
- 查準率 ( Precision )
- 召回率 (Recall)
陽性 ( Positive ) :
- 預測值與實際值都為 1 時,稱為真陽性 ( True Positive )
- 預測值為 1,實際值為 0 時,稱為假陽性 ( False Positive )
陰性 ( Negative ) :
- 預測值與實際值都為 0 時,稱為真陰性 ( True Negative )
- 預測值為 0,實際值為 1 時,稱為假陰性 ( False Negative )
真正罹癌 1 | 真正沒罹癌 0 | |
---|---|---|
預測罹癌 1 | True Positive | False Positive |
預測沒罹癌 0 | False Negative | True Negative |
查準率 ( Precision )
- $Precision = \dfrac{True Positive}{Predicated Positive} = \dfrac{True Positive}{True Positive + False Positive}$
- 表示我們預測到的罹癌患者,有多少是真正有罹癌的
- 查準率越高越好
召回率 ( Recall )
- $Recall = \dfrac{True Positive}{Actual Positive} = \dfrac{True Positive}{True Positive + False Negative}$
- 表示所有罹癌患者中,有多少罹癌患者被我們預測到了
- 召回率越高越好
通過計算查準率與召回率,可以讓我知道分類模型到底好不好,就算測試集擁有偏斜類問題
P.S. 通常較稀少的類別會設定為 y = 1
權衡查準率與召回率
假設我們想要有較高的把握才預測一個患者罹患癌症,避免非癌症患者接受不必要的治療,所以我們將臨界值提高
y = 1
, hθ(x) ≥ 0.7y = 0
, otherwise- 照成高查準率,低召回率
假設我們想要一個不漏的預測罹癌患者,避免罹癌患者被忽略而延誤治療,所以我們將臨界值降低
y = 1
, hθ(x) ≥ 0.3y = 0
, otherwise- 照成低查準率,高召回率
使用 F1 Score ( F score )比較查準率與召回率
- 可以使用 F1 Score 來比較查準率與召回率在各臨界值上的表現,幫助選取較好的臨界值
- F1 Score : $2 \dfrac{Precision Recall}{Precision + Recall}$
- 查準率與召回率都較高時,F1 Score 才會較高
Precision | Recall | F1 Score | |
---|---|---|---|
算法 1 | 0.5 | 0.4 | 0.444 |
算法 2 | 0.7 | 0.1 | 0.175 |
算法 3 | 0.02 | 1.0 | 0.0392 |
- 可以看出
算法 1
是較合適的 算法 3
雖然平均值比較高,但卻回到了偏斜類的問題,所有患者都預測為罹癌就會是 : 低查準率,高召回率
大數據之於機器學習
It’s not who has the best algorithm that wins. It’s who has the most data.
- 所以大數據是很重要的,下圖是區分容易混淆單字的機器學習案例,可以發現數據越多時,各種算法表現都越來越優異 :
數據量很大時,學習算法表現比較好的原理 :
在使用多參數的算法時 ( 線性回歸 / 邏輯回歸擁有許多特徵量,神經網路擁有許多隱藏單元 )
夠多的特徵可以避免高偏差 ( 擬合不足 ) :
- Jtrain(θ) 將會降低
大數據可以避免多特徵容易引起的高方差 ( 過度擬合 ) :
- Jtrain(θ) ≈ Jtest(θ)
若將以上兩點整合 :
- Jtest(θ) 將會降低
大數據對機器學習有影響的情況
- 特徵值 x 包含足夠的信息使人類可以預測出 y
- 擁有很多參數的學習算法
- 若兩項都沒有,大數據對機器學習會沒什麼影響