梁子超 李智煒 賴 鏗 林卓琛 李鐵鋼 張晉昕
1 中山大學(xué)公共衛(wèi)生學(xué)院醫(yī)學(xué)統(tǒng)計(jì)學(xué)系,510080 廣東 廣州;2 廣州市結(jié)核病防治所,510095 廣東 廣州
泛化能力是指模型在訓(xùn)練集上訓(xùn)練后,對(duì)新數(shù)據(jù)進(jìn)行準(zhǔn)確預(yù)測(cè)的能力。交叉驗(yàn)證(cross-validation,CV)則是一種評(píng)估模型泛化能力的方法,廣泛應(yīng)用于數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)領(lǐng)域[1]。在交叉驗(yàn)證中,通常將數(shù)據(jù)集分為兩部分,一部分為訓(xùn)練集,用于建立預(yù)測(cè)模型;另一部分為測(cè)試集,用于測(cè)試該模型的泛化能力。
在應(yīng)用交叉驗(yàn)證評(píng)估模型泛化能力的過程中,最關(guān)鍵的因素是選擇劃分訓(xùn)練集和測(cè)試集的比率,當(dāng)訓(xùn)練集樣本量過小時(shí)會(huì)引發(fā)過擬合。在如何劃分2個(gè)集合的問題上,統(tǒng)計(jì)學(xué)界提出了多種方法:簡(jiǎn)單交叉驗(yàn)證(holdout cross-validation)、留一交叉驗(yàn)證(leave-one-out cross-validation,LOOCV)、k折交叉驗(yàn)證(k-fold cross-validation)、多重k折交叉驗(yàn)證、分層法(stratification-split cross-validation)、自助法(bootstraps)等。
簡(jiǎn)單交叉驗(yàn)證將原始數(shù)據(jù)隨機(jī)分為2個(gè)集合,分別作為訓(xùn)練集和測(cè)試集,但其最終所得結(jié)果與集合劃分比率密切相關(guān),不同劃分比率結(jié)果變異可能較大。該方法在總數(shù)據(jù)集并不是非常大的情形下很難達(dá)到準(zhǔn)確評(píng)估模型的目的。留一交叉驗(yàn)證是指,假設(shè)在總集合中共有n個(gè)個(gè)體,每次選取1個(gè)個(gè)體作為測(cè)試集,其余個(gè)體作為訓(xùn)練集。總共進(jìn)行n次訓(xùn)練,取平均值作為最終評(píng)價(jià)指標(biāo)。留一交叉驗(yàn)證較為可靠,在每次模型訓(xùn)練中納入幾乎所有個(gè)體,當(dāng)總集合中個(gè)體數(shù)目較多的情況下計(jì)算時(shí)間較長(zhǎng)。k折交叉驗(yàn)證則是將原始數(shù)據(jù)隨機(jī)平均分為k個(gè)子集,每個(gè)子集做測(cè)試集的同時(shí),其余k-1個(gè)子集合并作為訓(xùn)練集,進(jìn)行k次訓(xùn)練,取各評(píng)價(jià)指標(biāo)(靈敏度、特異度、AUC等)的平均值。該方法可以使用數(shù)據(jù)集中的所有樣本進(jìn)行預(yù)測(cè),通過平均的評(píng)價(jià)指標(biāo)來降低奇異的訓(xùn)練集和測(cè)試集劃分方式對(duì)預(yù)測(cè)結(jié)果的影響。k值的選取對(duì)最終結(jié)果也有一定影響,有研究表明k值越大則評(píng)估準(zhǔn)確性越高,當(dāng)k為5或10時(shí)在評(píng)估準(zhǔn)確性和計(jì)算復(fù)雜性下綜合性能最優(yōu)[2]。
本文介紹10折交叉驗(yàn)證的基本原理,使用R語言在實(shí)例中展示10折交叉驗(yàn)證的實(shí)現(xiàn)方法。
10折交叉驗(yàn)證是指將原始數(shù)據(jù)集隨機(jī)劃分為樣本數(shù)量近乎相等的10個(gè)子集,輪流將其中的9個(gè)合并作為訓(xùn)練集,其余1個(gè)作為測(cè)試集。在每次試驗(yàn)中計(jì)算正確率等評(píng)價(jià)指標(biāo),最終通過k次試驗(yàn)后取評(píng)價(jià)指標(biāo)的平均值來評(píng)估該模型的泛化能力。
10折交叉驗(yàn)證被廣泛應(yīng)用于醫(yī)學(xué)領(lǐng)域中的機(jī)器學(xué)習(xí)研究,作為一種測(cè)試集與訓(xùn)練集劃分的方法。有研究者使用10折交叉驗(yàn)證方法評(píng)價(jià)支持向量機(jī)算法利用影像學(xué)資料對(duì)新型冠狀病毒肺炎(COVID-19)的預(yù)測(cè)能力[3]。也有研究者利用支持向量機(jī)和稀疏貝葉斯極限學(xué)習(xí)機(jī)算法,在10折交叉驗(yàn)證下使用腦電圖信號(hào)預(yù)測(cè)疼痛及疼痛出現(xiàn)的位置[4]。此外,也有研究者使用LASSO回歸算法及10折交叉回歸方法,通過長(zhǎng)非編碼RNA(lncRNA)表達(dá)情況預(yù)測(cè)宮頸癌患者復(fù)發(fā)的風(fēng)險(xiǎn)[5]。
10折交叉驗(yàn)證的基本步驟如下:
(1)原始數(shù)據(jù)集劃分為10個(gè)樣本量盡可能均衡的子集;
(2)使用第1個(gè)子集作為測(cè)試集,第2~9個(gè)子集合并作為訓(xùn)練集;
(3)使用訓(xùn)練集對(duì)模型進(jìn)行訓(xùn)練,計(jì)算多種評(píng)價(jià)指標(biāo)在測(cè)試集下的結(jié)果;
(4)重復(fù)2~3步驟,輪流將第2~10個(gè)子集作為測(cè)試集;
(5)計(jì)算各評(píng)價(jià)指標(biāo)的平均值作為最終結(jié)果。
10折交叉驗(yàn)證的原理示意見圖1。
圖1 10折交叉驗(yàn)證的原理示意圖
下面結(jié)合實(shí)例展示10折交叉驗(yàn)證的具體實(shí)現(xiàn)方法。所有統(tǒng)計(jì)分析均使用R軟件(版本3.6.3)進(jìn)行。其中k折交叉驗(yàn)證使用caret包,繪制ROC曲線使用pROC包。
實(shí)例數(shù)據(jù)來源于廣州市胸科醫(yī)院2014年1月至2017年12月中所有被診斷為利福平耐藥結(jié)核病(rifampicin drug-resistant tuberculosis,RR-TB)、耐多藥結(jié)核病(multidrug-resistant tuberculosis,MDR-TB)或廣泛耐多藥結(jié)核病(extensively drug-resistant tuberculosis,XDR-TB)的患者治療前的基本人口學(xué)信息及部分臨床檢查結(jié)果,共387人次。
自變量包括年齡(<18歲、18~歲、30~歲、60~歲),性別,戶籍類型(本地、市內(nèi)流動(dòng)、外來流動(dòng)),患者登記分類(新患者、初治失敗、復(fù)發(fā)、復(fù)治失敗),4種藥物耐藥性[isoniazid(INH)、rifampicin(RFP)、ethambutol(EMB)、streptomycin(SM)],診斷結(jié)果(RR/MDR/XDR-TB),抗結(jié)核一、二線藥物使用情況(無、僅使用一線藥、使用過一線和二線藥),是否在治,治療模式(門診、住院),使用藥物類型[國(guó)產(chǎn),綠燈委員會(huì)(Green Light Committee,GLC)],治療時(shí)長(zhǎng)(≤180 d、180 d~、360 d~、不詳),痰涂片結(jié)果(全程為陰性、陰性和陽(yáng)性均出現(xiàn)過、全程為陽(yáng)性),痰培養(yǎng)結(jié)果(全程為陰性、陰性和陽(yáng)性均出現(xiàn)過、全程為陽(yáng)性);因變量為治療結(jié)局(治愈、治療失敗)。
建立預(yù)測(cè)模型前對(duì)所有自變量進(jìn)行單因素分析(使用χ2檢驗(yàn),當(dāng)理論頻數(shù)<1時(shí),使用Fisher確切概率法,檢驗(yàn)水準(zhǔn)α=0.10),將單因素分析有意義(戶籍類型,抗結(jié)核一、二線藥物使用情況,使用藥物類型,痰涂片結(jié)果,痰培養(yǎng)結(jié)果)和既往研究[6-8]提出的危險(xiǎn)因素(年齡,登記類型,抗結(jié)核一、二線藥物使用情況,治療時(shí)長(zhǎng))作為自變量納入模型中,自變量中所有多分類變量均作為啞變量納入模型。使用逐步回歸法進(jìn)行自變量篩選(納入水準(zhǔn)為0.05,排除水準(zhǔn)為0.10),篩選后最終僅納入戶籍類型和登記類型兩自變量進(jìn)入預(yù)測(cè)模型。
在預(yù)測(cè)中,截?cái)嘀档拇_定是基于約登指數(shù)最大的法則。分別計(jì)算5折、10折、20折交叉驗(yàn)證下的平均正確率、靈敏度、特異度、AUC值和程序運(yùn)行時(shí)間。分別使用10個(gè)種子計(jì)算5、10、20折交叉驗(yàn)證所得評(píng)價(jià)指標(biāo)平均值的標(biāo)準(zhǔn)誤。得出10折交叉驗(yàn)證下的10條ROC曲線及10次所有預(yù)測(cè)值與其對(duì)應(yīng)的觀測(cè)值合并所得出的融合ROC曲線,同時(shí)將10折交叉驗(yàn)證下10次所有預(yù)測(cè)值與其對(duì)應(yīng)的觀測(cè)值融合后與留一交叉驗(yàn)證方法得出的評(píng)價(jià)指標(biāo)進(jìn)行比較。這里的融合就是把k折交叉驗(yàn)證的k輪預(yù)測(cè)結(jié)果放在一起,進(jìn)而可以聯(lián)合起來計(jì)算出該驗(yàn)證方法的統(tǒng)一靈敏度、特異度等指標(biāo)值。
10折交叉驗(yàn)證的關(guān)鍵代碼見表1。
表1 10折交叉驗(yàn)證的關(guān)鍵代碼
10折交叉驗(yàn)證下平均正確率為0.750(95%CI:0.659~0.841)、靈敏度為0.732、特異度為0.771、AUC為0.707;ROC曲線及融合ROC曲線見圖2。不同訓(xùn)練集和測(cè)試集的劃分下各模型評(píng)價(jià)指標(biāo)的波動(dòng)較大。正確率的極差為0.455,四分位數(shù)間距為0.107;靈敏度的極差為0.471,四分位數(shù)間距為0.250;特異度的極差為0.600,四分位數(shù)間距為0.222;AUC的極差為0.448,四分位數(shù)間距為0.066。
圖2 10折交叉驗(yàn)證下的ROC曲線及融合ROC曲線
實(shí)例中10折交叉驗(yàn)證法在平均正確率和靈敏度中均高于5折與20折交叉驗(yàn)證法。20折相較于10折而言計(jì)算復(fù)雜度增加的同時(shí)對(duì)評(píng)價(jià)指標(biāo)的變化并不明顯,平均正確率降低0.037,平均AUC提高0.029。將10折交叉驗(yàn)證中10次預(yù)測(cè)值與其原始觀測(cè)值融合后與留一驗(yàn)證法進(jìn)行比較,正確率、靈敏度和特異度相同且AUC差別不大,但程序運(yùn)行時(shí)間明顯增加。從結(jié)果也可看出,隨著折數(shù)的增加程序運(yùn)行時(shí)間也明顯增加。使用10個(gè)種子計(jì)算5、10、20折交叉驗(yàn)證所得評(píng)價(jià)指標(biāo)平均值的標(biāo)準(zhǔn)誤后可知,隨著折數(shù)增加各評(píng)價(jià)指標(biāo)的標(biāo)準(zhǔn)誤也在增大。綜合以上結(jié)果可知,10折交叉驗(yàn)證在提高各項(xiàng)評(píng)價(jià)指標(biāo)的同時(shí),穩(wěn)定性與運(yùn)行效率的損失相對(duì)較低。
實(shí)例中10折交叉驗(yàn)證中10次訓(xùn)練所得評(píng)價(jià)指標(biāo)及平均值見表2;5、10、20折交叉驗(yàn)證所得評(píng)價(jià)指標(biāo)的平均值見表3;分別使用10個(gè)種子計(jì)算5、10、20折交叉驗(yàn)證所得評(píng)價(jià)指標(biāo)平均值的標(biāo)準(zhǔn)誤見表4;10折交叉驗(yàn)證中10組數(shù)據(jù)融合及留一交叉驗(yàn)證法所得評(píng)價(jià)指標(biāo)見表5。
表2 10折交叉驗(yàn)證中10次訓(xùn)練所得評(píng)價(jià)指標(biāo)及其平均值
表3 5、10、20折交叉驗(yàn)證所得評(píng)價(jià)指標(biāo)的平均值
表4 5、10、20折交叉驗(yàn)證評(píng)價(jià)指標(biāo)的標(biāo)準(zhǔn)誤(基于10個(gè)種子)
表5 10折交叉驗(yàn)證融合與留一交叉驗(yàn)證的對(duì)比
本文介紹了10折交叉驗(yàn)證的原理和在R語言環(huán)境下的實(shí)現(xiàn)方法,用實(shí)例說明不同的訓(xùn)練集和測(cè)試集劃分對(duì)模型預(yù)測(cè)評(píng)價(jià)指標(biāo)的影響。相較于其他交叉驗(yàn)證方法,10折交叉驗(yàn)證能準(zhǔn)確刻畫模型的泛化能力,穩(wěn)定性與運(yùn)行效率更佳。
10折交叉驗(yàn)證在實(shí)踐中存在的局限性在于,當(dāng)樣本量較少時(shí),將該樣本隨機(jī)分為10份會(huì)導(dǎo)致每次使用的訓(xùn)練集變化較大,導(dǎo)致最終10組評(píng)價(jià)指標(biāo)的變異程度相對(duì)較大。當(dāng)樣本量較大時(shí),使用10折交叉驗(yàn)證方法會(huì)導(dǎo)致模型計(jì)算復(fù)雜度增大且計(jì)算時(shí)間較長(zhǎng)。當(dāng)樣本量非常大時(shí),可直接采用簡(jiǎn)單交叉驗(yàn)證。當(dāng)樣本量較少或數(shù)據(jù)不平衡程度較強(qiáng)時(shí),可能會(huì)出現(xiàn)其中某次訓(xùn)練集中只有單一預(yù)測(cè)結(jié)局的情況,此時(shí)應(yīng)減小折數(shù),重新隨機(jī)劃分子集,采用分層法進(jìn)行交叉驗(yàn)證或使用自助法進(jìn)行驗(yàn)證。同時(shí),使用10折交叉驗(yàn)證時(shí),應(yīng)預(yù)設(shè)種子以便結(jié)果可重現(xiàn)。
10折交叉驗(yàn)證被廣泛應(yīng)用于多種機(jī)器學(xué)習(xí)模型中,除本文介紹的logistic模型外,在LASSO回歸、支持向量機(jī)、決策樹、樸素貝葉斯分類、隨機(jī)森林等多種模型中也可應(yīng)用。STATA、SAS及MATLAB中均可使用10折交叉驗(yàn)證方法。