一文簡(jiǎn)述如何使用嵌套交叉驗(yàn)證方法處理時(shí)序數(shù)據(jù)
本文討論了對(duì)時(shí)序數(shù)據(jù)使用傳統(tǒng)交叉驗(yàn)證的一些缺陷。具體來說,我們解決了以下問題:
- 在不造成數(shù)據(jù)泄露的情況下,對(duì)時(shí)序數(shù)據(jù)進(jìn)行分割;
- 在獨(dú)立測(cè)試集上使用嵌套交叉驗(yàn)證得到誤差的無偏估計(jì);
- 對(duì)包含多個(gè)時(shí)序的數(shù)據(jù)集進(jìn)行交叉驗(yàn)證。
本文主要針對(duì)缺乏如何對(duì)包含多個(gè)時(shí)間序列的數(shù)據(jù)使用交叉驗(yàn)證的在線信息。
本文有助于任何擁有時(shí)間序列數(shù)據(jù),尤其是多個(gè)獨(dú)立的時(shí)間序列數(shù)據(jù)的人。這些方法是在醫(yī)療研究中被設(shè)計(jì)用于處理來自多個(gè)參與人員的醫(yī)療時(shí)序數(shù)據(jù)的。
一、交叉驗(yàn)證
交叉驗(yàn)證(CV)是一項(xiàng)很流行的技術(shù),用于調(diào)節(jié)超參數(shù),是一種具備魯棒性的模型性能評(píng)價(jià)技術(shù)。兩種最常見的交叉驗(yàn)證方式分別是 k 折交叉驗(yàn)證和 hold-out 交叉驗(yàn)證。
由于文獻(xiàn)中術(shù)語的不同,本文中我們將明確定義交叉驗(yàn)證步驟。首先,將數(shù)據(jù)集分割為兩個(gè)子集:訓(xùn)練集和測(cè)試集。如果有需要被調(diào)整的參數(shù),我們將訓(xùn)練集分為訓(xùn)練子集和驗(yàn)證集。模型在訓(xùn)練子集上進(jìn)行訓(xùn)練,在驗(yàn)證集上將誤差最小化的參數(shù)將最終被選擇。最后,模型使用所選的參數(shù)在整個(gè)訓(xùn)練集上進(jìn)行訓(xùn)練,并且記錄測(cè)試集上的誤差。
圖 1: hold-out 交叉驗(yàn)證的例子
數(shù)據(jù)被分為訓(xùn)練集和測(cè)試集。然后訓(xùn)練集進(jìn)一步進(jìn)行分割:一部分用來調(diào)整參數(shù)(訓(xùn)練子集),另一部分用來驗(yàn)證模型(驗(yàn)證集)。
為什么時(shí)序數(shù)據(jù)的交叉驗(yàn)證會(huì)有所不同?
在處理時(shí)序數(shù)據(jù)時(shí),不應(yīng)該使用傳統(tǒng)的交叉驗(yàn)證方法(如 k 折交叉驗(yàn)證),原因有2:
1. 時(shí)序依賴
為了避免數(shù)據(jù)泄露,要特別注意時(shí)間序列數(shù)據(jù)的分割。為了準(zhǔn)確地模擬「我們現(xiàn)在所處、預(yù)測(cè)未來的真實(shí)預(yù)測(cè)環(huán)境」(Tashman 2000),預(yù)測(cè)者必須保留用于擬合模型的事件之后發(fā)生的事件的數(shù)據(jù)。因此,對(duì)于時(shí)間序列數(shù)據(jù)而言,我們沒有使用 k 折交叉驗(yàn)證,而是使用 hold-out 交叉驗(yàn)證,其中一個(gè)數(shù)據(jù)子集(按照時(shí)間順序分割)被保留下來用于驗(yàn)證模型性能。例如,圖 1 中的測(cè)試集數(shù)據(jù)在時(shí)間順序上是位于訓(xùn)練數(shù)據(jù)之后的。類似地,驗(yàn)證集也在訓(xùn)練集之后。
2. 任意選擇測(cè)試集
你可能注意到了,圖 1 中測(cè)試集的選擇是相當(dāng)隨意的,這種選擇也意味著我們的測(cè)試集誤差是在獨(dú)立測(cè)試集上不太好的誤差估計(jì)。為了解決這個(gè)問題,我們使用了一種叫做嵌套交叉驗(yàn)證(Nested Cross-Validation)的方法。嵌套交叉驗(yàn)證包含一個(gè)用于誤差估計(jì)的外循環(huán),以及一個(gè)用于調(diào)參的內(nèi)循環(huán)(如圖 2 所示)。內(nèi)循環(huán)所起的作用和之前談到的一樣:訓(xùn)練集被分割成一個(gè)訓(xùn)練子集和一個(gè)驗(yàn)證集,模型在訓(xùn)練子集上訓(xùn)練,然后選擇在驗(yàn)證集上能夠使誤差最小化的參數(shù)。但是,現(xiàn)在我們?cè)黾恿艘粋€(gè)外循環(huán),它將數(shù)據(jù)集分割成多個(gè)不同的訓(xùn)練集和測(cè)試集,為了計(jì)算模型誤差的魯棒估計(jì),對(duì)每一次分割的誤差求平均值。這樣做是有優(yōu)勢(shì)的:
嵌套交叉驗(yàn)證過程可以提供一個(gè)幾近無偏的真實(shí)誤差估計(jì)。(Varma and Simon 2006)
圖 2: 嵌套交叉驗(yàn)證示例
二、用于時(shí)間序列的嵌套交叉驗(yàn)證
我們推薦兩種嵌套交叉驗(yàn)證的方法,來處理僅具有一個(gè)時(shí)間序列的數(shù)據(jù)。我們也會(huì)處理來自一個(gè)病人/參與者的多天醫(yī)療數(shù)據(jù):
- 預(yù)測(cè)后一半(Predict Second Half)
- 日前向鏈(Day Forward-Chaining)
1. 預(yù)測(cè)后一半
第一種方法「預(yù)測(cè)后一半」,這是嵌套交叉驗(yàn)證的「基本情況」,只有一次訓(xùn)練/測(cè)試分割。它的優(yōu)勢(shì)是這種方法易于實(shí)現(xiàn);然而,它仍然面臨著任意選擇測(cè)試集的局限性。前一半數(shù)據(jù)(按照時(shí)間分割的)作為訓(xùn)練集,后一半數(shù)據(jù)成為測(cè)試集。驗(yàn)證集的大小可以根據(jù)給定問題的不同而變化(例如圖 3 中的例子用一天的數(shù)據(jù)作為驗(yàn)證集),但是保證驗(yàn)證集的時(shí)間順序在訓(xùn)練子集后面是非常重要的。
圖 3: 預(yù)測(cè)后一半嵌套交叉驗(yàn)證方法
2. 日前向鏈(Day Forward-Chaining)
預(yù)測(cè)后一半嵌套交叉驗(yàn)證方法的一個(gè)缺陷是 hold-out 測(cè)試集的任意選擇會(huì)導(dǎo)致在獨(dú)立測(cè)試集上預(yù)測(cè)誤差的有偏估計(jì)。為了生成對(duì)模型預(yù)測(cè)誤差的更好估計(jì),一個(gè)常用的方法就是進(jìn)行多次訓(xùn)練/測(cè)試分割,然后計(jì)算這些分割上的誤差平均值。我們使用日前向鏈技術(shù)是一種基于前向鏈(Forward-Chaining)的方法(在文獻(xiàn)中也被稱為 rolling-origin evaluation(Tashman,2000)和 rolling-origin-recalibration evaluation(Bergmeir & Benitez,2012))。利用這種方法,我們將每天的數(shù)據(jù)作為測(cè)試集,并將以前的所有數(shù)據(jù)分配到訓(xùn)練集中。例如,如果數(shù)據(jù)集有五天,那么我們將生成三個(gè)不同的訓(xùn)練和測(cè)試分割,如圖 4 所示。請(qǐng)注意,在本示例中,我們有三次拆分,而不是五次拆分,因?yàn)槲覀冃枰_保至少有一天的訓(xùn)練和驗(yàn)證數(shù)據(jù)可用。該方法產(chǎn)生許多不同的訓(xùn)練/測(cè)試分割,并且對(duì)每個(gè)分割上的誤差求平均,以計(jì)算模型誤差的魯棒估計(jì)。
圖 4: 日前向鏈嵌套交叉驗(yàn)證
注意,在這個(gè)例子中我們使用「日」前向鏈,但是也可以在每個(gè)數(shù)據(jù)點(diǎn)上進(jìn)行迭代,而不是按天迭代(但這明顯意味著更多的拆分)。
三、多時(shí)序嵌套交叉驗(yàn)證
現(xiàn)在有兩種分割單個(gè)時(shí)間序列的方法,接下來我們將討論如何處理具有多個(gè)不同時(shí)間序列的數(shù)據(jù)集。同樣,我們使用兩種方法:
1. 常規(guī)(regular)
「常規(guī)」嵌套交叉驗(yàn)證(regular nested cross-validation)的訓(xùn)練集/驗(yàn)證集/測(cè)試集分割基本思路和之前的描述是一樣的。唯一的變化是現(xiàn)在的分割包含了來自數(shù)據(jù)集中不同參與者的數(shù)據(jù)。如果有兩個(gè)參與者 A 和 B,那么訓(xùn)練集將包含來自參與者 A 的前半天的數(shù)據(jù)和來自參與者 B 的前半天的數(shù)據(jù)。同樣,測(cè)試集將包含每個(gè)參與者的后半天數(shù)據(jù)。
2. 群體知情(Population-Informed)
對(duì)于「群體知情嵌套交叉驗(yàn)證」方法而言,我們利用了不同參與者數(shù)據(jù)之間的獨(dú)立性。這使得我們打破嚴(yán)格的時(shí)間順序,至少在個(gè)人數(shù)據(jù)之間(在個(gè)人數(shù)據(jù)內(nèi)打破嚴(yán)格時(shí)序仍然是必要的)。由于這種獨(dú)立性,我們可以稍微修改常規(guī)嵌套交叉驗(yàn)證算法?,F(xiàn)在,測(cè)試集和驗(yàn)證集僅包含來自一個(gè)參與者(例如參與者 A)的數(shù)據(jù),并且數(shù)據(jù)集中所有其他參與者的所有數(shù)據(jù)都被允許存在于訓(xùn)練集中。圖 5 描述了這種方法是如何適用于群體知情的日前向鏈嵌套交叉驗(yàn)證的。該圖顯示,參與者 A 第 18 天的數(shù)據(jù)是測(cè)試集(紅色),之前三天是驗(yàn)證集(黃色),訓(xùn)練集(綠色)包含參與者 A 的所有先前數(shù)據(jù)以及其他參與者(本例中為 B、C、D 和 E)的所有數(shù)據(jù)。需要強(qiáng)調(diào)的一點(diǎn)是,由于其他參與者的時(shí)間序列的獨(dú)立性,使用這些參與者的「未來」觀測(cè)不會(huì)造成數(shù)據(jù)泄漏。
圖 5: 群體知情日前向鏈(Population-Informed Day Forward-Chaining)交叉驗(yàn)證示例
其中除了對(duì)參與者 A 的日前向鏈方法(左圖),我們也允許其他參與者的數(shù)據(jù)存在于訓(xùn)練集中(右圖)。請(qǐng)注意,灰色線條表示參與者睡眠的時(shí)間。
最后,我們總結(jié)了不同嵌套交叉驗(yàn)證方法的優(yōu)缺點(diǎn),特別是獨(dú)立測(cè)試集誤差估計(jì)的計(jì)算時(shí)間和偏差。分割的次數(shù)假定數(shù)據(jù)集包含 p 個(gè)參與者,以及每個(gè)參與者共有 d 天的數(shù)據(jù)。
四、總結(jié)
我們首先回顧了交叉驗(yàn)證,并列舉了使用嵌套交叉驗(yàn)證的基本原理。然后討論了如何在不造成數(shù)據(jù)泄漏的情況下分割單個(gè)時(shí)間序列數(shù)據(jù),具體提出了兩種方法:預(yù)測(cè)后一半嵌套交叉驗(yàn)證和日前向鏈嵌套交叉驗(yàn)證。接著我們討論了如何處理多個(gè)獨(dú)立的時(shí)間序列,兩種方法:常規(guī)嵌套交叉驗(yàn)證和群體知情嵌套交叉驗(yàn)證。
原文鏈接:
https://towardsdatascience.com/time-series-nested-cross-validation-76adba623eb9
【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】