R機(jī)器學(xué)習(xí):重復(fù)抽樣在機(jī)器學(xué)習(xí)模型建立過程中的地位理解

在做機(jī)器學(xué)習(xí)項(xiàng)目的時候,一開始我們會將數(shù)據(jù)集分為訓(xùn)練集和測試集,要記住測試集只能用一次,只能用來評估最終最好的模型。如果你反復(fù)去使用測試集,反復(fù)測試后從里面挑最好的,你就是在耍流氓。

建模過程中肯定有模型調(diào)整,必然涉及到模型挑選的問題,當(dāng)過程中我需要做很多個模型時,問題來了,如果我不去評估我怎么知道哪一個模型是最好的?

Typically we can’t decide on which final model to use with the test set before first assessing model performance. There is a gap between our need to measure performance reliably and the data splits (training and testing) we have available.

想想在利用測試集之前,怎么也得加上一個評估過程,幫助我們確定,到底哪個模型才是最好的,才是值得最終被用到測試集上的。

這個過程就涉及到重復(fù)抽樣了resampling!

Resampling methods, such as cross-validation and the bootstrap, are empirical simulation systems. They create a series of data sets similar to the training/testing split

首先理解過擬合

寫重復(fù)抽樣前我們先回顧過擬合的概念,數(shù)據(jù)劃分后,我們會在訓(xùn)練集中訓(xùn)練好模型,怎么評估這個模型?很自然的我可以想到,就將模型用在訓(xùn)練集中,將真實(shí)值和預(yù)測值對比不就好了?有文章確實(shí)是這么做的,但是現(xiàn)在有很多的黑箱模型幾乎可以做到完全復(fù)制出訓(xùn)練集,做到訓(xùn)練集預(yù)測無偏差,這個時候這個黑箱模型就一定好嗎?

bias is the difference between the true pattern or relationships in data and the types of patterns that the model can emulate. Many black-box machine learning models have low bias, meaning they can reproduce complex relationships. Other models (such as linear/logistic regression, discriminant analysis, and others) are not as adaptable and are considered high bias models

不一定的。舉個實(shí)際例子吧。

對于同一個數(shù)據(jù)集,我做了兩個模型,一個線性回歸lm_fit,另外一個隨機(jī)森林rf_fit,在訓(xùn)練集中他們的表現(xiàn)如下:

[圖片上傳失敗...(image-8cf873-1676026248127)]

看上圖,明顯從rmse和rsq這兩個指標(biāo)看,都提示隨機(jī)森林模型在訓(xùn)練集中表現(xiàn)更好。按照上面的邏輯怎么說我都應(yīng)該選擇隨機(jī)森林模型才對。

于是我真的認(rèn)為隨機(jī)森林模型優(yōu)于線性回歸模型,然后我將隨機(jī)森林模型用在了測試集中去最終評估模型表現(xiàn),得到結(jié)果如下。

[圖片上傳失敗...(image-c86e02-1676026248127)]

結(jié)果顯示rmse相對于訓(xùn)練集從0.03一下跑到了0.07,r方也有明顯下降。

到這,按照原來的思路,其實(shí)我的工作已經(jīng)完了,我就單純地認(rèn)為確實(shí)我選隨機(jī)森林是對的,模型的預(yù)測能力確實(shí)也只能這樣了。

不妨在多做一步。

雖然剛剛說線性模型不如隨機(jī)森林模型,但是我又好奇這個模型在陌生的測試集中表現(xiàn)究竟怎樣?于是我又多做一步,把我們拋棄的線性模型用在測試集中看看表現(xiàn):

[圖片上傳失敗...(image-829431-1676026248127)]

可以看到線性模型在訓(xùn)練集和測試集中的表現(xiàn)一致性非常強(qiáng),在測試集中的表現(xiàn)其實(shí)和隨機(jī)森林差不太多。

上面的例子給大家的啟發(fā)就是,模型訓(xùn)練的好(在訓(xùn)練集中表現(xiàn)好)不意味著其在測試集中也好。模型在訓(xùn)練集中表現(xiàn)好,而測試集中就不行了,就是模型過擬合的表現(xiàn),模型訓(xùn)練時避免過擬合的,保證表現(xiàn)一致性的方法就是重復(fù)抽樣訓(xùn)練。

再來看重復(fù)抽樣

[圖片上傳失敗...(image-3c215f-1676026248127)]

重復(fù)抽樣訓(xùn)練的邏輯在于:

我們會將原來的訓(xùn)練集進(jìn)行反復(fù)抽樣形成很多和抽樣樣本。

對于每一個抽樣樣本,又會分為analysis樣本集和assessment樣本集,我們會在analysis樣本中訓(xùn)練模型,然后再assessment樣本中評估模型,比如我現(xiàn)在重復(fù)抽樣20,意味著我要做20個模型,每個模型評估一次,就會評估20次,整體模型好不好,是這20次的均值說了算的。這樣就大大增加了模型的推廣穩(wěn)健性,避免過擬合。

