在做機(jī)器學(xué)習(xí)項(xiàng)目的時(shí)候持痰,一開(kāi)始我們會(huì)將數(shù)據(jù)集分為訓(xùn)練集和測(cè)試集铐懊,要記住測(cè)試集只能用一次邀桑,只能用來(lái)評(píng)估最終最好的模型。如果你反復(fù)去使用測(cè)試集科乎,反復(fù)測(cè)試后從里面挑最好的壁畸,你就是在耍流氓。
建模過(guò)程中肯定有模型調(diào)整茅茂,必然涉及到模型挑選的問(wèn)題捏萍,當(dāng)過(guò)程中我需要做很多個(gè)模型時(shí),問(wèn)題來(lái)了空闲,如果我不去評(píng)估我怎么知道哪一個(gè)模型是最好的令杈?
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.
想想在利用測(cè)試集之前,怎么也得加上一個(gè)評(píng)估過(guò)程碴倾,幫助我們確定逗噩,到底哪個(gè)模型才是最好的,才是值得最終被用到測(cè)試集上的跌榔。
這個(gè)過(guò)程就涉及到重復(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
首先理解過(guò)擬合
寫(xiě)重復(fù)抽樣前我們先回顧過(guò)擬合的概念异雁,數(shù)據(jù)劃分后,我們會(huì)在訓(xùn)練集中訓(xùn)練好模型僧须,怎么評(píng)估這個(gè)模型纲刀?很自然的我可以想到,就將模型用在訓(xùn)練集中担平,將真實(shí)值和預(yù)測(cè)值對(duì)比不就好了示绊?有文章確實(shí)是這么做的锭部,但是現(xiàn)在有很多的黑箱模型幾乎可以做到完全復(fù)制出訓(xùn)練集,做到訓(xùn)練集預(yù)測(cè)無(wú)偏差面褐,這個(gè)時(shí)候這個(gè)黑箱模型就一定好嗎拌禾?
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
不一定的。舉個(gè)實(shí)際例子吧盆耽。
對(duì)于同一個(gè)數(shù)據(jù)集蹋砚,我做了兩個(gè)模型,一個(gè)線(xiàn)性回歸lm_fit摄杂,另外一個(gè)隨機(jī)森林rf_fit坝咐,在訓(xùn)練集中他們的表現(xiàn)如下:
[圖片上傳失敗...(image-8cf873-1676026248127)]
看上圖,明顯從rmse和rsq這兩個(gè)指標(biāo)看析恢,都提示隨機(jī)森林模型在訓(xùn)練集中表現(xiàn)更好墨坚。按照上面的邏輯怎么說(shuō)我都應(yīng)該選擇隨機(jī)森林模型才對(duì)。
于是我真的認(rèn)為隨機(jī)森林模型優(yōu)于線(xiàn)性回歸模型映挂,然后我將隨機(jī)森林模型用在了測(cè)試集中去最終評(píng)估模型表現(xiàn)泽篮,得到結(jié)果如下。
[圖片上傳失敗...(image-c86e02-1676026248127)]
結(jié)果顯示rmse相對(duì)于訓(xùn)練集從0.03一下跑到了0.07柑船,r方也有明顯下降帽撑。
到這,按照原來(lái)的思路鞍时,其實(shí)我的工作已經(jīng)完了亏拉,我就單純地認(rèn)為確實(shí)我選隨機(jī)森林是對(duì)的,模型的預(yù)測(cè)能力確實(shí)也只能這樣了逆巍。
不妨在多做一步及塘。
雖然剛剛說(shuō)線(xiàn)性模型不如隨機(jī)森林模型,但是我又好奇這個(gè)模型在陌生的測(cè)試集中表現(xiàn)究竟怎樣锐极?于是我又多做一步笙僚,把我們拋棄的線(xiàn)性模型用在測(cè)試集中看看表現(xiàn):
[圖片上傳失敗...(image-829431-1676026248127)]
可以看到線(xiàn)性模型在訓(xùn)練集和測(cè)試集中的表現(xiàn)一致性非常強(qiáng),在測(cè)試集中的表現(xiàn)其實(shí)和隨機(jī)森林差不太多灵再。
上面的例子給大家的啟發(fā)就是肋层,模型訓(xùn)練的好(在訓(xùn)練集中表現(xiàn)好)不意味著其在測(cè)試集中也好。模型在訓(xùn)練集中表現(xiàn)好翎迁,而測(cè)試集中就不行了栋猖,就是模型過(guò)擬合的表現(xiàn),模型訓(xùn)練時(shí)避免過(guò)擬合的鸳兽,保證表現(xiàn)一致性的方法就是重復(fù)抽樣訓(xùn)練。
再來(lái)看重復(fù)抽樣
[圖片上傳失敗...(image-3c215f-1676026248127)]
重復(fù)抽樣訓(xùn)練的邏輯在于:
我們會(huì)將原來(lái)的訓(xùn)練集進(jìn)行反復(fù)抽樣形成很多和抽樣樣本罕拂。
對(duì)于每一個(gè)抽樣樣本揍异,又會(huì)分為analysis樣本集和assessment樣本集全陨,我們會(huì)在analysis樣本中訓(xùn)練模型,然后再assessment樣本中評(píng)估模型衷掷,比如我現(xiàn)在重復(fù)抽樣20辱姨,意味著我要做20個(gè)模型,每個(gè)模型評(píng)估一次戚嗅,就會(huì)評(píng)估20次雨涛,整體模型好不好,是這20次的均值說(shuō)了算的懦胞。這樣就大大增加了模型的推廣穩(wěn)健性替久,避免過(guò)擬合。
重復(fù)抽樣的常見(jiàn)方法包括交叉驗(yàn)證和自助抽樣驗(yàn)證躏尉,其做法代碼如下:
folds <- vfold_cv(cell_train, v = 10) #交叉驗(yàn)證設(shè)置代碼
交叉驗(yàn)證
交叉驗(yàn)證屬于resampling的一種方法蚯根,一個(gè)簡(jiǎn)單的例子如下,比如我訓(xùn)練集30個(gè)樣本胀糜,3折交叉驗(yàn)證的圖示:
[圖片上傳失敗...(image-38f1d1-1676026248127)]
30個(gè)數(shù)據(jù)別均分為3份颅拦,每一份都當(dāng)做一次assessment數(shù)據(jù)集,相應(yīng)地剩下的2個(gè)數(shù)據(jù)集為analysis數(shù)據(jù)集用來(lái)訓(xùn)練模型
[圖片上傳失敗...(image-f29845-1676026248127)]
數(shù)據(jù)隨機(jī)切為3份之后教藻,每一份都會(huì)用來(lái)評(píng)估模型表現(xiàn)距帅。
仔細(xì)想一下,上面的交叉驗(yàn)證其實(shí)還有隨機(jī)性括堤,就是你一開(kāi)始就將數(shù)據(jù)切成了3份碌秸,如果只切一次其實(shí)也是有隨機(jī)性的,所以我們實(shí)際使用交叉驗(yàn)證的時(shí)候要考慮這一點(diǎn)痊臭,我們會(huì)重復(fù)很多次哮肚,比如10折交叉驗(yàn)證再重復(fù)10次。這個(gè)就是反復(fù)交叉驗(yàn)證的思想广匙,叫做Repeated cross-validation允趟。這也是為什么交叉驗(yàn)證函數(shù)都會(huì)有一個(gè)repeats參數(shù)的原因。
自助法Bootstrapping
Bootstrap本身是一種確定統(tǒng)計(jì)量的樣本分布的方法鸦致,上篇文章剛剛提到過(guò)哈
Bootstrap resampling was originally invented as a method for approximating the sampling distribution of statistics whose theoretical properties are intractable
在機(jī)器學(xué)習(xí)中潮剪,我們對(duì)訓(xùn)練集進(jìn)行自助抽樣就是在訓(xùn)練集中有放回地隨機(jī)抽一個(gè)和訓(xùn)練集一樣大的樣本。同樣的分唾,我們還是看一個(gè)30個(gè)樣本的訓(xùn)練集的自助抽樣例子:
[圖片上傳失敗...(image-483c92-1676026248126)]
可以看到抗碰,我們對(duì)原始30個(gè)訓(xùn)練集樣本進(jìn)行了3次自助抽樣,每次抽出來(lái)的30個(gè)樣本都是有重復(fù)的绽乔,比如在第一次的時(shí)候8這個(gè)樣本就重復(fù)了弧蝇,而2這個(gè)樣本沒(méi)抽到。這樣我們就讓自助樣本做訓(xùn)練,沒(méi)抽到的樣本做assessment set看疗。沒(méi)抽到的樣本也叫做out-of-bag sample沙峻。論文中的out-of-bag驗(yàn)證就是指的這個(gè)意思。
滾動(dòng)抽樣
對(duì)于時(shí)間依賴(lài)的數(shù)據(jù)两芳,比如面板數(shù)據(jù)摔寨,我們?cè)倏紤]抽樣的時(shí)候一定要將時(shí)間的先后順序考慮進(jìn)去,這時(shí)候我們用到的方法叫做Rolling forecast origin resampling:下面是這個(gè)方法的圖示:
[圖片上傳失敗...(image-7d98ae-1676026248126)]
可以看到我們的抽樣是按時(shí)間前進(jìn)的怖辆,保證每次我們都是用老數(shù)據(jù)訓(xùn)練是复,新數(shù)據(jù)評(píng)估。上面的示例是每次丟掉一個(gè)樣本竖螃,前進(jìn)一個(gè)樣本淑廊,實(shí)際使用的時(shí)候我們可以不丟掉,一次前進(jìn)多個(gè)斑鼻。
理解隨機(jī)抽樣的地位
上面又再次回憶了不同的重復(fù)抽樣的方法蒋纬,始終需要記得的是,重復(fù)抽樣是服務(wù)于發(fā)現(xiàn)最優(yōu)模型的坚弱,服務(wù)于減少欠擬合和過(guò)擬合的(很多同學(xué)做預(yù)測(cè)模型其實(shí)是略過(guò)這一步的蜀备,只能說(shuō)不完美,不能說(shuō)錯(cuò))荒叶,使用重復(fù)抽樣我們會(huì)在每一個(gè)樣本集中訓(xùn)練模型并對(duì)其進(jìn)行評(píng)估碾阁,比如我某種抽樣方法抽出20個(gè)樣本集那么我就訓(xùn)練并評(píng)估模型20次,最終20個(gè)模型的平均表現(xiàn)作為該模型的表現(xiàn)些楣。通過(guò)這么樣的方式盡最大努力使得用到測(cè)試集中進(jìn)行測(cè)試的模型是最優(yōu)的脂凶,保證測(cè)試集只用一次并且這一次確實(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.
這個(gè)方法怎么用呢愁茁?tidymodels給了我們相應(yīng)的使用界面:
model_spec %>% fit_resamples(formula, resamples, ...)
model_spec %>% fit_resamples(recipe, resamples, ...)
workflow %>% fit_resamples( resamples, ...)
如果你看不懂上面的界面蚕钦,之后我會(huì)專(zhuān)門(mén)寫(xiě)tidymodels框架給大家,請(qǐng)持續(xù)關(guān)注鹅很。