Stanford機(jī)器學(xué)習(xí)---第七講. 機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)

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

本欄目(Machine learning)包括單參數(shù)的線性回歸、多參數(shù)的線性回歸、Octave Tutorial、Logistic Regression、Regularization、神經(jīng)網(wǎng)絡(luò)、機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)、SVM(Support Vector Machines 支持向量機(jī))、聚類、降維、異常檢測(cè)、大規(guī)模機(jī)器學(xué)習(xí)等章節(jié)。所有內(nèi)容均來自Standford公開課machine learning中Andrew老師的講解。(https://class.coursera.org/ml/class/index

第七講. 機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)——Machine learning System Design

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

(一)、決定基本策略

(二)、Error分析

(三)、對(duì)Skewed Classes建立Error Metrics

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

(五)、機(jī)器學(xué)習(xí)數(shù)據(jù)選定

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

(一)、決定基本策略

在本章中,我們用一個(gè)實(shí)際例子<怎樣進(jìn)行垃圾郵件Spam的分類>來描述機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)方法。

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

觀察其樣式可以發(fā)現(xiàn),垃圾郵件有很多features,那么我們想要建立一個(gè)Spam分類器,就要進(jìn)行有監(jiān)督學(xué)習(xí),將Spam的features提取出來,而希望這些features能夠很好的區(qū)分Spam vs. Non-Spam.

就如下圖所示,我們提取出來deal, buy, discount, now等feature,建立起這樣的一個(gè)feature向量:

這里請(qǐng)大家注意:事實(shí)上,對(duì)于spam分類器,我們并非人工選擇100個(gè)看似是spam feature的feature作為特征,而是選取spam中詞頻最高的100個(gè)詞取而代之。

下面就是本節(jié)重點(diǎn)——如何決定基本策略,一些可能有利于classifier工作的方法:

收集大量數(shù)據(jù)——如“honeypot" project

從Email Route著手建立較為復(fù)雜的feature——如發(fā)件人為cheapbuying@bug.com

對(duì)message正文建立復(fù)雜精確的feature庫(kù)——如是否應(yīng)把discount和discounts視作同一個(gè)詞等

建立算法檢查拼寫錯(cuò)誤,作為feature——如"med1cine"

當(dāng)然,上述策略并非全部奏效,如下面的練習(xí)題所示:

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

(二)、Error分析

我們常常在一個(gè)ML算法設(shè)計(jì)的起步階段有些困惑,要用怎樣的系統(tǒng)?建立怎樣的模型,feature怎樣提取等……

這里呢,我們給大家推薦一個(gè)方法,用來建立一個(gè)ML系統(tǒng):

用at most 一天,24小時(shí)的時(shí)間實(shí)現(xiàn)一個(gè)簡(jiǎn)單的算法,logistic regression也好,linear regression也好,用simple features而非仔細(xì)探究哪個(gè)特征更有效。然后呢,在cross-validation數(shù)據(jù)集上進(jìn)行測(cè)試;

利用畫learning curves的方法去探究,數(shù)據(jù)集更多 或者 加入更多features 是否有利于系統(tǒng)工作;

Error Analysis:上面已經(jīng)在cross-validation數(shù)據(jù)集上測(cè)試了系統(tǒng)性能,現(xiàn)在呢,我們?nèi)斯とタ词悄男?shù)據(jù)造成了大error的產(chǎn)生?是否可以通過改變systematic trend減少error?

還是用Spam-Classifier舉例,我們看一下進(jìn)行Error Analysis的步驟:

在建立了simple system 并在CV set上做測(cè)試后,我們進(jìn)行error analysis步驟,將所有spam分為pharma,replica/fake,Steal password 和 其他,這四類。

找到一些可能有助于改善分類效果的features。

如下圖所示:

這里呢,我們不要感性地去想,而是最好用數(shù)字體現(xiàn)效果。比如對(duì)于discount/discounts/discounted/discounting是否被視為都含有discount這個(gè)feature的問題,我們不要主觀地去想,而是看如果看都含有這個(gè)feature,那么結(jié)果是有3%的error,如果不都看做有discount這個(gè)feature,則有5%的error,由此可見哪種方法比較好。

