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