重復(fù)抽樣的常見方法包括交叉驗(yàn)證和自助抽樣驗(yàn)證,其做法代碼如下:

folds <- vfold_cv(cell_train, v = 10) #交叉驗(yàn)證設(shè)置代碼

交叉驗(yàn)證

交叉驗(yàn)證屬于resampling的一種方法,一個簡單的例子如下,比如我訓(xùn)練集30個樣本,3折交叉驗(yàn)證的圖示:

[圖片上傳失敗...(image-38f1d1-1676026248127)]

30個數(shù)據(jù)別均分為3份,每一份都當(dāng)做一次assessment數(shù)據(jù)集,相應(yīng)地剩下的2個數(shù)據(jù)集為analysis數(shù)據(jù)集用來訓(xùn)練模型

[圖片上傳失敗...(image-f29845-1676026248127)]

數(shù)據(jù)隨機(jī)切為3份之后,每一份都會用來評估模型表現(xiàn)。

仔細(xì)想一下,上面的交叉驗(yàn)證其實(shí)還有隨機(jī)性,就是你一開始就將數(shù)據(jù)切成了3份,如果只切一次其實(shí)也是有隨機(jī)性的,所以我們實(shí)際使用交叉驗(yàn)證的時候要考慮這一點(diǎn),我們會重復(fù)很多次,比如10折交叉驗(yàn)證再重復(fù)10次。這個就是反復(fù)交叉驗(yàn)證的思想,叫做Repeated cross-validation。這也是為什么交叉驗(yàn)證函數(shù)都會有一個repeats參數(shù)的原因。

自助法Bootstrapping

Bootstrap本身是一種確定統(tǒng)計(jì)量的樣本分布的方法,上篇文章剛剛提到過哈

Bootstrap resampling was originally invented as a method for approximating the sampling distribution of statistics whose theoretical properties are intractable

在機(jī)器學(xué)習(xí)中,我們對訓(xùn)練集進(jìn)行自助抽樣就是在訓(xùn)練集中有放回地隨機(jī)抽一個和訓(xùn)練集一樣大的樣本。同樣的,我們還是看一個30個樣本的訓(xùn)練集的自助抽樣例子:

[圖片上傳失敗...(image-483c92-1676026248126)]

可以看到,我們對原始30個訓(xùn)練集樣本進(jìn)行了3次自助抽樣,每次抽出來的30個樣本都是有重復(fù)的,比如在第一次的時候8這個樣本就重復(fù)了,而2這個樣本沒抽到。這樣我們就讓自助樣本做訓(xùn)練,沒抽到的樣本做assessment set。沒抽到的樣本也叫做out-of-bag sample。論文中的out-of-bag驗(yàn)證就是指的這個意思。

滾動抽樣

對于時間依賴的數(shù)據(jù),比如面板數(shù)據(jù),我們再考慮抽樣的時候一定要將時間的先后順序考慮進(jìn)去,這時候我們用到的方法叫做Rolling forecast origin resampling:下面是這個方法的圖示:

[圖片上傳失敗...(image-7d98ae-1676026248126)]

可以看到我們的抽樣是按時間前進(jìn)的,保證每次我們都是用老數(shù)據(jù)訓(xùn)練,新數(shù)據(jù)評估。上面的示例是每次丟掉一個樣本,前進(jìn)一個樣本,實(shí)際使用的時候我們可以不丟掉,一次前進(jìn)多個。

理解隨機(jī)抽樣的地位

上面又再次回憶了不同的重復(fù)抽樣的方法,始終需要記得的是,重復(fù)抽樣是服務(wù)于發(fā)現(xiàn)最優(yōu)模型的,服務(wù)于減少欠擬合和過擬合的(很多同學(xué)做預(yù)測模型其實(shí)是略過這一步的,只能說不完美,不能說錯),使用重復(fù)抽樣我們會在每一個樣本集中訓(xùn)練模型并對其進(jìn)行評估,比如我某種抽樣方法抽出20個樣本集那么我就訓(xùn)練并評估模型20次,最終20個模型的平均表現(xiàn)作為該模型的表現(xiàn)。通過這么樣的方式盡最大努力使得用到測試集中進(jìn)行測試的模型是最優(yōu)的,保證測試集只用一次并且這一次確實(shí)反映了最優(yōu)模型的表現(xiàn)。

This sequence repeats for every resample. If there are B resamples, there are B replicates of each of the performance metrics. The final resampling estimate is the average of these B statistics. If B = 1, as with a validation set, the individual statistics represent overall performance.

這個方法怎么用呢?tidymodels給了我們相應(yīng)的使用界面:

model_spec %>% fit_resamples(formula,  resamples, ...)
model_spec %>% fit_resamples(recipe,   resamples, ...)
workflow   %>% fit_resamples(          resamples, ...)

如果你看不懂上面的界面,之后我會專門寫tidymodels框架給大家,請持續(xù)關(guān)注。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容