week6課程更多地是講解類似best practice的工程實踐。講述了實際訓(xùn)練模型過程中我們會遇到的兩大類問題(high bias 和 high variance), 以及如何分析定位問題和解決這些問題。
Evaluating a learning algorithm
Evaluating a Hypothesis
想象一下我們實際的模型構(gòu)造過程:
- 根據(jù)具體的需求來將我們要做的預(yù)測分為回歸問題還是分類問題;
- 選擇一個算法(比如使用Linear regression還是logistic regression)
- 收集樣本數(shù)據(jù)
- 根據(jù)選定的算法構(gòu)造模型
- 訓(xùn)練模型
- 評估模型
- 改進(jìn)模型
這里我們會發(fā)現(xiàn)這個過程的很多步驟是需要不斷迭代改進(jìn)的,那么這個過程中的第6步評估模型就很重要,它讓我們知道我們的模型實際到底是好還是不好,以及不好的原因是什么,從而給我們下一步改進(jìn)模型提供方向。
評估模型最基本的方式是將樣本數(shù)據(jù)隨機(jī)分為兩部分(訓(xùn)練數(shù)據(jù)集70%, 和測試數(shù)據(jù)集30%),這樣我們用訓(xùn)練集的樣本訓(xùn)練好之后,就可以使用測試集的樣本計算其'error',根據(jù)這個error的大小我們就可以評估模型的好與壞。
計算這個'error'誤差,我們需要量化的標(biāo)準(zhǔn),這就用到了我們之前的cost function(對于logistic分類問題并不同)
-
針對Linear regression,可以使用如下公式:
1.1-針對訓(xùn)練集的誤差計算 -
針對logistic分類問題,先看一下單個樣本的誤差如何計算:
1.2-單個樣本的誤差計算
單個樣本的誤差只有0,1兩種情況,預(yù)測準(zhǔn)確為誤差為0, 相反預(yù)測不準(zhǔn)確則為1
然后我們將所有訓(xùn)練集中的樣本的誤差求平均值,使用如下公式:
1.3-樣本集總體誤差
這樣我們就有了量化評估模型好壞的依據(jù)。
Model Selection and Train/Validation/Test Sets
我們在構(gòu)造模型時,尤其針對Linear Regression和Logistic Regression我們需要確定用什么高次項,即我們需要選擇次數(shù)d,當(dāng)d越高,擬合越好,甚至過擬合;相反越低,擬合越不好,可能就under fitting了。但是如果我們單純的使用測試集來選擇d,這會導(dǎo)致在測試集上擬合得很好,但實際預(yù)測時存在過擬合的問題,因為我們在測試集選擇的d之后再去用測試集評估模型這肯定擬合的好,所以無法評估泛化得好壞。正是基于這個原因,我們需要將樣本集分為三個部分:訓(xùn)練集(60%), cross validation set(20%), test set(20%).
cross validation set就可以用于選擇這個d值。
Bias vs. Variance
當(dāng)我們用訓(xùn)練好的模型進(jìn)行實際預(yù)測時,我們可能發(fā)現(xiàn)預(yù)測的誤差很大,而誤差通常有兩種情況:
- high bias (under fitting)
- high variance (over fitting)
high bias問題
high bias說明我們的模型是有問題的,擬合不夠好,那么我們可以做如下調(diào)整:
- 增加features,(直覺上說我們獲取了更多信息當(dāng)然可以做更好的預(yù)測,以房價預(yù)測為例,當(dāng)我們有了更多跟房屋價格有關(guān)的信息,如地理位置,房屋年代,周邊設(shè)施等信息之后,我們當(dāng)然可以更好地評估房價)
- 增加polynomial features,通過增加高次項使得函數(shù)能夠更好的擬合
- 調(diào)整Regularization rate λ,通過降低λ,也可以使得model更好地擬合我們的數(shù)據(jù)
- 針對神經(jīng)網(wǎng)絡(luò),我們還可以通過增加hidden layer的層數(shù),以及unit數(shù)量來使得模型更好的擬合,這其實也相當(dāng)于增加了feature的數(shù)量
high variance問題
high variance說明我們的模型存在過擬合,也就是過于精確地匹配了訓(xùn)練數(shù)據(jù),但是不夠general,而解決過擬合問題,通??梢宰鋈缦抡{(diào)整:
- 減少feature數(shù)量
- 調(diào)整polynomial的高次項,通常將高次降為低次,或者說去掉高次(后邊Andrew講了如何選擇次數(shù)d)
- 增加λ
- 針對神經(jīng)網(wǎng)絡(luò),我們還可以減少hidden layer的層數(shù)或unit的數(shù)量
- 增加樣本的數(shù)量也可以讓模型更好地泛化
通過圖形來評估模型
通過圖形我們可以看到不同的d,最終其traning set的誤差和cross validation的誤差表現(xiàn),如下圖:

- 從圖中可以看到當(dāng)d比較小時,無論是訓(xùn)練集還是CV集,其誤差都很大,說明存在under fitting問題或者說high bias問題,這時兩種誤差比較接近
- 當(dāng)d增大后,訓(xùn)練集的誤差逐漸減小,說明擬合越來越好,但是到一定程度后,CV集誤差開始增大,說明開始過擬合了,這時兩個誤差會有較大差距。
通過圖形我們可以找到CV集的極值點,從而可以判斷哪個d值是最合適的。
同樣道理,我們也可以通過圖形來選擇Regularization parameter λ,如下圖所示

- 從圖中可以看出當(dāng)λ很大時,會導(dǎo)致所有的高次項接近于0,極端情況就是類似一條橫著的直線,當(dāng)然無法擬合,所以導(dǎo)致無論是訓(xùn)練集還是CV集的誤差都會很大,兩者值接近
- 當(dāng)λ很小時,訓(xùn)練集會擬合得非常好,但可能導(dǎo)致過擬合,從而使得CV集誤差較大,兩者差距很大。
從圖形中可以看出Jcv(θ)的極值點就是我們想要選擇的λ
另外,還有一種圖形是關(guān)于樣本數(shù)量的圖形,即學(xué)習(xí)曲線圖形(Learning Curves)
如下圖:

上圖可以看出無論是training set還是CV set,其誤差都很大,而且兩者隨著樣本數(shù)的增加,并沒有大幅改進(jìn),且兩者誤差最后很接近。這種情況就是屬于high bias問題,模型擬合的不好

上圖可以看出訓(xùn)練集的誤差和CV集誤差存在較大差距,這種情況就是過擬合。
Building a spam classifier
這個章節(jié)Andrew主要用一個email spam classifier的實際例子來闡釋實際項目應(yīng)該如何開展,主要講了兩部分內(nèi)容,第一部分講了我們在實際項目中實際在哪些工作上會花費(fèi)時間;第二部分講了如何去評估我們的機(jī)器學(xué)習(xí)系統(tǒng)的優(yōu)劣,并明確改進(jìn)的方向。
第一部分主要是這個email的分類器有點意思,通過分詞,把一封郵件轉(zhuǎn)化為一個向量,從而把一個實際生活中會遇到的問題轉(zhuǎn)化為了一個數(shù)學(xué)問題。(我認(rèn)為這種轉(zhuǎn)化是非常有價值和創(chuàng)造性的地方,有了這種轉(zhuǎn)化我們才能真正解決實際問題,并創(chuàng)造價值),具體看下圖:

這里我想是否可以將詞頻數(shù)量作為向量中的值,而不單是0和1,這樣后續(xù)是否可以更好比較向量之間的關(guān)系,而且我認(rèn)為很大程度跟詞頻是有關(guān)系的。
第二部分,Andrew首先推薦了工程實踐的流程,大致上是說要快速搭建一個簡單的系統(tǒng)先,然后通過learning curve來判斷改進(jìn)的方向,再實際根據(jù)情況(如是high bias問題還是high variance問題?)再判斷去如何改進(jìn)。詳細(xì)如下:

關(guān)于第三點,作者的意思是說通過查看cv set中發(fā)生誤判的例子,看下大體是什么原因?qū)е碌?,比如漏掉了很多spam郵件,那就看下這些郵件都是什么類型的郵件,有哪些特點,是否可以通過添加更多識別詞或其它特征來改進(jìn)對這類郵件的識別,如下所示:

