機器學習系統設計

轉載自:Coursera公開課筆記: 斯坦福大學機器學習第十一課“機器學習系統設計(Machine learning system design)”

其它筆記:Stanford機器學習---第七講. 機器學習系統設計


斯坦福大學機器學習斯坦福大學機器學習第十一課“機器學習系統設計(Machine learning system design)”學習筆記,本次課程主要包括5部分:

1) Prioritizing what to work on: Spam classification example(工作的優先級:垃圾郵件分類例子)

2) Error analysis(錯誤分析)

3) Error metrics for skewed classes(不對稱性分類的錯誤評估)

4) Trading off precision and recall(精確度和召回率的權衡)

5) Data for machine learning(數據對於機器學習的重要性)

以下是每一部分的詳細解讀。

 

1) Prioritizing what to work on: Spam classification example(工作的優先級:垃圾郵件分類例子)

首先讓我們來看一下垃圾郵件和非垃圾郵件的例子,以下是一個垃圾郵件示例:

垃圾郵件舉例-我愛公開課-52opencourse.com

我們將其標註爲“垃圾(spam)", 用1表示;以下是一個非垃圾郵件的例子:

非垃圾郵件舉例-我愛公開課-52opencourse.com

我們將其標註爲“非垃圾(non-spam)",用0表示。

如果我們有一些這樣標註好的垃圾和非垃圾郵件樣本,如何來訓練一個垃圾郵件分類器?很清楚這是一個有監督學習的問題,假設我們選擇邏輯迴歸算法來訓練這樣的分類器,首先必須選擇合適的特徵。這裏定義:

x = 郵件的特徵;
y = 垃圾郵件(1) 或 非垃圾郵件(0)

我們可以選擇100個典型的詞彙集合來代表垃圾/非垃圾(單詞),例如deal, buy, discount, andrew, now等,可以按它們的字母順序排序。對於已經標註好的郵件訓練樣本,如果100個詞彙中有單詞j在樣本中出現,就用1代表特徵向量x中的xj,否則用0表示,這樣訓練樣本就被特徵向量x所替代:
垃圾郵件分類特徵向量表示-我愛公開課-52opencourse.com
注意在實際使用中,我們不會手動去選擇100個典型的詞彙,而是從訓練集中選擇出現頻率最高的前n個詞,例如10000到50000個。

那麼,如何高效的訓練一個垃圾郵件分類器使其準確率較高,錯誤率較小?

- 首先很自然的考慮到收集較多的數據,例如"honeypot" project,一個專門收集垃圾郵件服務器ip和垃圾郵件內容的項目;

- 但是上一章已經告訴我們,數據並不是越多越好,所以可以考慮設計其他複雜的特徵,例如利用郵件的發送信息,這通常隱藏在垃圾郵件的頂部;

- 還可以考慮設計基於郵件主體的特徵,例如是否將"discount"和"discounts"看作是同一個詞?同理如何處理"deal"和"Dealer"? 還有是否將標點作爲特徵?

- 最後可以考慮使用複雜的算法來偵測錯誤的拼寫(垃圾郵件會故意將單詞拼寫錯誤以逃避垃圾郵件過濾器,例如m0rtgage, med1cine, w4tches)

2) Error analysis(錯誤分析)

在我們需要機器學習算法來解決一些實際問題時,建議:

  • - 從一個簡單的算法入手這樣可以很快的實現這個算法,並且可以在交叉驗證集上進行測試;
  • - 畫學習曲線以決定是否更多的數據,更多的特徵或者其他方式會有所幫助;
  • - 錯誤分析:人工檢查那些算法預測錯誤的例子(在交叉驗證集上),看看能否找到一些產生錯誤的原因。

假設交叉驗證集上有500個郵件樣本,其中算法錯分了100個郵件,那麼我們就人工來檢查這100個bad case, 並且按如下的方式對它們進行分類:

  • (i) 郵件是什麼類型的?
  • (ii) 什麼樣的線索或特徵你認爲有可能對算法的正確分類有幫助?

數值評估的重要性:
在對bad case進行分析後,我們可能會考慮如下的方法:

  • 對於discount/discounts/discounted/discounting 能否將它們看作是同一個詞?
  • 能不能使用“詞幹化”的工具包來取單詞的詞幹,例如“Porter stemmer"?

錯誤分析不能決定上述方法是否有效,它只是提供了一種解決問題的思路和參考,只有在實際的嘗試後才能看出這些方法是否有效。
所以我們需要對算法進行數值評估(例如交叉驗證集誤差),來看看使用或不使用某種方法時的算法效果,例如:

  • 不對單詞提前詞幹:5%錯誤率   vs 對單詞提取詞幹:3% 錯誤率
  • 對大小寫進行區分(Mom / mom): 3.2% 錯誤率

3) Error metrics for skewed classes(不對稱性分類的錯誤評估)

什麼是不對稱性分類?

以癌症預測或者分類爲例,我們訓練了一個邏輯迴歸模型hθ(x). 如果是癌症,y = 1, 其他則 y = 0。
在測試集上發現這個模型的錯誤率僅爲1%(99%都分正確了),貌似是一個非常好的結果?
但事實上,僅有0.5%的病人得了癌症,如果我們不用任何學習算法,對於測試集中的所有人都預測y = 0,既沒有癌症:

不對稱分類預測例子-我愛公開課-52opencourse.com

