一起來讀西瓜書:第二章 模型評估與選擇

1. 章節主要內容(遇到不清楚的概念請在第二節基礎知識中找尋解釋)

在第一章緒論中,我們知道要根據具體的問題選擇具體的算法和歸納偏好。那么我們怎么判定我們的選擇是正確的呢?這就需要擁有一套規范的模型評估與選擇方法論了。

1)首先,我們要理解機器學習為什么需要一套模型評估與選擇方法論?(經驗誤差與過擬合)

在前一章的學習中,我們知道機器學習是對數據集的泛化過程,即從輸入的數據中歸納出一套能適用于所有潛在樣本的“普遍規律”。可因為訓練數據不夠充分,機器學習出來的模型并沒辦法涵蓋所有的情況,這就會導致學習器的實際預測輸出與樣本的真實輸出之間存在“誤差”。

學習器在訓練集上的誤差稱為“經驗誤差”,在新樣本上的誤差稱為“泛化誤差”。很明顯,要使得分類器盡可能的有用,我們應該要讓泛化誤差僅可能的小。可惜在現實環境中,我們很難知道新樣本是什么樣的,所以我們實際能做的只有努力使經驗誤差最小化。

說到這里,也許有的心急的同學已經迫不及待的去將算法設計的盡可能百分百的滿足所有訓練樣本了,可卻忘了學習器真正要達到的是泛化誤差盡可能小,而不是目前的折中方案降低經驗誤差。而在降低經驗誤差的道路上,駐守著機器學習領域最大的攔路虎之一:“過擬合”

“過擬合”是指學習器對訓練樣本學的太好了,導致泛化程度不夠(還記得機器學習就是一個泛化過程嗎),沒法適應新的數據樣本。與之相反的還有一個“欠擬合”的概念,就是對訓練樣本中的一般規律都沒學習好。舉個例子,你通過姚明這個訓練樣本來學習一個人類判斷器,如果你將身高兩米二十以上作為判斷是否是人的依據,那就是過擬合了;而如果你沒有“直立行走”這樣的特征都沒有找出來作為判斷是否是人的標準,那就是欠擬合了。

上邊例子是我自己想的,下邊貼出書中一個更容易理解的例子來幫助大家理解吧:

所以,我們知道了吧,我們為什么需要一套模型評估與選擇的方法論呢?因為我們的訓練數據沒法真正代表真實的樣本空間,而泛化誤差無法直接獲得,經驗誤差又因為過擬合的存在而不適合作為標準,所以我們才需要一套模型評估與選擇的方法論

2)我們知道了為什么要對模型進行評估,那么在不知道泛化誤差的情況下,我們該如何進行評估呢?

一個合理的思路是:既然我們沒法拿到新樣本來進行泛化誤差計算,那么我們可以從訓練樣本中取出一部分來,假裝它是一組新樣本,并用這些樣本計算出來的誤差作為泛化誤差的近似。這組選出來的樣本被稱為“測試集”,測試集上的誤差被稱為測試誤差。(我們學習本書的一個主要目的是學會機器學習領域的脈絡和背后邏輯,這種評估思路是科學研究領域的一個常用思路。領悟這種思路有助于我們解決其它領域上的問題)

不過我們需要注意一點,那就是測試集應該盡量不與訓練集重合,否則測試集計算出的誤差將沒法準確代表該學習器的泛化能力。

基于這個考慮,書中列出了以下幾種把包含m個樣例的數據集D劃分為訓練集S和測試集T的辦法(只介紹中心思想,具體內容請查看書中原文)

[1]留出法(hold-out)

直接將D劃分為互斥的兩部分S和T,在S上訓練出模型后,用T來評估測試誤差

[2]交叉驗證法(cross validation)

將D劃分為互斥的k個子集,每次訓練用其中(k-1)個數據,用剩下的一個作為測試集。這樣就能獲得k組訓練/測試集,對這k組分別進行訓練和測試,最終返回k個測試結果的均值

[3]自助法(bootstrapping)

每次從D中隨機復制一個樣本到D1中,重復m次,會得到一個擁有m個數據樣本的D1數據集。顯然,D中的一部分數據會多次出現在D1中,而另一部分樣本不出現。根據平均分布概率計算,大約有36.8%的數據不會被復制到D1中

[4]注意點

訓練/測試集的劃分要盡可能保持數據分布一致性

單詞劃分往往不夠穩定可靠,一般要采用若干次隨機劃分、重復進行實驗評估后取平均值作為評估結果

訓練/測試集的劃分比例沒有完美答案,訓練樣本多會使得模型更接近D,測試樣本多會使得評估結果更可靠,這其中的取舍因人/場景而異。常見的訓練/測試劃分比例是2:1~4:1

[5]調參

不同的參數其實就代表著不同的模型了。一般參數分兩種:一類是算法的參數,亦稱“超參數”,如聚類要分的簇數量k;一類是模型的參數,如神經網絡中每個節點的權重。前者多為人工選擇一組候選,后者是讓機器自己學習。

