【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 11—Machine Learning System Design
Lecture 11—Machine Learning System Design
11.1 垃圾郵件分類
本章中用一個實際例子: 垃圾郵件Spam的分類 來描述機器學習系統設計方法。首先來看兩封郵件,左邊是一封垃圾郵件Spam,右邊是一封非垃圾郵件Non-Spam:
垃圾郵件有很多features。如果我們想要建立一個Spam分類器,就要進行有監督學習,將Spam的features提取出來,而希望這些features能夠很好的區分Spam。
事實上,對於spam分類器,通常選取spam中詞頻最高的100個詞來做feature。
為了構建分類器演算法,可能有很多策略:
1. 收集更多的資料,讓我們有更多的垃圾郵件和非垃圾郵件的樣本
2. 基於郵件的路由資訊開發一系列複雜的特徵
3. 基於郵件的正文資訊開發一系列複雜的特徵,包括考慮截詞的處理
4. 為探測刻意的拼寫錯誤(把 watch 寫成 w4tch)開發複雜的演算法
11.2 誤差分析 Error Analysis
構建一個學習演算法的推薦方法為:
1. 從一個簡單的能快速實現的演算法開始,實現該演算法並用交叉驗證集資料測試這個演算法
2. 繪製學習曲線,決定是增加更多資料,或者新增更多特徵,還是其他選擇
3. 進行誤差分析:人工檢查交叉驗證集中我們演算法中產生預測誤差的例項,看看這些例項是否有某種系統化的趨勢
例如下圖中,對100個分類錯誤的郵件進行人工分析,左邊區分了它們的型別分佈,右邊分析沒有被正確分類的原因。
在誤差分析的時候,不能單純依靠直覺gut feeling ,而是用數字體現。
例如,對於discount/discounts/discounted/discounting 是否被視為都含有discount這個feature。如果看作含有這個feature,結果有3%的error;如果不看做有這個feature,則有5%的error。以此進行比較。
注:使用Porter stemmer 這種軟體可以合併類似的單詞,但是也可能引發錯誤。
11.3 類偏斜的誤差度量 Error Metrics for Skewed Classes
Skewed Classes:一個分類問題,結果僅有兩類y=0和y=1,其中一類樣本非常多、另一類非常少。
對於偏斜資料集,如果單純考慮準確率accuracy,會導致有時候模型預測的結果,還不如全部判斷為1或者全部判斷0 的結果好。 所以需要引入另外一些輔助度量指標
考慮一個二分問題,即將例項分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況:
1. 正確肯定(True Positive,TP):預測為真,實際為真
2. 正確否定(True Negative,TN):預測為假,實際為假
3. 錯誤肯定(False Positive,FP):預測為真,實際為假
4. 錯誤否定(False Negative,FN):預測為假,實際為真
這樣就可以建立一個Error Metrics(下圖左),並定義precision和recall,如下圖所示:
計算公式:
precision: 正確預測的正樣本/所有預測為正樣本的
recall:正確預測正樣本/真實值為正樣本的;
假設有一個spam分類任務,測試集只有1%為spam郵件(y=1),99%為non-spam郵件(y=0)。
(1)如果全都分類為non-spam 非垃圾郵件:
precision=0/(0+1)=0,recall=0/(0+99)=0,accurancy=(0+99)/100*100% = 99%
可以看出雖然acuracy 很高,但是recall 和 precision都是0,模型不合格。
(2)如果全都分類為spam 垃圾郵件:
precision=1/(99+1)*100%=1%, recall=1/(1+0)*100%=100%, accurancy=(1+0)/100*100% = 1%
precision 和 accuracy 都很低,模型也不合格。
所以,無論資料集是否偏斜,需要滿足precision 和 recall 都很高才可以保證該演算法的實用性。
11.4 查準率Precision 和 查全率Recall 之間的權衡
分類結果在0-1之間,所以我們需要選擇一個閾值,大於閾值的分類為1,小於閾值的分類為0。
precision-recall 和閾值的關係如下:
threshould 設定越高,查準率Precision越高、查全率Recall越低。因為判斷的準、但有更多正例被漏掉。
threshould 設定越低,查準率Precision越低、查全率Recall越高。因為找的全,但有更多負例被錯判為正例。
那麼如何選擇閾值? 我們引入一個評價標準 F1Score,選擇使F1值最大的閾值
下面這個例子中,演算法1的F1 值最高
11.5 資料集的大小
對於機器學習,通常可以選擇很多不同的演算法進行預測,隨著訓練集規模增大,Accuracy一般會提高:
但事實上,單純增大資料集並不能解決一切問題。 如果資料集中含的資訊很少(比如想對房價進行預測,但是隻有面積資料。這時候即使增加資料、或者對模型在面積這個feature上進行多項式處理,也起不到好的效果)
總之,結論為:
如果模型欠擬合,即偏差bias大: 那就要增加特徵(對神經網路增加hidden units);
如果模型過擬合,即方差variance大: 那就要增大資料集,使得Jcv ≈ Jtrain ,從而降低過擬合。