那麼這個預測方法的錯誤率僅爲0.5%,比我們廢好大力訓練的邏輯迴歸模型的還要好。這就是一個不對稱分類的例子,對於這樣的例子,僅僅考慮錯誤率是有風險的。

現在我們就來考慮一種標準的衡量方法:Precision/Recall(精確度和召回率)

首先對正例和負例做如下的定義:

正負例問題-我愛公開課-52opencourse.com

其中:

True Positive (真正例, TP)被模型預測爲正的正樣本;可以稱作判斷爲真的正確率

True Negative(真負例 , TN)被模型預測爲負的負樣本 ;可以稱作判斷爲假的正確率

False Positive (假正例, FP)被模型預測爲正的負樣本;可以稱作誤報率

False Negative(假負例 , FN)被模型預測爲負的正樣本;可以稱作漏報率

那麼對於癌症預測這個例子我們可以定義:

Precision-預測中實際得癌症的病人數量(真正例)除以我們預測的得癌症的病人數量:

Precision精確度-我愛公開課-52opencourse.com

Recall-預測中實際得癌症的病人數量(真正例)除以實際得癌症的病人數量:

召回率-我愛公開課-52opencourse.com

4) Trading off precision and recall(精確度和召回率的權衡)

假設我們的分類器使用了邏輯迴歸模型,預測值在0到1之間:0hθ(x)1, 一種通常的判斷正負例的方法是設置一個閾值,例如0.5:

  • 如果 hθ(x)0.5,則預測爲1, 正例;
  • 如果 hθ(x)<0.5, 則預測爲0, 負例;

這個時候,我們就可以計算這個分類器的precision and recall(精確度和召回率):

精確度和召回率的權衡-我愛公開課-52opencourse.com

這個時候,不同的閾值回導致不同的精確度和召回率,那麼如何來權衡這二值?對於癌症預測這個例子:

假設我們非常有把握時才預測病人得癌症(y=1), 這個時候,我們常常將閾值設置的很高,這會導致高精確度,低召回率(Higher precision, lower recall);

假設我們不希望將太多的癌症例子錯分(避免假負例,本身得了癌症,確被分類爲沒有得癌症), 這個時候,閾值就可以設置的低一些,這又會導致高召回率,低精確度(Higher recall, lower precision);

這些問題,可以歸結到一張Precision Recall曲線,簡稱PR-Curve:

Precision Recall 曲線-PR 曲線-我愛公開課-52opencourse.com

那麼如何來比較不同的Precison/Recall值呢?例如,對於下表:

精確度召回率表對比-F值-我愛公開課-52opencourse.com

通常我們會考慮用它們的均值來做比較,但是這會引入一個問題,例如上面三組Precision/Recall的均值分別是:0.45, 0.4, 0.51,最後一組最好,但是最後一組真的好嗎?如果我們將閾值定的很低,甚至爲0, 那麼對於所有的測試集,我們的預測都是y = 1, 那麼recall 就是1.0,我們根本就不需要什麼複雜的機器學習算法,直接預測y = 1就得了,所以,用Precison/Recall的均值不是一個好辦法。

現在我們引入標準的F值或者F1-score:

F值F1值-我愛公開課-52opencourse.com

F值是對精確度和召回率的一個很好的權衡,兩種極端的情況也能很好的平衡:

F值-Precision/Recall-我愛公開課-52opencourse.com


5) Data for machine learning(數據對於機器學習的重要性)

在設計一個高準確率的機器學習系統時,數據具有多大的意義? 2001年的時候,Banko and Brill曾做了一個實驗,對易混淆的單詞進行分類,也就是在一個句子的上下文環境中選擇一個合適的單詞,例如:
For breakfast I ate ___ eggs  
給定{to, two, too},選擇一個合適的單詞。
他們用瞭如下幾種機器學習算法:

  • -Perceptron(Logistic regression)
  • -Winnow
  • -Memory-based
  • -Naïve Bayes

根據訓練集的不同規模記錄這幾種算法的準確率,並且做了如下的圖:

數據對於機器學習的意義

最終得到的結論是:

“It's not who has the best algorithm that wins. It's who has the most data."

選擇大數據的理由?

假設我們的特徵xRn+1 有很多的信息來準確的預測y, 例如,上面的易混淆詞分類的例子,它有整個句子的上下文可以利用;

反過來,例如預測房價的時候,如果僅有房屋大小這個特徵,沒有其他的特徵,能預測準確嗎?

對於這樣的問題,一種簡單的測試方法是給定這樣的特徵,一個人類專家能否準確的預測出y?

如果一個學習算法有很多的參數,例如邏輯迴歸/線性迴歸有很多的特徵,神經網絡有很多隱藏的單元,那麼它的訓練集誤差將會很小,但容易陷入過擬合;如果再使用很大的訓練數據,那麼它將很難過擬合,它的訓練集誤差和測試集誤差將會近似相等,並且很小。所以大數據對於機器學習還是非常重要的。

 

參考資料:

機器學習視頻可以在Coursera機器學習課程上觀看或下載:https://class.coursera.org/ml

第十一課“機器學習系統設計”的課件資料下載鏈接:
PPT   PDF

http://en.wikipedia.org/wiki/Precision_and_recall

http://en.wikipedia.org/wiki/Accuracy_and_precision

召回率 Recall、精確度Precision、準確率Accuracy、虛警、漏警等分類判定指標

True(False) Positives (Negatives)

http://en.wikipedia.org/wiki/F1_score

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章