1. 程式人生 > >【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 11—Machine Learning System Design

【原】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 ,從而降低過擬合。