可以看出實際做的過程中,還要從本質(zhì)上去思考到底spam郵件有哪些特點,那么我們就需要將這些特點加入到機(jī)器學(xué)習(xí)的特征當(dāng)中,從而改進(jìn)我們的模型。
最后,作者表達(dá)了要有一個數(shù)字指標(biāo)來簡單地判斷模型的性能,比如Jtest。只有通過一個數(shù)字的量化的指標(biāo),我們才好判斷我們對模型的改進(jìn)到底有沒有意義,作用有多大。如下:

Handling Skewed Data
這一章節(jié)主要講述了什么是Skewed Data,并由此引入了精確率(precision)和召回率(recall)的概念。
什么是Skewed data就是某個預(yù)測值(或者說某個分類)本身其比例就非常小,另一個分類的比例很大,這就是說如果我們每次都預(yù)測為那個比例較大的分類,我們誤差仍然很低,因此單純的錯誤率衡量指標(biāo)就失去效力了。因此,我們需要引入新的衡量指標(biāo)來針對此類存在Skewed Data的問題。這就是準(zhǔn)確率和召回率,如下圖所示:

準(zhǔn)確率是衡量我們預(yù)測的到底有多準(zhǔn)確,所以要用我們預(yù)測準(zhǔn)確的為positive數(shù)量除以所有預(yù)測為positive的數(shù)量
召回率是衡量預(yù)測的涵蓋率,即我們預(yù)測為positive的樣本涵蓋了多大比例的所有的positive樣本。
還以預(yù)測癌癥為例,如果我們的模型總是返回0(即預(yù)測沒有癌癥),那么其召回率就變成了0,從而可以判斷出模型是有問題的。因此當(dāng)精確率和召回率都比較高的時候,我們會對這個模型更有信心。
第二小節(jié)主要講了如何權(quán)衡精確率和召回率,某種程度上它們之間是矛盾的,因此需要根據(jù)實際的情況和產(chǎn)品需求來定到底是想要更高的精確率還是要更高的召回率。
而當(dāng)我們想要通過一個單獨(dú)的數(shù)值來衡量模型的性能時,可以使用F score,如下:

Using Large Data Sets
此章節(jié)重點講了在哪些情況下大的數(shù)據(jù)量是有用的。
Andrew首先講了一些研究,發(fā)現(xiàn)很多算法,都會隨著數(shù)據(jù)量的提升而獲得性能的提升。但是這是有前提的,前提就是這些數(shù)據(jù)中包含的特征是否足夠我們做出預(yù)測,想象一個人類專家是否可以根據(jù)這些特征來正確地預(yù)測是我們首先要問的一個問題。當(dāng)這個條件滿足的情況下,通常數(shù)據(jù)量越大,模型可能的性能就越好。