PS:介紹一個(gè)軟件Porter stemmer,可以google到,是將discount/discounts/discounted/discounting視為同類的軟件。

對(duì)于是否將大小寫視作同一個(gè)feature是同樣的道理。

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

(三)、對(duì)Skewed Classes建立Error Metrics

有些情況下,Classification-accuracy 和 Classification-error不能描述出整個(gè)系統(tǒng)的優(yōu)劣,比如針對(duì)下面的Skewed Classes。

什么是Skewed Classes呢?一個(gè)分類問題,如果結(jié)果僅有兩類y=0和y=1,而且其中一類樣本非常多,另一類非常少,我們稱這種分類問題中的類為Skewed Classes.

比如下面這個(gè)問題:

我們用一個(gè)logistic regression作為預(yù)測(cè)samples是否為cancer患者的模型。該模型在cross-validation set上測(cè)試的結(jié)果顯示,有1%的error,99%的正確診斷率。而事實(shí)上呢,只有0.5%的樣本為真正的cancer患者。這樣一來,我們建立另一個(gè)算法去predict:

function y=predictCancer(x)

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

return;

好了,這么一來,該算法將所有sample預(yù)測(cè)為非癌癥患者。那么只存在0.5%的誤差,單純從classification-error來看,比我們之前做的logistic regression要強(qiáng),可事實(shí)上我們清楚這種cheat方法只是trick,不能用作實(shí)際使用。因此,我們引入了Error Metrics這個(gè)概念。

考慮一個(gè)二分問題,即將實(shí)例分成正類(positive)或負(fù)類(negative)。對(duì)一個(gè)二分問題來說,會(huì)出現(xiàn)四種情況。如果一個(gè)實(shí)例是正類并且也被 預(yù)測(cè)成正類,即為真正類(True positive),如果實(shí)例是負(fù)類被預(yù)測(cè)成正類,稱之為假正類(False positive)。相應(yīng)地,如果實(shí)例是負(fù)類被預(yù)測(cè)成負(fù)類,稱之為真負(fù)類(True negative),正類被預(yù)測(cè)成負(fù)類則為假負(fù)類(false negative)。

TP:正確肯定的數(shù)目;

FN:漏報(bào),沒有正確找到的匹配的數(shù)目;

FP:誤報(bào),給出的匹配是不正確的;

TN:正確拒絕的非匹配對(duì)數(shù);

這樣就可以建立一個(gè)Error Metrics(下圖左),并定義precision和recall,如下圖所示:

也可參考我原來關(guān)于ROC曲線的文章

precision:正確預(yù)測(cè)正樣本/我所有預(yù)測(cè)為正樣本的;

recall:正確預(yù)測(cè)正樣本/真實(shí)值為正樣本的;

當(dāng)且僅當(dāng)Precision和Recall都高的時(shí)候我們可以確信,該predict算法work well !

ok, 我們?cè)賮砜纯串?dāng)初將所有sample預(yù)測(cè)為Non-Cancer的算法,這里,TP=0,F(xiàn)P=0, FN=1, TN=199(假設(shè)sample共200個(gè))

由于TP=0, 所以precision=recall=0!證明了該算法的un-avaliable!

所以,無論一個(gè)類是否是Skewed Classes,只要滿足precision 和 recall都很高才可以保證該算法的實(shí)用性。

練習(xí)題,做下看:

最后需要提醒大家的是,關(guān)于哪邊作為true,哪邊作為false的問題。對(duì)于上面那個(gè)問題,我們給定cancer的為true,實(shí)際應(yīng)用中,我們應(yīng)當(dāng)在binary classification中指定類中sample較少的那一類作為true,另一類作為false。這一點(diǎn)千萬不能搞錯(cuò)!

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

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

上一小節(jié)中給出了precision和recall的definition,這一節(jié)中,我們通過畫出precision-recall之間的變化關(guān)系在兩者間進(jìn)行一個(gè)trade-off.

