吳恩達機器學習筆記-機器學習系統設計
確定執行的優先順序
我們已經學習過一些機器學習的演算法,那麼如何設計一個機器學習系統呢,課程中舉了一個垃圾郵件分類器的例子,例子比較簡單這裡就不再贅述:
那麼如何來提升這個分類器的準確度呢?有下面幾個建議:
- 收集更多的資料
- 增加更復雜的特徵(比如郵件頭)
- 開發更復雜的演算法來鑑定錯誤拼寫
誤差分析
如果你準備研發一個機器學習應用,下面有一些關於開發的一些建議:
其中誤差分析不一定會對改善演算法的表現有幫助,唯一的辦法是嘗試著去做然後看看其是否能起到效果。並且我們需要設定一個誤差的度量值來判斷該演算法是否是有效的。
偏斜類問題的誤差評估
舉一個判斷癌症的問題,這顯然是個分類問題,假設y=1為是癌症,反之則判定為不是。我們可能會設計一個演算法,該演算法的準確率有99%,也就是說1%的誤差。但如果癌症患者實際上只佔據0.5%,那麼設計一個演算法,該演算法設定y的值恆為0,那麼這個演算法的誤差率只有0.5%。比之前設計的演算法的誤差要低,但這個演算法顯然是不符合要求的,因為它設定y的值為一個固定值,這並不是我們想要的。
像這種分類問題中,正負樣本的數量偏差太大,比如這個例子裡假設是癌症為正樣本,那麼這裡的負樣本的數量顯然遠遠大於正樣本,這種情況就叫做偏斜類(skewed classes)。那麼在這種情況下,我們需要一個不同的誤差度量值,其中一種誤差度量值叫做 查準率和召回率 ,如下所示:
假設我們用一個測試集評估一個分類模型,對於測試集中的樣本,每個測試集的樣本都等於1或者0,學習演算法要做的是做出值的預測,並且學習演算法會為每一個測試集中的例項做出預測,預測值也是1或者0。那麼如上圖的2*2的表格。如果有一個樣本它實際所屬的類是1,預測的類也是1,那麼我們叫這個樣本為True Positive,意思是演算法預測其為1且實際上它的確為1;如果有一個樣本所屬的類為0,但演算法預測的值為1,那麼稱這個樣本為False Positive;如果有一個樣本所屬的類為1,但演算法預測的值為0,那麼稱這個樣本為False Negative;如果有一個樣本所屬的類為0,且演算法預測的值為0,那麼稱這個樣本為True Negative;
所謂查準率(precision),在這裡就是實際上患有癌症且我們預測患有癌症的佔據所有預測的患有癌症的比例,公式就是:
所謂召回率(recall),在這裡就是實際上患有癌症且我們預測患有癌症的佔據實際上患有癌症的比例,公式就是:
當查準率和召回率都很大時,我們就可以斷定該演算法是符合我們期望的。上述例子裡,恆為0的那個演算法的召回率就是0,因此判定該演算法是不符合我們所期望的。
查準率和召回率的權衡
繼續討論上述的癌症判定問題,之前我們判定分類問題時經常設定大於等於0.5則為1,反之為0。但假設這裡希望對於判定癌症的肯定程度更高一點,那麼就可以設定大於等於0.7的時候才判定為癌症。那麼這個時候,按照公式,查準率會變高,召回率會變低。如果假設這裡希望不漏過更多可能為癌症的患者,那麼久可以設定大於等於0.3時判定為癌症,根據公式,此時召回率會變高,查準率會變低。一般來說這裡的判定臨界值需要根據不同情況來決定。
那如何來比較這些查準率和召回率呢?下面有三組演算法對應的查準召回率:
如果用兩者的平均值來衡量演算法是否合適呢?我們來看最後一個演算法的召回率為1,也就是說假預測所有的資料都為1,這種演算法顯然是不符合要求的,但其查準召回率的平均值是三者中最高的,顯然用平均值來判斷是不合適的。這裡就提出一個F Score的概念(也叫做F1 Score):
用這個值來判定演算法是否合適,上述三個演算法中,第一個演算法的F Score最高,因此可以判定該演算法是最合適的。這個F Score沒有什麼其他特殊含義,但可以給我們選擇機器學習演算法時起到一個幫助判斷的作用。
機器學習資料
在有大量的資料的情況下,並在某種型別的學習演算法中進行訓練。可以是一種獲得一個具有良好效能的學習演算法 有效的方法。因此在機器學習中有一個共識:
取得成功的人不是擁有最好演算法的人 而是擁有最多資料的人
那麼這種說法怎樣判斷是否正確呢?首先特徵x要包含足夠的資訊來預測y(比如在只給定x的情況下,該領域的專家能自信的預測y),然後,我們要訓練一個具有大量引數(能夠學習或表示相當複雜的函式)的學習演算法,這樣可以使得偏差更小,在此之上擁有大量資料的話,可以使得方差減小。這樣我們可以得出一個較為良好的演算法。