0
雷鋒網(wǎng) AI 科技評(píng)論按:文章的作者 Georgios Drakos 是一名數(shù)據(jù)科學(xué)家,通過本文作者向我們介紹了交叉驗(yàn)證的基本概念、作用以及如何使用。雷鋒網(wǎng) AI 科技評(píng)論根據(jù)原文進(jìn)行了編譯。
驗(yàn)證可能是數(shù)據(jù)科學(xué)家們所使用的最重要的技術(shù)之一,因?yàn)轵?yàn)證操作有助于我們了解模型的穩(wěn)定性——用來探索模型對(duì)新數(shù)據(jù)的泛化能力。我們需要確保模型從數(shù)據(jù)中正確學(xué)習(xí)到了大部分的模式,并且沒有被數(shù)據(jù)中的噪聲過度干擾,也就是說,模型的偏差和方差都能保持在一個(gè)較低值。而本文的目的正是要介紹一下有關(guān)于交叉驗(yàn)證(Cross-validation)的概念。
「交叉驗(yàn)證」是一種模型驗(yàn)證技術(shù),可用于評(píng)估統(tǒng)計(jì)分析(模型)結(jié)果在其它獨(dú)立數(shù)據(jù)集上的泛化能力。它主要用于預(yù)測(cè),我們可以用它來評(píng)估預(yù)測(cè)模型在實(shí)踐中的準(zhǔn)確度。
交叉驗(yàn)證的目標(biāo)是定義一個(gè)數(shù)據(jù)集,以便于在訓(xùn)練階段(例如,驗(yàn)證數(shù)據(jù)集)中測(cè)試模型,從而限制模型過擬合、欠擬合等問題,并且?guī)椭覀兞私饽P驮谄渌?dú)立數(shù)據(jù)集上的泛化能力。值得一提的是,驗(yàn)證集和訓(xùn)練集必須滿足獨(dú)立同分布條件,否則交叉驗(yàn)證只會(huì)讓結(jié)果變得更加糟糕。
驗(yàn)證有助于我們?cè)u(píng)估模型的質(zhì)量
驗(yàn)證有助于我們挑選出那些能夠在預(yù)測(cè)數(shù)據(jù)集上取得最好性能的模型
驗(yàn)證有助于我們避免過擬合與欠擬合
欠擬合指的是模型沒能夠從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)到足夠的模式。此時(shí),模型在訓(xùn)練集和測(cè)試集上的表現(xiàn)都非常差。
過擬合則有兩種情況:第一種,模型學(xué)習(xí)到過多的噪聲;第二種,模型學(xué)習(xí)到的模式泛化能力差。此時(shí),模型在訓(xùn)練集上表現(xiàn)很好,但是在測(cè)試集上表現(xiàn)則非常差(對(duì)于分類任務(wù)而言,可以看作是模型學(xué)習(xí)到了同類別的不同實(shí)例之間的區(qū)別,并把它們作為分類依據(jù),所以面對(duì)新的實(shí)例時(shí)分類性能不佳)。
而最佳的模型應(yīng)該能夠在訓(xùn)練集和測(cè)試集上都表現(xiàn)得很好。
通常,依據(jù)數(shù)據(jù)集中分割方式的不同,會(huì)有不同的驗(yàn)證策略。
訓(xùn)練測(cè)試集劃分/Holdout 驗(yàn)證 —— 組數(shù)為 2
在該策略中,我們簡(jiǎn)單地將數(shù)據(jù)集劃分成兩組:訓(xùn)練集和測(cè)試集,并且要求訓(xùn)練集和測(cè)試集之間的樣本不存在任何重疊,如果存在重疊,那么驗(yàn)證手段將失效。在準(zhǔn)備發(fā)布最終模型之前,我們可以在整個(gè)數(shù)據(jù)集上重新訓(xùn)練模型,而不需要更改任何超參數(shù)。
但是這種劃分方式存在一個(gè)主要的缺陷:
如果我們的劃分方式并不是隨機(jī)的呢?比如,我們數(shù)據(jù)的某個(gè)子集只有來自于某個(gè)州的人,或者某個(gè)子集中只含有某一特定水平收入的員工,又或者子集中只含有女性或特定年齡的人,這時(shí)我們?cè)撛趺崔k?盡管我們一直在極力避免,但是這些情況都將導(dǎo)致模型的過擬合,因?yàn)榇藭r(shí)無法確定哪些數(shù)據(jù)點(diǎn)會(huì)出現(xiàn)在驗(yàn)證集中,并且針對(duì)不同的數(shù)據(jù)集,模型的預(yù)測(cè)結(jié)果也可能完全不同。因此,只有當(dāng)我們擁有充足的數(shù)據(jù)時(shí),這種做法才是合適的。
Python 的實(shí)現(xiàn)方式:sklearn.model_selection.train_test_split
k 分劃分 —— 組數(shù)為k
由于永遠(yuǎn)不會(huì)有充足的數(shù)據(jù)來訓(xùn)練模型,因此如果將數(shù)據(jù)集中的某一部分劃分出來用于驗(yàn)證還會(huì)導(dǎo)致模型出現(xiàn)欠擬合的問題。由于訓(xùn)練數(shù)據(jù)樣本減少,我們的模型面臨著丟失掌握重要模式/趨勢(shì)機(jī)會(huì)的風(fēng)險(xiǎn),從而增加偏差引起的誤差。因此,我們需要一種方法,它既能夠?yàn)橛?xùn)練模型提供充足的數(shù)據(jù)樣本,又能夠?yàn)轵?yàn)證步驟保留一定數(shù)量的數(shù)據(jù)。k 分(k-fold)交叉驗(yàn)證正是我們所需要的。
k 分交叉驗(yàn)證可以看做是執(zhí)行了多次的簡(jiǎn)單二分劃分驗(yàn)證,然后我們?cè)趫?zhí)行了 k 次不同的簡(jiǎn)單劃分驗(yàn)證之后繼續(xù)簡(jiǎn)單地將得分進(jìn)行平均。數(shù)據(jù)集中的每個(gè)數(shù)據(jù)點(diǎn)只能在驗(yàn)證集中出現(xiàn)一次,并且在訓(xùn)練集中出現(xiàn) k-1 次。這種做法將大大減輕欠擬合現(xiàn)象,因?yàn)槲覀兪褂昧藥缀跛械臄?shù)據(jù)來訓(xùn)練模型,同時(shí)還能顯著減少過擬合現(xiàn)象,因?yàn)榇蟛糠謹(jǐn)?shù)據(jù)也被用來做驗(yàn)證。
當(dāng)我們的數(shù)據(jù)量較小時(shí),或者在不同的劃分?jǐn)?shù)據(jù)集中,我們的模型性能或者最優(yōu)參數(shù)存在較大的區(qū)別時(shí),k 分交叉驗(yàn)證是一種很好的選擇。通常情況下,我們?cè)O(shè)置 k=5 或 k=10,這些值來自于經(jīng)驗(yàn)總結(jié),大量實(shí)驗(yàn)證明當(dāng) k 取這些值時(shí),驗(yàn)證結(jié)果不會(huì)存在過高的偏差或者方差。
Python 實(shí)現(xiàn)代碼:sklearn.model_selection.KFold
留一法 —— 組數(shù)訓(xùn)練數(shù)據(jù)集大小
當(dāng) k 等于數(shù)據(jù)集中的樣本數(shù)時(shí),留一法(Leave one out)實(shí)際上可以看做 k 分交叉驗(yàn)證的一個(gè)特例。這意味著每次使用 k-1 個(gè)樣本作為訓(xùn)練樣本而剩下 1 個(gè)樣本作為驗(yàn)證樣本,然后照此遍歷數(shù)據(jù)集。
如果我們的數(shù)據(jù)量非常小并且模型的訓(xùn)練速度非??欤敲纯梢钥紤]該方法。
Python 實(shí)現(xiàn)代碼:sklearn.model_selection.LeaveOneOut
額外補(bǔ)充 —— 分層法(Stratification)
通常,在使用訓(xùn)練集/測(cè)試集劃分或者是 k 分交叉驗(yàn)證的時(shí)候,我們會(huì)將數(shù)據(jù)集進(jìn)行隨機(jī)重排,以便于得到隨機(jī)的訓(xùn)練/驗(yàn)證集劃分。在這種情況下,可以將不同的目標(biāo)分布應(yīng)用于不同的劃分區(qū)域中。通過分層法,當(dāng)我們?cè)诜指顢?shù)據(jù)時(shí),我們可以在不同的劃分區(qū)域中獲得相似的目標(biāo)分布。
該方法對(duì)以下情況有效:
小數(shù)據(jù)集
數(shù)據(jù)不平衡
多分類問題
通常而言,對(duì)于一個(gè)類別平衡的大型數(shù)據(jù)集,分層劃分法和簡(jiǎn)單的隨機(jī)劃分基本一樣。
如果我們有充足的數(shù)據(jù),并且對(duì)于不同的劃分方式,我們都能獲得相近的成績(jī)以及最優(yōu)參數(shù)模型,那么訓(xùn)練集/測(cè)試集二分劃分是一種不錯(cuò)的選擇。而如果恰恰相反,也就是對(duì)于不同的劃分方式,模型的測(cè)試成績(jī)和最優(yōu)參數(shù)都存在著較大的差異時(shí),我們可以選擇 k 分交叉驗(yàn)證。如果數(shù)據(jù)總量非常少,則可以考慮使用留一法。此外,分層法有助于使驗(yàn)證結(jié)果更加穩(wěn)定,并且對(duì)于小型且類別不平衡的數(shù)據(jù)集尤其管用。
當(dāng) k 的取值越大時(shí),由偏差導(dǎo)致的誤差將減少,而由方差導(dǎo)致的誤差將增加,此外計(jì)算的代價(jià)也將上升。顯然,你需要更多的時(shí)間來計(jì)算,并且也會(huì)消耗更多的內(nèi)存。
當(dāng) k 的取值越小時(shí),由方差導(dǎo)致的誤差將減少,而由偏差導(dǎo)致的誤差將增加。此外,這時(shí)所需的計(jì)算資源也將減少。
針對(duì)大型數(shù)據(jù)集的時(shí)候,我們通常將 k 設(shè)置為 3 或者 5,但是對(duì)于小型數(shù)據(jù)集我們還是建議采用留一法。
交叉驗(yàn)證是數(shù)據(jù)科學(xué)家評(píng)估模型有效性的一個(gè)非常有用的工具,特別是用于解決過擬合和欠擬合問題。此外,在確定模型最優(yōu)超參數(shù)問題上,它也是非常有幫助的。
Via 《Cross-Validation》,由雷鋒網(wǎng) AI 科技評(píng)論編譯。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。