調參是機器學習的重點,也是決定模型性能的關鍵。一般調參過程中,會將訓練數據再次劃分為訓練集和驗證集(validation set)。具體包含關系如下:

(數據集 (訓練數據(訓練集)(驗證集)) (測試集))

[6]適用性

自助法在數據集較小、難以有效劃分訓練/測試集時很有用

自助法產生的數據集改變了初始數據集的分布,這會引入估計偏差。因此,在初始數據量足夠時,留出法和交叉驗證法更常用一些

3)在上一節了解了什么是有效可行實驗評估方法,接下來我們需要了解一下具體的衡量模型泛化能力的評價標準,即性能度量(performance measure)

性能度量反映了任務需求,使用不同的性能度量會導致對模型的評判結果不同。這意味著模型的“好壞”是相對的,什么樣的模型是好的,不僅取決于算法和數據,還決定于任務需求。

回歸任務中最常用的性能度量是“均方誤差”,即用模型的輸出與實際輸出計算輸出結果的方差。本章節介紹了多種性能度量,請大伙在下邊基礎知識章節中查看具體含義,在這里我只總結描述這些指標的具體使用(因為書本中的公式介紹比較清楚,我在這里只記錄每種度量的意思,詳細公式請小伙伴們去書本中查看)

本章節介紹了很多性能度量指標,我這里選擇其中的查準率、查全率進行重點介紹,以供小伙伴們對性能度量有著更清晰的認識:

從上可知查準率和查全率是一對矛盾的度量,一般情況下當一方增高時,另一方會下降,而決定這組度量升高下降的因素是學習器的分類閥值。舉個例子大家就能理解:

假設有10個西瓜,6個好瓜,4個壞瓜。我們將這十個瓜按照預測結果排序,最可能是好瓜的排在前頭,最不可能的排在最后,然后控制學習器的分類閥值來依次逐個把樣本作為好瓜來進行預測,則可以計算出不同的閥值時的P和R如下表所示:

由上邊例子可以看到,P和R的值也基本滿足了一方升高,另一方下降的狀況,通常只有在一些簡單的任務(比如我舉的這個)中,才可能使查全率和查準率都很高。以查準率為縱軸、查全率為橫軸作圖,就得到了查準率-查全率曲線,簡稱“P-R曲線”。

在進行比較時,若一個學習器的P-R曲線被另一個學習器的曲線完全“包住”,則可斷言后者的性能優于前者。當曲線有相交時,很難斷言兩者的優劣。真要判別時,“平衡點”(Break-Even Point)是一個不錯的度量方法。下圖是一個具體的示意圖:

查準率顧名思義更關注的是預測的準確性(預測正確的比例)、查全率更關注的是預測的全面性(預測正確的個數)。

4)有了實驗評估方法和性能度量,剩下的就是要好好研究研究如何應用方法和度量指標去對學習器的性能進行評估比較了

研究怎么來做“比較”是很有必要的,因為第一,我們要的是泛化性能,但是能用的只是測試性能;第二,測試性能和測試集的選擇有很大關系;第三,有的機器學習算法本身也有隨機性,對同一測試集的多次測試結果也會不同。

為了解決這些問題,統計假設檢驗(hypothesis test)為我們提供了重要的依據。

假設檢驗中的“假設”是對學習器泛化錯誤率分布的某種猜想或判斷,然后通過假設的驗證結果來對不同的學習器或模型的性能進行判斷。比如假設“學習器A和B性能相同”,當該假設被拒絕時,說明學習器A和B具有顯著差異,這時候錯誤率較低的學習器性能較優。

假設檢驗的具體邏輯和使用方法是這樣的(這里只總結計算邏輯,詳細的概念、公式等請查看專業書籍):

[1]設定一個假設,比如“一個機器學習真正的泛化錯誤率不大于0.3”

[2]設定一個置信概率“顯著度a”,a的一般取值為0.05、0.1;a代表的意思是當我們的假設成立的概率在(1-a,1]的范圍內時,我們認為是成立的。

[3]計算使假設在置信范圍內成立的最大值是多少,比如根據上邊[1]中的假設,要使泛化錯誤率不大于0.3成立,即泛化錯誤率小于0.3的概率大于(1-a)。要計算這個,我們要算出要使錯誤率大于0.3的概率之和小于a時的最大泛化錯誤率是多少。

[4]比較計算出的滿足假設的最大值和我們實際計算出的值,如果我們實際計算出來的錯誤率已經大于最大可能的錯誤率了,說明假設不成立。

[5]在這里的假設中,假設不成立說明我們的學習器錯誤率要大于0.3啊,這是個很爛的學習器,我們還需要繼續調優。

在實際實驗時,我們會多次使用留出法或交叉驗證法進行多次訓練/測試,那么我們實際上會得到多個測試錯誤率(這里假設為k個)。我們可以通過求這些錯誤率的平均和方差來將假設檢驗轉換為自由度為k-1的 t 分布。通過查詢 t 檢驗常用臨界表可以很方便的計算出假設是否成立。

書中提到的交叉驗證 t 檢驗、Friedman檢驗與Nemenyi后續檢驗都是基于一樣的假設檢驗流程的稍微變化。其中交叉驗證 t 檢驗是針對兩種學習器之間性能的比較,Friedman檢驗與Nemenyi后續檢驗是針對多個學習器之間性能的比較。在這里就不一一介紹了。

5)對學習算法除了通過實驗估計其泛化性能,我們還需要理解“為什么”具有這樣的性能,“偏差與方差分解”(bias-variance decomposition)是解釋學習算法泛化性能的一種重要工具

省略具體的算法和公式推導過程,偏差與方差分解是對學習算法的期望泛化錯誤率的分解,分解結果是下邊這個重要的公式

也就是說,泛化誤差可分解為偏差、方差與噪聲之和。

其中,偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法的擬合能力;方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所帶來的影響;噪聲則表達了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。

偏差-方差分解說明,泛化性能是由學習算法的能力、數據的充分性以及學習任務本身的難度所共同決定的。

一般來說,偏差與方差是有沖突的。要使偏差小則需要算法對數據充分擬合,這就有可能會導致過擬合,這樣對新樣本的適應性差,就會導致方差變高。反之亦然,擬合過低,偏差較大,但是方差會相對較低。

2. 基本知識

1)概念

錯誤率(error rate):m個樣本中a個錯誤,則錯誤率為 E = a/m

精度(accuracy):精度=1 - a/m

誤差(error):實際預測輸出與樣本的真實輸出之間的差異。在訓練集上的誤差稱為訓練誤差(training error)或 經驗誤差(empirical error),在新樣本上的誤差稱為“泛化誤差”(generalization error)

過擬合(overfitting):學習器把訓練樣本學得太好了,把訓練樣本中的特殊特征當作了普遍規律,導致泛化性能下降

欠擬合(underfitting):與過擬合相反,對訓練樣本中的一般規律都沒有學好

測試集(testing set):訓練樣本中提取出來的作為測試學習器對新樣本判別能力的一部分數據。測試集數據應該盡可能與訓練樣本不同

測試誤差(testing error):在測試集上的誤差

2)性能度量指標概念

[1]錯誤率與精度

分類任務中最常用的兩種性能度量,其中錯誤率是分類錯誤的樣本數占樣本總數的比例。精度是分類正確的樣本數占樣本總數的比例。

[2]查準率、查全率與F1

查準率(precision):被模型預測為正的樣本中,真正為正的樣本比例(被預測為好瓜的西瓜中,真的是好瓜的西瓜比例)

查全率(recall):在所有正的樣本上,被學習器預測為正的樣本比例(在所有好瓜中,被學習器正確識別的好瓜比例)

F1:(2x查準率x查全率)/(查準率+查全率)。 F1是基于查準率和查全率的調和平均。

(查準率和查全率的概念不難理解,但是意思比較相近,看過一段時間之后老是會弄混。在讀論文時,很多時候是用precision和recall來進行性能度量,所以將熟記這兩個指標還是十分必要的)

“平衡點”(Break-Even Point):“查準率=查全率”時的取值。

[3]ROC與AUC

ROC:“受試者工作特征”(receiver operating characteristic)曲線,與P-R 曲線類似,只不過取用“真正利率”(TPR )作為縱軸,“假正例率”(FPR)作為橫軸

[4]代價敏感錯誤率與代價曲線

代價敏感錯誤率代表數據的平均總體代價;代價曲線詳情見書本

3)假設檢驗

基于假設檢驗結果我們可推斷出,若在測試集上觀察到學習器A比B好,則A的泛化性能是否在統計意義上優于B,以及這個結論的把握有多大。

4)偏差與方差

偏差-方差分解是對學習算法的期望泛化錯誤率進行的分解。泛化誤差可分解為偏差、方差與噪聲之和。

其中,偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法的擬合能力;方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所帶來的影響;噪聲則表達了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。

3. 總結

泛化誤差無法獲得,經驗誤差因為過擬合的存在而不適合作為標準,導致我們需要專門的模型評估方法來測量學習器的效果

專門的模型評估方法是通過從數據集中選取一部分數據作為測試集來對訓練出的模型進行驗證,以測試誤差來近似泛化誤差實現的

測試誤差體現在具體的性能度量指標上,我們要根據具體情況選擇對應的指標

假設檢驗是我們對學習器性能進行比較的有效方法

泛化性能是由學習算法的能力、數據的充分性以及學習任務本身的難度所共同決定的

(額外閱讀)數據比算法要更重要的一個例子:對一批數據使用高明的算法,比不上用普通算法但是引入一部分外部數據源的效果要好( http://anand.typepad.com/datawocky/2008/03/more-data-usual.html )

具體的章節思路請參考下圖理解:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容