積跬步以致千里,積怠惰以致深淵
注:本篇文章在整理時主要參考了 周志華 的《機器學(xué)習(xí)》。
主要內(nèi)容
在上一篇文章中,我們知道要根據(jù)具體的問題選擇具體的算法和歸納偏好肋联。那么我們怎么判定我們的選擇是正確的呢?這就需要擁有一套規(guī)范的模型評估與選擇方法論了。
經(jīng)驗誤差與過擬合
首先先蒋,我們要理解機器學(xué)習(xí)為什么需要一套模型評估與選擇方法論?
在前一章的學(xué)習(xí)中宛渐,我們知道機器學(xué)習(xí)是對數(shù)據(jù)集的泛化過程竞漾,即從輸入的數(shù)據(jù)中歸納出一套能適用于所有潛在樣本的“普遍規(guī)律”眯搭。可因為訓(xùn)練數(shù)據(jù)不夠充分业岁,機器學(xué)習(xí)出來的模型并沒辦法涵蓋所有的情況鳞仙,這就會導(dǎo)致學(xué)習(xí)器的實際預(yù)測輸出與樣本的真實輸出之間存在“誤差”。
學(xué)習(xí)器在訓(xùn)練集上的誤差稱為“經(jīng)驗誤差”笔时,在新樣本上的誤差稱為“泛化誤差”棍好。把分類錯誤的樣本數(shù)占樣本總數(shù)的比例稱為“錯誤率” (error rate) ;相應(yīng)的允耿,1-“錯誤率”稱為“精度”借笙。很明顯,要使得分類器盡可能的有用较锡,我們應(yīng)該要讓泛化誤差盡可能的小业稼。可惜在現(xiàn)實環(huán)境中蚂蕴,我們很難知道新樣本是什么樣的低散,所以我們實際能做的只有努力使經(jīng)驗誤差最小化。
說到這里骡楼,也許有的心急的同學(xué)已經(jīng)迫不及待的去將算法設(shè)計的盡可能百分百的滿足所有訓(xùn)練樣本了熔号,把訓(xùn)練樣本自身的一些特點當(dāng)作了所有潛在樣本都會具有的一般性質(zhì),可卻忘了學(xué)習(xí)器真正要達(dá)到的是泛化誤差盡可能小君编,而不是目前的折中方案降低經(jīng)驗誤差跨嘉。而在降低經(jīng)驗誤差的道路上,駐守著機器學(xué)習(xí)領(lǐng)域最大的攔路虎之一:“過擬合”
“過擬合”是指學(xué)習(xí)器對訓(xùn)練樣本學(xué)的太好了吃嘿,導(dǎo)致泛化程度不夠(還記得機器學(xué)習(xí)就是一個泛化過程嗎)祠乃,沒法適應(yīng)新的數(shù)據(jù)樣本。與之相反的還有一個“欠擬合”的概念兑燥,就是對訓(xùn)練樣本中的一般規(guī)律都沒學(xué)習(xí)好亮瓷。舉個例子,讓機器來學(xué)習(xí)天鵝的特征降瞳,經(jīng)過訓(xùn)練后嘱支,學(xué)習(xí)了天鵝是有翅膀的,天鵝的嘴巴是長長的彎曲的挣饥,天鵝的脖子是長長的有點曲度除师,天鵝的整個體型像一個“2”且略大于鴨子。這時候你的機器已經(jīng)基本能區(qū)別天鵝和其他動物了扔枫。然而汛聚,很不巧你的訓(xùn)練天鵝數(shù)據(jù)全是白色的,于是機器經(jīng)過學(xué)習(xí)后短荐,會認(rèn)為天鵝的羽毛都是白的倚舀,以后看到羽毛是黑的天鵝就會認(rèn)為那不是天鵝叹哭,那就是過擬合;而如果沒能學(xué)習(xí)到天鵝的基本特征痕貌,那就是欠擬合了风罩。
圖1. 不能夠很好的反映數(shù)據(jù)樣本的“普遍規(guī)律” (欠擬合)? 圖3. 太過于糾結(jié)訓(xùn)練數(shù)據(jù)的分布,從而無法很好的適應(yīng)新的數(shù)據(jù)樣本 (過擬合) 舵稠。
所以超升,我們知道了吧,我們?yōu)槭裁葱枰惶啄P驮u估與選擇的方法論呢柱查?因為我們的訓(xùn)練數(shù)據(jù)沒法真正代表真實的樣本空間廓俭,而泛化誤差無法直接獲得,經(jīng)驗誤差又因為過擬合的存在而不適合作為標(biāo)準(zhǔn)唉工,所以我們才需要一套模型評估與選擇的方法論研乒。
評估方法
我們知道了為什么要對模型進行評估,那么在不知道泛化誤差的情況下淋硝,我們該如何進行評估呢雹熬?
一個常用的思路是:既然我們沒法拿到新樣本來進行泛化誤差計算,那么我們可以從訓(xùn)練樣本中取出一部分來谣膳,假裝它是一組新樣本竿报,并用這些樣本計算出來的誤差作為泛化誤差的近似。這組選出來的樣本被稱為“測試集”继谚,測試集上的誤差被稱為測試誤差烈菌。但需注意的是,測試集應(yīng)該盡量不與訓(xùn)練集重合花履,否則測試集計算出的誤差將沒法準(zhǔn)確代表該學(xué)習(xí)器的泛化能力芽世。
為了理解這一點,不妨考慮這樣一個場景:老師出了10道習(xí)題供同學(xué)們練習(xí)诡壁,考試時又用同樣的10道題作為試題济瓢,這個考試成績能否反映出同學(xué)們寫的好不好呢?答案是否定的妹卿,可能有的同學(xué)只會做這10道題卻能得高分旺矾。
綜上所述,我們運用一下幾種常見的做法把一個包含m個樣例的數(shù)據(jù)集D進行適當(dāng)?shù)奶幚矶峥耍瑥闹挟a(chǎn)生出訓(xùn)練集S和測試集T箕宙。
1、留出法(hold-out)
直接將D劃分為互斥的兩部分S和T铺纽,在S上訓(xùn)練出模型后扒吁,用T來評估測試誤差。
需要注意的是:應(yīng)避免因數(shù)據(jù)劃分過程引入額外的偏差而對最終結(jié)果產(chǎn)生影響,例如通過對D進行分層采樣 (保留類別比例的采樣方式) 而獲得含70%樣本的訓(xùn)練集S和含30%樣本的訓(xùn)練集T雕崩,若D包含500個正例子、500個反例融撞,則分層采樣得到的S應(yīng)包含350個正例盼铁、350個反例。而T則包含150個正例和150個反例尝偎;若S饶火、T中樣本類別比例差別很大,則誤差估計將由于訓(xùn)練/測試數(shù)據(jù)分布的差異而產(chǎn)生偏差致扯。另外肤寝,同樣可以把D中的樣本排序,然后把前350個正例放到訓(xùn)練集中抖僵,也可以把后350個正例放到訓(xùn)練集中鲤看,......
不同的劃分方案將導(dǎo)致不同的訓(xùn)練/測試集,相應(yīng)的模型評估也會有所差異耍群。因此义桂,一般采用若干次隨機劃分、重復(fù)進行實驗評估后取平均值作為留出法的評估結(jié)果蹈垢。
特點:測試集小時慷吊,評估結(jié)果的方差較大,被評估的模型與用D訓(xùn)練出的模型相比可能有較大區(qū)別曹抬,從而降低了評估結(jié)果的保真性溉瓶;訓(xùn)練集小時,評估結(jié)果的偏差較大谤民,評估結(jié)果可能不夠穩(wěn)定準(zhǔn)確堰酿。
2、交叉驗證法(cross validation)
將D分層采樣劃分為互斥的k個子集赖临,每次訓(xùn)練用其中(k-1)個數(shù)據(jù)子集胞锰,用剩下的一個子集作為測試集。這樣就能獲得k組訓(xùn)練/測試集兢榨,對這k組分別進行訓(xùn)練和測試嗅榕,最終返回k個測試結(jié)果的均值。
特點:評估結(jié)果的穩(wěn)定性和保真性在很大程度上取決于k的取值 (k折交叉驗證)
3吵聪、留一法 (Leave-One-Out)
交叉驗證法的一個特例:假定數(shù)據(jù)集D中包含m個樣本凌那,令k=m。
特點:不受隨機樣本劃分方式的影響吟逝;評估結(jié)果往往被認(rèn)為比較準(zhǔn)確帽蝶;訓(xùn)練m個模型的計算開銷比較大。
4块攒、自助法(bootstrapping)
每次從D中隨機復(fù)制一個樣本到D1中励稳,重復(fù)m次佃乘,會得到一個擁有m個數(shù)據(jù)樣本的D1數(shù)據(jù)集 (自主采樣法:可重復(fù)采樣或又放回采樣) 。顯然驹尼,D中的一部分?jǐn)?shù)據(jù)會多次出現(xiàn)在D1中趣避,而另一部分樣本不出現(xiàn)。根據(jù)平均分布概率計算新翎,初始數(shù)據(jù)集D中約有36.8%的樣本未出現(xiàn)在采樣數(shù)據(jù)集D1中程帕。我們將D1用作訓(xùn)練集,D\D1用作測試集 (“\”表示集合減法) 地啰。
5愁拭、適用性
自助法在數(shù)據(jù)集較小、難以有效劃分訓(xùn)練/測試集時很有用亏吝;此外岭埠,自助法能從初始數(shù)據(jù)集中產(chǎn)生多個不同的訓(xùn)練集,這對集成學(xué)習(xí)等方法有很大的好處顺呕。然而枫攀,自助法產(chǎn)生的數(shù)據(jù)集改變了初始數(shù)據(jù)集的分布,這會引入估計偏差株茶。因此来涨,在初始數(shù)據(jù)量足夠時,留出法和交叉驗證法更常用一些启盛。
6蹦掐、調(diào)參
參數(shù)配置不同,學(xué)得模型的性能往往有著顯著差別僵闯。需注意的是卧抗,在研究對比不同算法的泛化性能時,我們用測試集上的判別效果來估計模型在實際使用時的泛化能力鳖粟,而把訓(xùn)練數(shù)據(jù)另外劃分為訓(xùn)練集和驗證集社裆,基于驗證集上的性能來進行模型選擇和調(diào)參。
(數(shù)據(jù)集 (訓(xùn)練數(shù)據(jù)(訓(xùn)練集)(驗證集)) (測試集))
性能度量(performance measure)
了解了如何有效可行地實驗評估方法向图,還需要有衡量模型泛化能力的評價標(biāo)準(zhǔn)泳秀,這就是性能度量。這意味著模型的“好壞”是相對的榄攀,什么樣的模型是好的嗜傅,不僅取決于算法和數(shù)據(jù),還決定于任務(wù)需求檩赢。
回歸任務(wù)中最常用的性能度量是“均方誤差”吕嘀,即用模型的輸出與實際輸出計算輸出結(jié)果的方差。
1、錯誤率與精度
錯誤率:分類錯誤的樣本數(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)和平均庆杜。
“平衡點”(Break-Even Point):“查準(zhǔn)率=查全率”時的取值。
查準(zhǔn)率和查全率是一對矛盾的度量碟摆。一般來說晃财,查準(zhǔn)率高時,查全率往往偏低典蜕;而查全率高時断盛,查準(zhǔn)率往往偏低。例如愉舔,若希望將好瓜盡可能多地選出來钢猛,則可通過增加選瓜的數(shù)量來實現(xiàn),如果將所有西瓜都選上轩缤,那么所有的好瓜也必然都被選上了命迈,但這樣查準(zhǔn)率就會較低;若希望選出的瓜中好瓜比例盡可能高火的,則可只挑選最有把握的瓜壶愤,但這樣就難免會漏掉不少好瓜,使得查全率較低馏鹤。通常只有在一些簡單任務(wù)中征椒,才可能使查全率和查準(zhǔn)率都很高。
以查準(zhǔn)率為縱軸湃累、查全率為橫軸作圖勃救,就得到了查準(zhǔn)率-查全率曲線,簡稱“P-R曲線”脱茉。
在進行比較時剪芥,若一個學(xué)習(xí)器的P-R曲線被另一個學(xué)習(xí)器的曲線完全“包住”,則可斷言后者的性能優(yōu)于前者琴许。當(dāng)曲線有相交時税肪,很難斷言兩者的優(yōu)劣。真要判別時,“平衡點”(Break-Even Point)是一個不錯的度量方法益兄。
3锻梳、ROC與AUC
ROC曲線是從“一般情況下”泛化性能的好壞出發(fā)來研究學(xué)習(xí)器泛化性能的有力工具。ROC:“受試者工作特征”(receiver operating characteristic)曲線净捅,與P-R 曲線類似疑枯,只不過取用“真正利率”(TPR )作為縱軸,“假正例率”(FPR)作為橫軸蛔六。
對角線對應(yīng)于“隨機猜測”模型荆永,而點(0,1)則對應(yīng)于將所有正例排在所有反例之前的“理想模型”。
進行學(xué)習(xí)器的比較時国章,與P-R圖相似具钥,若一個學(xué)習(xí)器的ROC曲線被另一個學(xué)習(xí)器的曲線完全“包住”,則可斷言后者的性能優(yōu)于前者液兽;若兩個學(xué)習(xí)器的ROC曲線發(fā)生交叉骂删,則難以一般性地斷言兩者孰優(yōu)孰劣。此時如果一定要進行比較四啰,則較為合理的判據(jù)是比較ROC曲線下的面積宁玫,即AUC (Area Under ROC Curve)。
4柑晒、代價敏感錯誤率與代價曲線
在現(xiàn)實生活中欧瘪,不同類型的錯誤所造成的后果不同。例如在醫(yī)療診斷中敦迄,錯誤地把患者診斷為健康人與錯誤地把健康人診斷為患者恋追,看起來都是犯了“一次錯誤”,但后者的影響是增加了進一步檢查的麻煩罚屋,前者的后果卻可能是喪失了拯救生命的最佳時機苦囱。因此,為權(quán)衡不同類型錯誤所造成的不同損失脾猛,可為錯誤賦予“非均等代價” (unequal cost)撕彤。代價敏感錯誤率代表數(shù)據(jù)的平均總體代價。
在均等代價下猛拴,錯誤率是直接計算“錯誤次數(shù)”羹铅,并沒有考慮不同錯誤會造成不同的后果。在非均等代價下愉昆,我們所希望的不再是簡單地最小化錯誤次數(shù)职员,而是希望最小化“總體代價” (total cost)。
比較檢驗
有了實驗評估方法和性能度量跛溉,表面上看就能對學(xué)習(xí)器的性能進行評估比較了焊切。但怎么來做“比較”呢扮授?
這里面涉及幾個重要因素:
第一,我們希望比較的是泛化性能专肪,然而通過實驗評估方法我們獲得的是測試集上的性能刹勃,兩者的對比結(jié)果可能未必相同;
第二嚎尤,測試集上的性能與測試集本身的選擇有很大的關(guān)系荔仁,且不論使用不同大小的測試集會得到不同的結(jié)果,即便用相同大小的數(shù)據(jù)集芽死,若包含的測試樣例不同乏梁,測試結(jié)果也會有所不同;
第三关贵,很多機器學(xué)習(xí)算法本身有一定的隨機性掌呜,即便用相同的參數(shù)設(shè)置在同一個測試集上多次運行,其結(jié)果也會有所不同坪哄。
為了解決這些問題,統(tǒng)計假設(shè)檢驗(hypothesis test)為我們提供了重要的依據(jù)势篡。
假設(shè)檢驗中的“假設(shè)”是對學(xué)習(xí)器泛化錯誤率分布的某種猜想或判斷翩肌,然后通過假設(shè)的驗證結(jié)果來對不同的學(xué)習(xí)器或模型的性能進行判斷。泛化錯誤率與測試錯誤率在直觀上比較接近禁悠,因此念祭,可根據(jù)測試錯誤率估推出泛化錯誤率的分布。
給定測試錯誤率碍侦,則求解樣本誤分類概率公式的偏導(dǎo)可知粱坤,錯誤率符合二項(binomial)分布。
如圖所示瓷产,若 錯誤率=0.3站玄,則10個樣本中測得3個被誤分類的概率最大。
[1]設(shè)定一個假設(shè)濒旦,比如“一個機器學(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)螟蒸。
在實際實驗時盒使,我們會多次使用留出法或交叉驗證法進行多次訓(xùn)練/測試,那么我們實際上會得到多個測試錯誤率(這里假設(shè)為k個)七嫌。我們可以通過求這些錯誤率的平均和方差來將假設(shè)檢驗轉(zhuǎn)換為自由度為k-1的 t 分布少办。通過查詢 t 檢驗常用臨界表可以很方便的計算出假設(shè)是否成立。
偏差與方差
對學(xué)習(xí)算法除了通過實驗估計其泛化性能诵原,我們還需要理解“為什么”具有這樣的性能英妓,“偏差與方差分解”(bias-variance decomposition)是解釋學(xué)習(xí)算法泛化性能的一種重要工具。
泛化誤差可分解為偏差绍赛、方差和噪音之和蔓纠。
偏差度量了學(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ù)本身的難度所共同決定的硬贯。
一般來說,偏差與方差是有沖突的陨收。給定學(xué)習(xí)任務(wù)澄成,假定我們能控制學(xué)習(xí)算法的訓(xùn)練程度,則在訓(xùn)練不足時畏吓,學(xué)習(xí)器的擬合能力不夠強墨状,訓(xùn)練數(shù)據(jù)的擾動不足以使學(xué)習(xí)器產(chǎn)生顯著變化,此時偏差主導(dǎo)了泛化錯誤率菲饼;隨著訓(xùn)練程度的加深肾砂,學(xué)習(xí)器的擬合能力逐漸增強,訓(xùn)練數(shù)據(jù)的擾動漸漸能被學(xué)習(xí)器學(xué)到宏悦,方差逐漸主導(dǎo)了泛化錯誤率镐确;在訓(xùn)練程度充足后包吝,學(xué)習(xí)器的擬合能力已非常強,訓(xùn)練數(shù)據(jù)發(fā)生的輕微的擾動都會導(dǎo)致學(xué)習(xí)器發(fā)生顯著變化源葫,若訓(xùn)練數(shù)據(jù)自身的诗越、非全局的特性被學(xué)習(xí)器學(xué)到了,則將發(fā)生過擬合息堂。
總結(jié)
泛化誤差無法獲得嚷狞,經(jīng)驗誤差因為過擬合的存在而不適合作為標(biāo)準(zhǔn),導(dǎo)致我們需要專門的模型評估方法來測量學(xué)習(xí)器的效果
專門的模型評估方法是通過從數(shù)據(jù)集中選取一部分?jǐn)?shù)據(jù)作為測試集來對訓(xùn)練出的模型進行驗證荣堰,以測試誤差來近似泛化誤差實現(xiàn)的
測試誤差體現(xiàn)在具體的性能度量指標(biāo)上床未,我們要根據(jù)具體情況選擇對應(yīng)的指標(biāo)
假設(shè)檢驗是我們對學(xué)習(xí)器性能進行比較的有效方法
泛化性能是由學(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é)思路請參考下圖理解: