
1. 章節(jié)主要內(nèi)容(遇到不清楚的概念請在第二節(jié)基礎(chǔ)知識中找尋解釋)
在第一章緒論中,我們知道要根據(jù)具體的問題選擇具體的算法和歸納偏好。那么我們怎么判定我們的選擇是正確的呢?這就需要擁有一套規(guī)范的模型評估與選擇方法論了。
1)首先,我們要理解機(jī)器學(xué)習(xí)為什么需要一套模型評估與選擇方法論?(經(jīng)驗誤差與過擬合)
在前一章的學(xué)習(xí)中,我們知道機(jī)器學(xué)習(xí)是對數(shù)據(jù)集的泛化過程,即從輸入的數(shù)據(jù)中歸納出一套能適用于所有潛在樣本的“普遍規(guī)律”。可因為訓(xùn)練數(shù)據(jù)不夠充分,機(jī)器學(xué)習(xí)出來的模型并沒辦法涵蓋所有的情況,這就會導(dǎo)致學(xué)習(xí)器的實際預(yù)測輸出與樣本的真實輸出之間存在“誤差”。
學(xué)習(xí)器在訓(xùn)練集上的誤差稱為“經(jīng)驗誤差”,在新樣本上的誤差稱為“泛化誤差”。很明顯,要使得分類器盡可能的有用,我們應(yīng)該要讓泛化誤差僅可能的小??上г诂F(xiàn)實環(huán)境中,我們很難知道新樣本是什么樣的,所以我們實際能做的只有努力使經(jīng)驗誤差最小化。
說到這里,也許有的心急的同學(xué)已經(jīng)迫不及待的去將算法設(shè)計的盡可能百分百的滿足所有訓(xùn)練樣本了,可卻忘了學(xué)習(xí)器真正要達(dá)到的是泛化誤差盡可能小,而不是目前的折中方案降低經(jīng)驗誤差。而在降低經(jīng)驗誤差的道路上,駐守著機(jī)器學(xué)習(xí)領(lǐng)域最大的攔路虎之一:“過擬合”
“過擬合”是指學(xué)習(xí)器對訓(xùn)練樣本學(xué)的太好了,導(dǎo)致泛化程度不夠(還記得機(jī)器學(xué)習(xí)就是一個泛化過程嗎),沒法適應(yīng)新的數(shù)據(jù)樣本。與之相反的還有一個“欠擬合”的概念,就是對訓(xùn)練樣本中的一般規(guī)律都沒學(xué)習(xí)好。舉個例子,你通過姚明這個訓(xùn)練樣本來學(xué)習(xí)一個人類判斷器,如果你將身高兩米二十以上作為判斷是否是人的依據(jù),那就是過擬合了;而如果你沒有“直立行走”這樣的特征都沒有找出來作為判斷是否是人的標(biāo)準(zhǔn),那就是欠擬合了。
上邊例子是我自己想的,下邊貼出書中一個更容易理解的例子來幫助大家理解吧:
所以,我們知道了吧,我們?yōu)槭裁葱枰惶啄P驮u估與選擇的方法論呢?因為我們的訓(xùn)練數(shù)據(jù)沒法真正代表真實的樣本空間,而泛化誤差無法直接獲得,經(jīng)驗誤差又因為過擬合的存在而不適合作為標(biāo)準(zhǔn),所以我們才需要一套模型評估與選擇的方法論
2)我們知道了為什么要對模型進(jìn)行評估,那么在不知道泛化誤差的情況下,我們該如何進(jìn)行評估呢?
一個合理的思路是:既然我們沒法拿到新樣本來進(jìn)行泛化誤差計算,那么我們可以從訓(xùn)練樣本中取出一部分來,假裝它是一組新樣本,并用這些樣本計算出來的誤差作為泛化誤差的近似。這組選出來的樣本被稱為“測試集”,測試集上的誤差被稱為測試誤差。(我們學(xué)習(xí)本書的一個主要目的是學(xué)會機(jī)器學(xué)習(xí)領(lǐng)域的脈絡(luò)和背后邏輯,這種評估思路是科學(xué)研究領(lǐng)域的一個常用思路。領(lǐng)悟這種思路有助于我們解決其它領(lǐng)域上的問題)
不過我們需要注意一點,那就是測試集應(yīng)該盡量不與訓(xùn)練集重合,否則測試集計算出的誤差將沒法準(zhǔn)確代表該學(xué)習(xí)器的泛化能力。
基于這個考慮,書中列出了以下幾種把包含m個樣例的數(shù)據(jù)集D劃分為訓(xùn)練集S和測試集T的辦法(只介紹中心思想,具體內(nèi)容請查看書中原文)
[1]留出法(hold-out)
直接將D劃分為互斥的兩部分S和T,在S上訓(xùn)練出模型后,用T來評估測試誤差
[2]交叉驗證法(cross validation)
將D劃分為互斥的k個子集,每次訓(xùn)練用其中(k-1)個數(shù)據(jù),用剩下的一個作為測試集。這樣就能獲得k組訓(xùn)練/測試集,對這k組分別進(jìn)行訓(xùn)練和測試,最終返回k個測試結(jié)果的均值
[3]自助法(bootstrapping)
每次從D中隨機(jī)復(fù)制一個樣本到D1中,重復(fù)m次,會得到一個擁有m個數(shù)據(jù)樣本的D1數(shù)據(jù)集。顯然,D中的一部分?jǐn)?shù)據(jù)會多次出現(xiàn)在D1中,而另一部分樣本不出現(xiàn)。根據(jù)平均分布概率計算,大約有36.8%的數(shù)據(jù)不會被復(fù)制到D1中
[4]注意點
訓(xùn)練/測試集的劃分要盡可能保持?jǐn)?shù)據(jù)分布一致性
單詞劃分往往不夠穩(wěn)定可靠,一般要采用若干次隨機(jī)劃分、重復(fù)進(jìn)行實驗評估后取平均值作為評估結(jié)果
訓(xùn)練/測試集的劃分比例沒有完美答案,訓(xùn)練樣本多會使得模型更接近D,測試樣本多會使得評估結(jié)果更可靠,這其中的取舍因人/場景而異。常見的訓(xùn)練/測試劃分比例是2:1~4:1
[5]調(diào)參
不同的參數(shù)其實就代表著不同的模型了。一般參數(shù)分兩種:一類是算法的參數(shù),亦稱“超參數(shù)”,如聚類要分的簇數(shù)量k;一類是模型的參數(shù),如神經(jīng)網(wǎng)絡(luò)中每個節(jié)點的權(quán)重。前者多為人工選擇一組候選,后者是讓機(jī)器自己學(xué)習(xí)。
調(diào)參是機(jī)器學(xué)習(xí)的重點,也是決定模型性能的關(guān)鍵。一般調(diào)參過程中,會將訓(xùn)練數(shù)據(jù)再次劃分為訓(xùn)練集和驗證集(validation set)。具體包含關(guān)系如下:
(數(shù)據(jù)集 (訓(xùn)練數(shù)據(jù)(訓(xùn)練集)(驗證集)) (測試集))
[6]適用性
自助法在數(shù)據(jù)集較小、難以有效劃分訓(xùn)練/測試集時很有用
自助法產(chǎn)生的數(shù)據(jù)集改變了初始數(shù)據(jù)集的分布,這會引入估計偏差。因此,在初始數(shù)據(jù)量足夠時,留出法和交叉驗證法更常用一些
3)在上一節(jié)了解了什么是有效可行實驗評估方法,接下來我們需要了解一下具體的衡量模型泛化能力的評價標(biāo)準(zhǔn),即性能度量(performance measure)
性能度量反映了任務(wù)需求,使用不同的性能度量會導(dǎo)致對模型的評判結(jié)果不同。這意味著模型的“好壞”是相對的,什么樣的模型是好的,不僅取決于算法和數(shù)據(jù),還決定于任務(wù)需求。
回歸任務(wù)中最常用的性能度量是“均方誤差”,即用模型的輸出與實際輸出計算輸出結(jié)果的方差。本章節(jié)介紹了多種性能度量,請大伙在下邊基礎(chǔ)知識章節(jié)中查看具體含義,在這里我只總結(jié)描述這些指標(biāo)的具體使用(因為書本中的公式介紹比較清楚,我在這里只記錄每種度量的意思,詳細(xì)公式請小伙伴們?nèi)局胁榭矗?/p>
本章節(jié)介紹了很多性能度量指標(biāo),我這里選擇其中的查準(zhǔn)率、查全率進(jìn)行重點介紹,以供小伙伴們對性能度量有著更清晰的認(rèn)識:
從上可知查準(zhǔn)率和查全率是一對矛盾的度量,一般情況下當(dāng)一方增高時,另一方會下降,而決定這組度量升高下降的因素是學(xué)習(xí)器的分類閥值。舉個例子大家就能理解:
假設(shè)有10個西瓜,6個好瓜,4個壞瓜。我們將這十個瓜按照預(yù)測結(jié)果排序,最可能是好瓜的排在前頭,最不可能的排在最后,然后控制學(xué)習(xí)器的分類閥值來依次逐個把樣本作為好瓜來進(jìn)行預(yù)測,則可以計算出不同的閥值時的P和R如下表所示:
由上邊例子可以看到,P和R的值也基本滿足了一方升高,另一方下降的狀況,通常只有在一些簡單的任務(wù)(比如我舉的這個)中,才可能使查全率和查準(zhǔn)率都很高。以查準(zhǔn)率為縱軸、查全率為橫軸作圖,就得到了查準(zhǔn)率-查全率曲線,簡稱“P-R曲線”。
在進(jìn)行比較時,若一個學(xué)習(xí)器的P-R曲線被另一個學(xué)習(xí)器的曲線完全“包住”,則可斷言后者的性能優(yōu)于前者。當(dāng)曲線有相交時,很難斷言兩者的優(yōu)劣。真要判別時,“平衡點”(Break-Even Point)是一個不錯的度量方法。下圖是一個具體的示意圖:
查準(zhǔn)率顧名思義更關(guān)注的是預(yù)測的準(zhǔn)確性(預(yù)測正確的比例)、查全率更關(guān)注的是預(yù)測的全面性(預(yù)測正確的個數(shù))。
4)有了實驗評估方法和性能度量,剩下的就是要好好研究研究如何應(yīng)用方法和度量指標(biāo)去對學(xué)習(xí)器的性能進(jìn)行評估比較了
研究怎么來做“比較”是很有必要的,因為第一,我們要的是泛化性能,但是能用的只是測試性能;第二,測試性能和測試集的選擇有很大關(guān)系;第三,有的機(jī)器學(xué)習(xí)算法本身也有隨機(jī)性,對同一測試集的多次測試結(jié)果也會不同。
為了解決這些問題,統(tǒng)計假設(shè)檢驗(hypothesis test)為我們提供了重要的依據(jù)。
假設(shè)檢驗中的“假設(shè)”是對學(xué)習(xí)器泛化錯誤率分布的某種猜想或判斷,然后通過假設(shè)的驗證結(jié)果來對不同的學(xué)習(xí)器或模型的性能進(jìn)行判斷。比如假設(shè)“學(xué)習(xí)器A和B性能相同”,當(dāng)該假設(shè)被拒絕時,說明學(xué)習(xí)器A和B具有顯著差異,這時候錯誤率較低的學(xué)習(xí)器性能較優(yōu)。
假設(shè)檢驗的具體邏輯和使用方法是這樣的(這里只總結(jié)計算邏輯,詳細(xì)的概念、公式等請查看專業(yè)書籍):
[1]設(shè)定一個假設(shè),比如“一個機(jī)器學(xué)習(xí)真正的泛化錯誤率不大于0.3”
[2]設(shè)定一個置信概率“顯著度a”,a的一般取值為0.05、0.1;a代表的意思是當(dāng)我們的假設(shè)成立的概率在(1-a,1]的范圍內(nèi)時,我們認(rèn)為是成立的。
[3]計算使假設(shè)在置信范圍內(nèi)成立的最大值是多少,比如根據(jù)上邊[1]中的假設(shè),要使泛化錯誤率不大于0.3成立,即泛化錯誤率小于0.3的概率大于(1-a)。要計算這個,我們要算出要使錯誤率大于0.3的概率之和小于a時的最大泛化錯誤率是多少。
[4]比較計算出的滿足假設(shè)的最大值和我們實際計算出的值,如果我們實際計算出來的錯誤率已經(jīng)大于最大可能的錯誤率了,說明假設(shè)不成立。
[5]在這里的假設(shè)中,假設(shè)不成立說明我們的學(xué)習(xí)器錯誤率要大于0.3啊,這是個很爛的學(xué)習(xí)器,我們還需要繼續(xù)調(diào)優(yōu)。
在實際實驗時,我們會多次使用留出法或交叉驗證法進(jìn)行多次訓(xùn)練/測試,那么我們實際上會得到多個測試錯誤率(這里假設(shè)為k個)。我們可以通過求這些錯誤率的平均和方差來將假設(shè)檢驗轉(zhuǎn)換為自由度為k-1的 t 分布。通過查詢 t 檢驗常用臨界表可以很方便的計算出假設(shè)是否成立。
書中提到的交叉驗證 t 檢驗、Friedman檢驗與Nemenyi后續(xù)檢驗都是基于一樣的假設(shè)檢驗流程的稍微變化。其中交叉驗證 t 檢驗是針對兩種學(xué)習(xí)器之間性能的比較,F(xiàn)riedman檢驗與Nemenyi后續(xù)檢驗是針對多個學(xué)習(xí)器之間性能的比較。在這里就不一一介紹了。
5)對學(xué)習(xí)算法除了通過實驗估計其泛化性能,我們還需要理解“為什么”具有這樣的性能,“偏差與方差分解”(bias-variance decomposition)是解釋學(xué)習(xí)算法泛化性能的一種重要工具
省略具體的算法和公式推導(dǎo)過程,偏差與方差分解是對學(xué)習(xí)算法的期望泛化錯誤率的分解,分解結(jié)果是下邊這個重要的公式
也就是說,泛化誤差可分解為偏差、方差與噪聲之和。
其中,偏差度量了學(xué)習(xí)算法的期望預(yù)測與真實結(jié)果的偏離程度,即刻畫了學(xué)習(xí)算法的擬合能力;方差度量了同樣大小的訓(xùn)練集的變動所導(dǎo)致的學(xué)習(xí)性能的變化,即刻畫了數(shù)據(jù)擾動所帶來的影響;噪聲則表達(dá)了在當(dāng)前任務(wù)上任何學(xué)習(xí)算法所能達(dá)到的期望泛化誤差的下界,即刻畫了學(xué)習(xí)問題本身的難度。
偏差-方差分解說明,泛化性能是由學(xué)習(xí)算法的能力、數(shù)據(jù)的充分性以及學(xué)習(xí)任務(wù)本身的難度所共同決定的。
一般來說,偏差與方差是有沖突的。要使偏差小則需要算法對數(shù)據(jù)充分?jǐn)M合,這就有可能會導(dǎo)致過擬合,這樣對新樣本的適應(yīng)性差,就會導(dǎo)致方差變高。反之亦然,擬合過低,偏差較大,但是方差會相對較低。
2. 基本知識
1)概念
錯誤率(error rate):m個樣本中a個錯誤,則錯誤率為 E = a/m
精度(accuracy):精度=1 - a/m
誤差(error):實際預(yù)測輸出與樣本的真實輸出之間的差異。在訓(xùn)練集上的誤差稱為訓(xùn)練誤差(training error)或 經(jīng)驗誤差(empirical error),在新樣本上的誤差稱為“泛化誤差”(generalization error)
過擬合(overfitting):學(xué)習(xí)器把訓(xùn)練樣本學(xué)得太好了,把訓(xùn)練樣本中的特殊特征當(dāng)作了普遍規(guī)律,導(dǎo)致泛化性能下降
欠擬合(underfitting):與過擬合相反,對訓(xùn)練樣本中的一般規(guī)律都沒有學(xué)好
測試集(testing set):訓(xùn)練樣本中提取出來的作為測試學(xué)習(xí)器對新樣本判別能力的一部分?jǐn)?shù)據(jù)。測試集數(shù)據(jù)應(yīng)該盡可能與訓(xùn)練樣本不同
測試誤差(testing error):在測試集上的誤差
2)性能度量指標(biāo)概念
[1]錯誤率與精度
分類任務(wù)中最常用的兩種性能度量,其中錯誤率是分類錯誤的樣本數(shù)占樣本總數(shù)的比例。精度是分類正確的樣本數(shù)占樣本總數(shù)的比例。
[2]查準(zhǔn)率、查全率與F1
查準(zhǔn)率(precision):被模型預(yù)測為正的樣本中,真正為正的樣本比例(被預(yù)測為好瓜的西瓜中,真的是好瓜的西瓜比例)
查全率(recall):在所有正的樣本上,被學(xué)習(xí)器預(yù)測為正的樣本比例(在所有好瓜中,被學(xué)習(xí)器正確識別的好瓜比例)
F1:(2x查準(zhǔn)率x查全率)/(查準(zhǔn)率+查全率)。 F1是基于查準(zhǔn)率和查全率的調(diào)和平均。
(查準(zhǔn)率和查全率的概念不難理解,但是意思比較相近,看過一段時間之后老是會弄混。在讀論文時,很多時候是用precision和recall來進(jìn)行性能度量,所以將熟記這兩個指標(biāo)還是十分必要的)
“平衡點”(Break-Even Point):“查準(zhǔn)率=查全率”時的取值。
[3]ROC與AUC
ROC:“受試者工作特征”(receiver operating characteristic)曲線,與P-R 曲線類似,只不過取用“真正利率”(TPR )作為縱軸,“假正例率”(FPR)作為橫軸
[4]代價敏感錯誤率與代價曲線
代價敏感錯誤率代表數(shù)據(jù)的平均總體代價;代價曲線詳情見書本
3)假設(shè)檢驗
基于假設(shè)檢驗結(jié)果我們可推斷出,若在測試集上觀察到學(xué)習(xí)器A比B好,則A的泛化性能是否在統(tǒng)計意義上優(yōu)于B,以及這個結(jié)論的把握有多大。
4)偏差與方差
偏差-方差分解是對學(xué)習(xí)算法的期望泛化錯誤率進(jìn)行的分解。泛化誤差可分解為偏差、方差與噪聲之和。
其中,偏差度量了學(xué)習(xí)算法的期望預(yù)測與真實結(jié)果的偏離程度,即刻畫了學(xué)習(xí)算法的擬合能力;方差度量了同樣大小的訓(xùn)練集的變動所導(dǎo)致的學(xué)習(xí)性能的變化,即刻畫了數(shù)據(jù)擾動所帶來的影響;噪聲則表達(dá)了在當(dāng)前任務(wù)上任何學(xué)習(xí)算法所能達(dá)到的期望泛化誤差的下界,即刻畫了學(xué)習(xí)問題本身的難度。
3. 總結(jié)
泛化誤差無法獲得,經(jīng)驗誤差因為過擬合的存在而不適合作為標(biāo)準(zhǔn),導(dǎo)致我們需要專門的模型評估方法來測量學(xué)習(xí)器的效果
專門的模型評估方法是通過從數(shù)據(jù)集中選取一部分?jǐn)?shù)據(jù)作為測試集來對訓(xùn)練出的模型進(jìn)行驗證,以測試誤差來近似泛化誤差實現(xiàn)的
測試誤差體現(xiàn)在具體的性能度量指標(biāo)上,我們要根據(jù)具體情況選擇對應(yīng)的指標(biāo)
假設(shè)檢驗是我們對學(xué)習(xí)器性能進(jìn)行比較的有效方法
泛化性能是由學(xué)習(xí)算法的能力、數(shù)據(jù)的充分性以及學(xué)習(xí)任務(wù)本身的難度所共同決定的
(額外閱讀)數(shù)據(jù)比算法要更重要的一個例子:對一批數(shù)據(jù)使用高明的算法,比不上用普通算法但是引入一部分外部數(shù)據(jù)源的效果要好( http://anand.typepad.com/datawocky/2008/03/more-data-usual.html )
具體的章節(jié)思路請參考下圖理解: