機器學習-模型評估與選擇

積跬步以致千里,積怠惰以致深淵

注:本篇文章在整理時主要參考了 周志華 的《機器學習》。

主要內容

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

經驗誤差與過擬合

首先,我們要理解機器學習為什么需要一套模型評估與選擇方法論?

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

學習器在訓練集上的誤差稱為“經驗誤差”,在新樣本上的誤差稱為“泛化誤差”。把分類錯誤的樣本數占樣本總數的比例稱為“錯誤率” (error rate) ;相應的,1-“錯誤率”稱為“精度”。很明顯,要使得分類器盡可能的有用,我們應該要讓泛化誤差盡可能的小。可惜在現實環境中,我們很難知道新樣本是什么樣的,所以我們實際能做的只有努力使經驗誤差最小化。

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

“過擬合”是指學習器對訓練樣本學的太好了,導致泛化程度不夠(還記得機器學習就是一個泛化過程嗎),沒法適應新的數據樣本。與之相反的還有一個“欠擬合”的概念,就是對訓練樣本中的一般規律都沒學習好。舉個例子,讓機器來學習天鵝的特征,經過訓練后,學習了天鵝是有翅膀的,天鵝的嘴巴是長長的彎曲的,天鵝的脖子是長長的有點曲度,天鵝的整個體型像一個“2”且略大于鴨子。這時候你的機器已經基本能區別天鵝和其他動物了。然而,很不巧你的訓練天鵝數據全是白色的,于是機器經過學習后,會認為天鵝的羽毛都是白的,以后看到羽毛是黑的天鵝就會認為那不是天鵝,那就是過擬合;而如果沒能學習到天鵝的基本特征,那就是欠擬合了。

圖1. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2.????????? ? ? ? ? ?? ???????????????????? 圖3.

圖1. 不能夠很好的反映數據樣本的“普遍規律” (欠擬合)? 圖3. 太過于糾結訓練數據的分布,從而無法很好的適應新的數據樣本 (過擬合) 。

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

評估方法

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

一個常用的思路是:既然我們沒法拿到新樣本來進行泛化誤差計算,那么我們可以從訓練樣本中取出一部分來,假裝它是一組新樣本,并用這些樣本計算出來的誤差作為泛化誤差的近似。這組選出來的樣本被稱為“測試集”,測試集上的誤差被稱為測試誤差。但需注意的是,測試集應該盡量不與訓練集重合,否則測試集計算出的誤差將沒法準確代表該學習器的泛化能力。

為了理解這一點,不妨考慮這樣一個場景:老師出了10道習題供同學們練習,考試時又用同樣的10道題作為試題,這個考試成績能否反映出同學們寫的好不好呢?答案是否定的,可能有的同學只會做這10道題卻能得高分。

綜上所述,我們運用一下幾種常見的做法把一個包含m個樣例的數據集D進行適當的處理,從中產生出訓練集S和測試集T。

1、留出法(hold-out)

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

需要注意的是:應避免因數據劃分過程引入額外的偏差而對最終結果產生影響,例如通過對D進行分層采樣 (保留類別比例的采樣方式) 而獲得含70%樣本的訓練集S和含30%樣本的訓練集T,若D包含500個正例子、500個反例,則分層采樣得到的S應包含350個正例、350個反例。而T則包含150個正例和150個反例;若S、T中樣本類別比例差別很大,則誤差估計將由于訓練/測試數據分布的差異而產生偏差。另外,同樣可以把D中的樣本排序,然后把前350個正例放到訓練集中,也可以把后350個正例放到訓練集中,......

不同的劃分方案將導致不同的訓練/測試集,相應的模型評估也會有所差異。因此,一般采用若干次隨機劃分、重復進行實驗評估后取平均值作為留出法的評估結果。

特點:測試集小時,評估結果的方差較大,被評估的模型與用D訓練出的模型相比可能有較大區別,從而降低了評估結果的保真性;訓練集小時,評估結果的偏差較大,評估結果可能不夠穩定準確。

2、交叉驗證法(cross validation)

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

特點:評估結果的穩定性和保真性在很大程度上取決于k的取值 (k折交叉驗證)

3、留一法 (Leave-One-Out)

交叉驗證法的一個特例:假定數據集D中包含m個樣本,令k=m。

特點:不受隨機樣本劃分方式的影響;評估結果往往被認為比較準確;訓練m個模型的計算開銷比較大。

4、自助法(bootstrapping)

每次從D中隨機復制一個樣本到D1中,重復m次,會得到一個擁有m個數據樣本的D1數據集 (自主采樣法:可重復采樣或又放回采樣) 。顯然,D中的一部分數據會多次出現在D1中,而另一部分樣本不出現。根據平均分布概率計算,初始數據集D中約有36.8%的樣本未出現在采樣數據集D1中。我們將D1用作訓練集,D\D1用作測試集 (“\”表示集合減法) 。

5、適用性

自助法在數據集較小、難以有效劃分訓練/測試集時很有用;此外,自助法能從初始數據集中產生多個不同的訓練集,這對集成學習等方法有很大的好處。然而,自助法產生的數據集改變了初始數據集的分布,這會引入估計偏差。因此,在初始數據量足夠時,留出法和交叉驗證法更常用一些。

6、調參

參數配置不同,學得模型的性能往往有著顯著差別。需注意的是,在研究對比不同算法的泛化性能時,我們用測試集上的判別效果來估計模型在實際使用時的泛化能力,而把訓練數據另外劃分為訓練集和驗證集,基于驗證集上的性能來進行模型選擇和調參。

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

性能度量(performance measure)

了解了如何有效可行地實驗評估方法,還需要有衡量模型泛化能力的評價標準,這就是性能度量。這意味著模型的“好壞”是相對的,什么樣的模型是好的,不僅取決于算法和數據,還決定于任務需求。

回歸任務中最常用的性能度量是“均方誤差”,即用模型的輸出與實際輸出計算輸出結果的方差。

1、錯誤率與精度

錯誤率:分類錯誤的樣本數占樣本總數的比例;

精度:分類正確的樣本數占樣本總數的比例;

2、查準率、查全率與F1

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

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

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

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

查準率和查全率是一對矛盾的度量。一般來說,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。例如,若希望將好瓜盡可能多地選出來,則可通過增加選瓜的數量來實現,如果將所有西瓜都選上,那么所有的好瓜也必然都被選上了,但這樣查準率就會較低;若希望選出的瓜中好瓜比例盡可能高,則可只挑選最有把握的瓜,但這樣就難免會漏掉不少好瓜,使得查全率較低。通常只有在一些簡單任務中,才可能使查全率和查準率都很高。

以查準率為縱軸、查全率為橫軸作圖,就得到了查準率-查全率曲線,簡稱“P-R曲線”。

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

3、ROC與AUC

ROC曲線是從“一般情況下”泛化性能的好壞出發來研究學習器泛化性能的有力工具。ROC:“受試者工作特征”(receiver operating characteristic)曲線,與P-R 曲線類似,只不過取用“真正利率”(TPR )作為縱軸,“假正例率”(FPR)作為橫軸。

對角線對應于“隨機猜測”模型,而點(0,1)則對應于將所有正例排在所有反例之前的“理想模型”。

進行學習器的比較時,與P-R圖相似,若一個學習器的ROC曲線被另一個學習器的曲線完全“包住”,則可斷言后者的性能優于前者;若兩個學習器的ROC曲線發生交叉,則難以一般性地斷言兩者孰優孰劣。此時如果一定要進行比較,則較為合理的判據是比較ROC曲線下的面積,即AUC (Area Under ROC Curve)。

4、代價敏感錯誤率與代價曲線

在現實生活中,不同類型的錯誤所造成的后果不同。例如在醫療診斷中,錯誤地把患者診斷為健康人與錯誤地把健康人診斷為患者,看起來都是犯了“一次錯誤”,但后者的影響是增加了進一步檢查的麻煩,前者的后果卻可能是喪失了拯救生命的最佳時機。因此,為權衡不同類型錯誤所造成的不同損失,可為錯誤賦予“非均等代價” (unequal cost)。代價敏感錯誤率代表數據的平均總體代價。

在均等代價下,錯誤率是直接計算“錯誤次數”,并沒有考慮不同錯誤會造成不同的后果。在非均等代價下,我們所希望的不再是簡單地最小化錯誤次數,而是希望最小化“總體代價” (total cost)。

比較檢驗

有了實驗評估方法和性能度量,表面上看就能對學習器的性能進行評估比較了。但怎么來做“比較”呢?

這里面涉及幾個重要因素:

第一,我們希望比較的是泛化性能,然而通過實驗評估方法我們獲得的是測試集上的性能,兩者的對比結果可能未必相同;

第二,測試集上的性能與測試集本身的選擇有很大的關系,且不論使用不同大小的測試集會得到不同的結果,即便用相同大小的數據集,若包含的測試樣例不同,測試結果也會有所不同;

第三,很多機器學習算法本身有一定的隨機性,即便用相同的參數設置在同一個測試集上多次運行,其結果也會有所不同。

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

假設檢驗中的“假設”是對學習器泛化錯誤率分布的某種猜想或判斷,然后通過假設的驗證結果來對不同的學習器或模型的性能進行判斷。泛化錯誤率與測試錯誤率在直觀上比較接近,因此,可根據測試錯誤率估推出泛化錯誤率的分布。

給定測試錯誤率,則求解樣本誤分類概率公式的偏導可知,錯誤率符合二項(binomial)分布。


如圖所示,若 錯誤率=0.3,則10個樣本中測得3個被誤分類的概率最大。

[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 檢驗常用臨界表可以很方便的計算出假設是否成立。

偏差與方差

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

泛化誤差可分解為偏差、方差和噪音之和。

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

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

一般來說,偏差與方差是有沖突的。給定學習任務,假定我們能控制學習算法的訓練程度,則在訓練不足時,學習器的擬合能力不夠強,訓練數據的擾動不足以使學習器產生顯著變化,此時偏差主導了泛化錯誤率;隨著訓練程度的加深,學習器的擬合能力逐漸增強,訓練數據的擾動漸漸能被學習器學到,方差逐漸主導了泛化錯誤率;在訓練程度充足后,學習器的擬合能力已非常強,訓練數據發生的輕微的擾動都會導致學習器發生顯著變化,若訓練數據自身的、非全局的特性被學習器學到了,則將發生過擬合。

總結

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

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

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

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

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

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

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


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

推薦閱讀更多精彩內容