【新智元導(dǎo)讀】本文介紹了機(jī)器學(xué)習(xí)模型出錯(cuò)的常見(jiàn)原因, 討論了如何用偏差和方差、精確率和召回率這些指標(biāo)來(lái)評(píng)測(cè)模型的問(wèn)題,并基于 Andrew Ng 在斯坦福機(jī)器學(xué)習(xí)課程中所教授的概念,提出了一些解決這些問(wèn)題的方法。 可供選擇的機(jī)器學(xué)習(xí)模型并不少。我們可以用線(xiàn)性回歸來(lái)預(yù)測(cè)一個(gè)值,用邏輯回歸來(lái)對(duì)不同結(jié)果分類(lèi),用神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)非線(xiàn)性行為建模。 我們建模時(shí)通常用一份歷史數(shù)據(jù)讓機(jī)器學(xué)習(xí)模型學(xué)習(xí)一組輸入特性的關(guān)系,以預(yù)測(cè)輸出。但即使這個(gè)模型能準(zhǔn)確預(yù)測(cè)歷史數(shù)據(jù)中的某個(gè)值,我們?cè)趺粗浪欠衲芡瑯訙?zhǔn)確地預(yù)測(cè)新的數(shù)據(jù)呢? 簡(jiǎn)而言之,如何評(píng)估一個(gè)機(jī)器學(xué)習(xí)模型是否真的“好”呢? 在這篇文章里,我們將介紹一些看似很好的機(jī)器學(xué)習(xí)模型依然會(huì)出錯(cuò)的常見(jiàn)情況, 討論如何用偏差(bias)vs 方差 (variance),精確率 (precision)vs 召回率(recall)這樣的指標(biāo)來(lái)評(píng)估這些模型問(wèn)題, 并提出一些解決方案以便你在遇到此類(lèi)情況時(shí)使用。 檢驗(yàn)一個(gè)機(jī)器學(xué)習(xí)模型時(shí)要做的第一件事就是看是否存在“高偏差(High Bias)”或“高方差(High Variance)”。 高偏差指的是你的模型對(duì)實(shí)驗(yàn)數(shù)據(jù)是否“欠擬合(underfitting)”(見(jiàn)上圖)。高偏差是不好的,因?yàn)槟愕哪P蜎](méi)有非常準(zhǔn)確或者有代表性地反映輸入值和預(yù)測(cè)的輸出值之間的關(guān)系, 而且經(jīng)常輸出高失誤的值(例如模型預(yù)測(cè)值與真實(shí)值之間有差距)。 高方差則指相反情況。出現(xiàn)高方差或者“過(guò)擬合”時(shí), 機(jī)器學(xué)習(xí)模型過(guò)于準(zhǔn)確,以至于完美地?cái)M合了實(shí)驗(yàn)數(shù)據(jù)。這種結(jié)果看上去不錯(cuò),但需引起注意,因?yàn)檫@樣的模型往往無(wú)法適用于未來(lái)數(shù)據(jù)。所以盡管模型對(duì)已有數(shù)據(jù)運(yùn)行良好,你并不知道它在其他數(shù)據(jù)上能運(yùn)行得怎樣。 那怎樣才能知道自己的模型是否存在高偏差或是高方差呢? 一種直接了當(dāng)?shù)姆椒ň褪前褦?shù)據(jù)一分為二:訓(xùn)練集和測(cè)試集。例如把模型在 70% 的數(shù)據(jù)上做訓(xùn)練,然后用剩下的 30% 數(shù)據(jù)來(lái)測(cè)量失誤率。如果模型在訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)上都存在著高失誤,那這個(gè)模型在兩組數(shù)據(jù)都欠擬合,也就是有高偏差。如果模型在訓(xùn)練集上失誤率低,而在測(cè)試集上失誤率高,這就意味著高方差,也就是模型無(wú)法適用于第二組數(shù)據(jù)。 如果模型整體上在訓(xùn)練集(過(guò)往數(shù)據(jù))和測(cè)試集(未來(lái)數(shù)據(jù))上都失誤率較低,你就找到了一個(gè)“正好”的模型,在偏差度和方差度間達(dá)到了平衡。 即使機(jī)器學(xué)習(xí)模型準(zhǔn)確率很高,也有可能出現(xiàn)其他類(lèi)型的失誤。 以將電子郵件分類(lèi)為垃圾郵件(正類(lèi)別 positive class)和非垃圾郵件(負(fù)類(lèi)別 negative class)為例。99% 的情況下, 你收到的郵件都并非垃圾郵件,但可能有1% 是垃圾郵件。假設(shè)我們訓(xùn)練一個(gè)機(jī)器學(xué)習(xí)模型,讓它學(xué)著總把郵件預(yù)測(cè)為非垃圾郵件(負(fù)類(lèi)別), 那這個(gè)模型 99% 的情況下是準(zhǔn)確的,只是從未捕獲過(guò)正類(lèi)別。 在這種情況下,用兩個(gè)指標(biāo)——精準(zhǔn)率和召回率來(lái)決定究竟要預(yù)測(cè)多少百分比的正類(lèi)別就很有幫助了。 精準(zhǔn)率是測(cè)量正類(lèi)別多常為真, 可以通過(guò)計(jì)算“真正(true positive, 例如預(yù)測(cè)為垃圾郵件且真的為垃圾郵件)”與“真負(fù)(true negative, 例如預(yù)測(cè)為垃圾郵件但事實(shí)并非如此)”總和中“真正”的個(gè)數(shù)而得出。 召回率則用來(lái)測(cè)量實(shí)際上的正類(lèi)別多常被準(zhǔn)確預(yù)測(cè), 以計(jì)算真正與假負(fù)(false negative, 例如預(yù)測(cè)郵件為非垃圾郵件,但事實(shí)上郵件是垃圾郵件)的總和里有多少個(gè)真正而得出。 另一種理解精確率與召回率區(qū)別的方法是,精確率測(cè)量的是對(duì)正類(lèi)別的預(yù)測(cè)中有多少比例成真,而召回率則告訴你預(yù)測(cè)中多常能真正捕獲到正類(lèi)別。因此,當(dāng)正類(lèi)別預(yù)測(cè)為真的情況很少時(shí), 就出現(xiàn)了低精確率,當(dāng)正類(lèi)別很少被預(yù)測(cè)到的時(shí)候,就出現(xiàn)了低召回率。 一個(gè)良好的機(jī)器學(xué)習(xí)模型目標(biāo)在于,通過(guò)試圖最大化“真正”的數(shù)量以及最小化“假負(fù)”和“假正”的數(shù)量來(lái)實(shí)現(xiàn)精確率與召回率的平衡(如上圖所示)。 如果模型面臨高偏差 vs. 高方差的問(wèn)題,或者在精確率和召回率之間難以平衡,有幾種策略可以采用。 比如機(jī)器學(xué)習(xí)模型出現(xiàn)高偏差時(shí),你可以試試增加輸入特征(input feature)的數(shù)量。上文已討論過(guò),高偏差出現(xiàn)于模型對(duì)背后的數(shù)據(jù)欠擬合時(shí),在訓(xùn)練集和測(cè)試集都會(huì)出現(xiàn)高失誤率。如果把模型的失誤以基于輸入特征個(gè)數(shù)的函數(shù)畫(huà)出(見(jiàn)上圖), 我們發(fā)現(xiàn)特征越多,模型的擬合度越好。 同理,對(duì)于高方差,你可以減少輸入特征的數(shù)量。如果模型對(duì)訓(xùn)練數(shù)據(jù)過(guò)擬合,有可能是你用了太多特征,減少輸入特征的數(shù)量會(huì)使模型對(duì)測(cè)試或者未來(lái)數(shù)據(jù)更靈活 。同樣,增加訓(xùn)練樣本的數(shù)量對(duì)高方差也是有益的, 這會(huì)幫助機(jī)器學(xué)習(xí)算法建出一個(gè)更通用的模型。 對(duì)要平衡低精確率與低召回率的情況,你可以調(diào)整區(qū)分正負(fù)類(lèi)別的概率臨界值(probability threshold)。對(duì)低精確率可以提高概率臨界值,以使模型在指定正類(lèi)別時(shí)更為保守。反之,遇到低召回率時(shí)可以降低概率臨界值,以能更常預(yù)測(cè)到正類(lèi)別。 經(jīng)過(guò)足夠迭代,就很有可能找到一個(gè)能平衡偏差與方差,精確率與召回率的合適的機(jī)器學(xué)習(xí)模型了。 本文是基于 Andrew Ng 在 Coursera 上的斯坦福機(jī)器學(xué)習(xí)課程筆記里教授的概念。 原文地址:http://www./2016/12/4-reasons-machine-learning-model-wrong.html
|
|