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 (精度和召回率)間權衡

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

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

(一)、決定基本策略

在本章中,我們用一個實際例子<怎樣進行垃圾郵件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;

練習題:

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

本章重要,講述了機器學習中如何設計機器學習系統,涉及機器學習方法、策略、算法的問題,希望大家牢牢掌握,以減少不必要的時間浪費。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容