對(duì)于一個(gè)prediction問題,假設(shè)我們采用如下方法進(jìn)行預(yù)測(cè):

這里存在一個(gè)threshold=0.5。

根據(jù)

不同的threshold有如下兩類情況:

如果我們希望在很確信的情況下才告訴病人有cancer,也就是說不要給病人太多驚嚇,我告訴你有cancer,你肯定有cancer;我告訴你沒cancer,你也有可能有cancer,那么該情況下有:higher threshold,higher precision,lower recall

如果我們不希望讓病人錯(cuò)過提前治療,與上例相反,就有:lower threshold,lower precision,higher recall

這里大家如果想不清楚可以把error metrics畫出來看一下。

那么我們可以畫出來precision-recall圖:

不同的數(shù)據(jù),其曲線形式不同,但有一條規(guī)律是不變的:

thres高對(duì)應(yīng)高precision低recall;

thres低對(duì)應(yīng)低precision高recall;

☆那么在不同算法或不同threshold造成的的{precision,recall}間,我們?cè)鯓舆x擇那個(gè)算法比較好呢?

加入我們現(xiàn)在有三個(gè)算法(或threshold)的數(shù)據(jù):

可見,Algorithm3中,recall=1,即predict所有y=1,這顯然違背了我們的初衷。下面看評(píng)判標(biāo)準(zhǔn)。用p表示precision,r表示recall;

如果我們選取評(píng)判標(biāo)準(zhǔn)=(p+r)/2,則algorithm3勝出,顯然不合理。這里我們介紹一個(gè)評(píng)價(jià)標(biāo)準(zhǔn):F1-Score.

當(dāng)p=0 或 r=0時(shí),有f=0;

當(dāng)p=1&&r=1時(shí),有f=1,最大;

同樣我們將f1 score 應(yīng)用于以上三個(gè)算法,可的結(jié)果,algorithm1最大,也就是最好;algorithm3最小,也就是最差。因此我們用F1 score來衡量一個(gè)算法的性能,也就是我們說的precision和recall間的trade-off。

練習(xí),做下吧~(這道略弱):

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

(五)、機(jī)器學(xué)習(xí)數(shù)據(jù)選定

對(duì)于機(jī)器學(xué)習(xí),我們可以選擇很多不同的algorithems進(jìn)行prediction,如:

可見,隨著training set的上升,accuracy一般會(huì)得到提高,但事實(shí)上也不全是這樣。

比如房?jī)r(jià)預(yù)測(cè),如果我僅僅給你房子的面積,而沒有房子在市中心還是偏遠(yuǎn)地區(qū)?房齡多少?等信息,我們是無法進(jìn)行良好預(yù)測(cè)的。

這里就涉及到如何合理處理訓(xùn)練數(shù)據(jù)及的問題。

記得上一講中我們已經(jīng)介紹過了bias和variance的定義和區(qū)別,這里我們來看,他們的產(chǎn)生環(huán)境:

bias:J(train)大,J(cv)大,J(train)≈J(cv),bias產(chǎn)生于d小,underfit階段;

variance:J(train)小,J(cv)大,J(train)<<J(cv),variance產(chǎn)生于d大,overfit階段;

想要保證bias小,就要保證有足夠多的feature,即linear/logistics regression中有很多parameters,neuron networks中應(yīng)該有很多hidden layer neurons.

想要保證variance小,就要保證不產(chǎn)生overfit,那么就需要很多data set。這里需要J(train)和J(CV)都很小,才能使J(test)相對(duì)小。

如下圖所示:

綜上所述,對(duì)數(shù)據(jù)及進(jìn)行rational分析的結(jié)果是兩條:

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

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

練習(xí)題:

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

本章重要,講述了機(jī)器學(xué)習(xí)中如何設(shè)計(jì)機(jī)器學(xué)習(xí)系統(tǒng),涉及機(jī)器學(xué)習(xí)方法、策略、算法的問題,希望大家牢牢掌握,以減少不必要的時(shí)間浪費(fèi)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容