Stanford機器學習---第七講. 機器學習系統設計

原文:http://blog.csdn.net/abcjennifer/article/details/7834256算法

 

本欄目(Machine learning)包括單參數的線性迴歸、多參數的線性迴歸、Octave Tutorial、Logistic Regression、Regularization、神經網絡、機器學習系統設計、SVM(Support Vector Machines 支持向量機)、聚類、降維、異常檢測、大規模機器學習等章節。全部內容均來自Standford公開課machine learning中Andrew老師的講解。(https://class.coursera.org/ml/class/index網絡

 

 

第七講. 機器學習系統設計——Machine learning System Design機器學習

===============================性能

(一)、決定基本策略學習

(二)、Error分析測試

(三)、對Skewed Classes創建Error Metrics
字體

(四)、在Precision 和 Recall (精度和召回率)間權衡google

(五)、機器學習數據選定spa

 


===============================.net

(一)、決定基本策略

 

在本章中,咱們用一個實際例子<怎樣進行垃圾郵件Spam的分類>來描述機器學習系統設計方法。

首先咱們來看兩封郵件,左邊是一封垃圾郵件Spam,右邊是一封非垃圾郵件Non-Spam:

觀察其樣式能夠發現,垃圾郵件有不少features,那麼咱們想要創建一個Spam分類器,就要進行有監督學習,將Spam的features提取出來,而但願這些features可以很好的區分Spam vs. Non-Spam.

就以下圖所示,咱們提取出來deal, buy, discount, now等feature,創建起這樣的一個feature向量:

這裏請你們注意:事實上,對於spam分類器,咱們並不是人工選擇100個看似是spam feature的feature做爲特徵,而是選取spam中詞頻最高的100個詞取而代之。

下面就是本節重點——如何決定基本策略,一些可能有利於classifier工做的方法:

 

  • 收集大量數據——如「honeypot" project
  • 從Email Route着手創建較爲複雜的feature——如發件人爲cheapbuying@bug.com
  • 對message正文創建複雜精確的feature庫——如是否應把discount和discounts視做同一個詞等
  • 創建算法檢查拼寫錯誤,做爲feature——如"med1cine"

 

固然,上述策略並不是所有奏效,以下面的練習題所示:

 

 

 

===============================

(二)、Error分析

咱們經常在一個ML算法設計的起步階段有些困惑,要用怎樣的系統?創建怎樣的模型,feature怎樣提取等……

這裏呢,咱們給你們推薦一個方法,用來創建一個ML系統:

 

  • 用at most 一天,24小時的時間實現一個簡單的算法,logistic regression也好,linear regression也好,用simple features而非仔細探究哪一個特徵更有效。而後呢,在cross-validation數據集上進行測試;
  • 利用畫learning curves的方法去探究,數據集更多 或者 加入更多features 是否有利於系統工做;
  • Error Analysis:上面已經在cross-validation數據集上測試了系統性能,如今呢,咱們人工去看是哪些數據形成了大error的產生?是否能夠經過改變systematic trend減小error?

 

仍是用Spam-Classifier舉例,咱們看一下進行Error Analysis的步驟:

 

  • 在創建了simple system 並在CV set上作測試後,咱們進行error analysis步驟,將全部spam分爲pharma,replica/fake,Steal password 和 其餘,這四類。
  • 找到一些可能有助於改善分類效果的features。
以下圖所示:

 

這裏呢,咱們不要感性地去想,而是最好用數字體現效果。好比對於discount/discounts/discounted/discounting是否被視爲都含有discount這個feature的問題,咱們不要主觀地去想,而是看若是看都含有這個feature,那麼結果是有3%的error,若是不都看作有discount這個feature,則有5%的error,因而可知哪一種方法比較好。

PS:介紹一個軟件Porter stemmer,能夠google到,是將discount/discounts/discounted/discounting視爲同類的軟件。

對因而否將大小寫視做同一個feature是一樣的道理。

 

 

 

 

===============================

(三)、對Skewed Classes創建Error Metrics

有些狀況下,Classification-accuracy 和 Classification-error不能描述出整個系統的優劣,好比針對下面的Skewed Classes。

什麼是Skewed Classes呢?一個分類問題,若是結果僅有兩類y=0和y=1,並且其中一類樣本很是多,另外一類很是少,咱們稱這種分類問題中的類爲Skewed Classes. 

好比下面這個問題:

咱們用一個logistic regression做爲預測samples是否爲cancer患者的模型。該模型在cross-validation set上測試的結果顯示,有1%的error,99%的正確診斷率。而事實上呢,只有0.5%的樣本爲真正的cancer患者。這樣一來,咱們創建另外一個算法去predict:

function y=predictCancer(x)

          y=0; %即忽略x中feature的影響

return;

好了,這麼一來,該算法將全部sample預測爲非癌症患者。那麼只存在0.5%的偏差,單純從classification-error來看,比咱們以前作的logistic regression要強,可事實上咱們清楚這種cheat方法只是trick,不能用做實際使用。所以,咱們引入了Error Metrics這個概念。

考慮一個二分問題,即將實例分紅正類(positive)或負類(negative)。對一個二分問題來講,會出現四種狀況。若是一個實例是正類而且也被 預測成正類,即爲真正類(True positive),若是實例是負類被預測成正類,稱之爲假正類(False positive)。相應地,若是實例是負類被預測成負類,稱之爲真負類(True negative),正類被預測成負類則爲假負類(false negative)。

TP:正確確定的數目;
FN:漏報,沒有正確找到的匹配的數目;
FP:誤報,給出的匹配是不正確的;
TN:正確拒絕的非匹配對數;

 

這樣就能夠創建一個Error Metrics(下圖左),並定義precision和recall,以下圖所示:

也可參考我原來關於ROC曲線的文章

precision:正確預測正樣本/我全部預測爲正樣本的;

recall:正確預測正樣本/真實值爲正樣本的;

當且僅當Precision和Recall都高的時候咱們能夠確信,該predict算法work well !

ok, 咱們再來看看當初將全部sample預測爲Non-Cancer的算法,這裏,TP=0,FP=0, FN=1, TN=199(假設sample共200個)

因爲TP=0, 因此precision=recall=0!證實了該算法的un-avaliable!

因此,不管一個類是不是Skewed Classes,只要知足precision 和 recall都很高才能夠保證該算法的實用性。

練習題,作下看:

最後須要提醒你們的是,關於哪邊做爲true,哪邊做爲false的問題。對於上面那個問題,咱們給定cancer的爲true,實際應用中,咱們應當在binary classification中指定類中sample較少的那一類做爲true,另外一類做爲false。這一點千萬不能搞錯!

 

 

 

 

===============================

(四)、在Precision 和 Recall (精度和召回率)間權衡

 

上一小節中給出了precision和recall的definition,這一節中,咱們經過畫出precision-recall之間的變化關係在二者間進行一個trade-off.

對於一個prediction問題,假設咱們採用以下方法進行預測:

這裏存在一個threshold=0.5。

根據

不一樣的threshold有以下兩類狀況:

 

  • 若是咱們但願在很確信的狀況下才告訴病人有cancer,也就是說不要給病人太多驚嚇,我告訴你有cancer,你確定有cancer;我告訴你沒cancer,你也有可能有cancer,那麼該狀況下有:higher threshold,higher precision,lower recall
  • 若是咱們不但願讓病人錯過提早治療,與上例相反,就有:lower threshold,lower precision,higher recall

 

這裏你們若是想不清楚能夠把error metrics畫出來看一下。

那麼咱們能夠畫出來precision-recall圖:

不一樣的數據,其曲線形式不一樣,但有一條規律是不變的:

thres高對應高precision低recall;

thres低對應低precision高recall;

☆那麼在不一樣算法或不一樣threshold形成的的{precision,recall}間,咱們怎樣選擇那個算法比較好呢?

加入咱們如今有三個算法(或threshold)的數據:

可見,Algorithm3中,recall=1,即predict全部y=1,這顯然違背了咱們的初衷。下面看評判標準。用p表示precision,r表示recall;

若是咱們選取評判標準=(p+r)/2,則algorithm3勝出,顯然不合理。這裏咱們介紹一個評價標準:F1-Score.

當p=0 或 r=0時,有f=0;

當p=1&&r=1時,有f=1,最大;

一樣咱們將f1 score 應用於以上三個算法,可的結果,algorithm1最大,也就是最好;algorithm3最小,也就是最差。所以咱們用F1 score來衡量一個算法的性能,也就是咱們說的precision和recall間的trade-off。

 

練習,作下吧~(這道略弱):

 

 

 

 

===============================

(五)、機器學習數據選定


對於機器學習,咱們能夠選擇不少不一樣的algorithems進行prediction,如:

可見,隨着training set的上升,accuracy通常會獲得提升,但事實上也不全是這樣。

好比房價預測,若是我僅僅給你房子的面積,而沒有房子在市中心仍是偏遠地區?房齡多少?等信息,咱們是沒法進行良好預測的。

這裏就涉及到如何合理處理訓練數據及的問題。

記得上一講中咱們已經介紹過了bias和variance的定義和區別,這裏咱們來看,他們的產生環境:

 

bias:J(train)大,J(cv)大,J(train)≈J(cv),bias產生於d小,underfit階段;

variance:J(train)小,J(cv)大,J(train)<<J(cv),variance產生於d大,overfit階段;

 

  • 想要保證bias小,就要保證有足夠多的feature,即linear/logistics regression中有不少parameters,neuron networks中應該有不少hidden layer neurons.
  • 想要保證variance小,就要保證不產生overfit,那麼就須要不少data set。這裏須要J(train)和J(CV)都很小,才能使J(test)相對小。

以下圖所示:

 

 

綜上所述,對數據及進行rational分析的結果是兩條:

首先,x中有足夠多的feature,以獲得low bias;

其次,有足夠大的training set,以獲得low variance;

練習題:

 

 

 

==============================================

本章重要,講述了機器學習中如何設計機器學習系統,涉及機器學習方法、策略、算法的問題,但願你們緊緊掌握,以減小沒必要要的時間浪費。

相關文章
相關標籤/搜索