很久很久以前給大家寫過決策樹键菱,非常簡單明了的算法谬墙。今天給大家寫隨機(jī)(生存)森林,隨機(jī)森林是集成了很多個(gè)決策數(shù)的集成模型经备。像隨機(jī)森林這樣將很多個(gè)基本學(xué)習(xí)器集合起來形成一個(gè)更加強(qiáng)大的學(xué)習(xí)器的這么一種集成思想還是非常好的拭抬。所以今天來寫寫這類算法。
[圖片上傳失敗...(image-bdfbde-1700743623136)]
集成學(xué)習(xí)方法
Ensemble learning methods are made up of a set of classifiers—e.g. decision trees—and their predictions are aggregated to identify the most popular result.
所謂的集成學(xué)習(xí)方法侵蒙,就是把很多的比較簡單的學(xué)習(xí)算法統(tǒng)起來用造虎,比如光看一個(gè)決策樹,好像效果比較單調(diào)蘑志,還比較容易過擬合累奈,我就訓(xùn)練好多樹贬派,把這些樹的結(jié)果綜合一下,結(jié)果應(yīng)該會(huì)好很多澎媒,用這么樣思路形成的算法就是集成學(xué)習(xí)算法Ensemble methods搞乏,就是利用很多個(gè)基礎(chǔ)學(xué)習(xí)器形成一個(gè)綜合學(xué)習(xí)器。
Basically, a forest is an example of an ensemble, which is a special type of machine learning method that averages simple functions called base learners.The resulting averaged learner is called the ensemble
集成學(xué)習(xí)方法最有名的就是bagging 和boosting 方法:
The most well-known ensemble methods are bagging, also known as bootstrap aggregation, and boosting
BAGGing
BAGGing, or Bootstrap AGGregating這個(gè)方法把自助抽樣和結(jié)果合并整合在一起戒努,包括兩個(gè)步驟请敦,一個(gè)就是自助抽樣,抽很多個(gè)數(shù)據(jù)集出來储玫,每個(gè)數(shù)據(jù)集來訓(xùn)練一個(gè)模型侍筛,這樣就可以有很多個(gè)模型了;第二步就是將這么多模型的結(jié)果合并出來最終結(jié)果撒穷,這個(gè)最終結(jié)果相對于單個(gè)模型結(jié)果就會(huì)更加穩(wěn)健匣椰。
In the bagging algorithm, the first step involves creating multiple models. These models are generated using the same algorithm with random sub-samples of the dataset which are drawn from the original dataset randomly with bootstrap sampling method
The second step in bagging is aggregating the generated models.
隨機(jī)森林就可以看作是遵循了bagging方法的一個(gè)思路,只不過在每一個(gè)抽樣樣本中的樹(模型)是不一樣的:
[圖片上傳失敗...(image-656c93-1700743623136)]
Boosting:
Boosting為強(qiáng)化學(xué)習(xí)端礼,最大的特點(diǎn)是可以將原來的弱模型變強(qiáng)禽笑,邏輯在于算法會(huì)先后訓(xùn)練很多模型,后面訓(xùn)練模型的時(shí)候會(huì)不斷地給原來模型表現(xiàn)不好的樣本增大權(quán)重蛤奥,使得后面的模型越來越將學(xué)習(xí)重點(diǎn)放在之前模型表現(xiàn)差的樣本上蛤奢,這么一來楼誓,整體模型越來越強(qiáng)葛家。就像人會(huì)從之前的錯(cuò)誤中反省經(jīng)驗(yàn)一個(gè)意思了喷好。
[圖片上傳失敗...(image-e785d7-1700743623136)]
這么一描述大家就知道,boosting方法的模型訓(xùn)練是有先后順序的缅刽,并行算法就用不了了
Boosting incrementally builds an ensemble by training each model with the same dataset but where the weights of instances are adjusted according to the error of the last prediction.
Boosting方法本身也有很多啊掏,常見的如AdaBoost,Gradient Boosting(*****XGBoost and LightGBM*****)拷恨,下圖感興趣的同學(xué)可以看看:
[圖片上傳失敗...(image-4af94a-1700743623136)]
上面的算法之后再給大家寫脖律,接下來的實(shí)操部分還是以隨機(jī)森林為例子給大家具體介紹:
隨機(jī)森林
隨機(jī)森林模型的擬合過程大概可以分為三步:
1.通過有放回的自助抽樣形成ntree個(gè)抽樣樣本集(Bootstrap)
2.對每個(gè)抽樣樣本集形成一個(gè)決策樹,這個(gè)樹是基于mtry個(gè)預(yù)測因子的
3.將最終的模型結(jié)果就是ntree個(gè)抽樣樣本集得出的結(jié)果的最大票數(shù)或者均值(AGGregating)
隨機(jī)森林的整個(gè)的流程就如下圖:
[圖片上傳失敗...(image-6d9940-1700743623136)]
為了方便理解“最終的模型結(jié)果就是ntree個(gè)抽樣樣本集得出的結(jié)果的最大票數(shù)或者均值”我們用例子做個(gè)解釋腕侄,先看下圖:
[圖片上傳失敗...(image-2ba142-1700743623136)]
我們有一個(gè)水果集小泉,然后我訓(xùn)練一個(gè)3棵樹組成的隨機(jī)森林來判斷每一個(gè)水果到底是何種類,有兩棵樹都告訴我是某一個(gè)水果是蘋果冕杠,一棵樹告訴我是香蕉微姊,那么最后我們隨機(jī)森林就會(huì)輸出該水果是香蕉的結(jié)論。
上面的過程有幾個(gè)超參需要確定
- mtry: Number of variables randomly sampled as candidates at each split.
- ntree: Number of trees to grow.
mtry一般需要調(diào)參分预,ntree都是越大越好自己設(shè)定就行兢交。在上面的過程中我們每棵樹的節(jié)點(diǎn)都是不同的,叫做特征隨機(jī)化笼痹,通過特征隨機(jī)化我們保證了森林中樹的多樣性配喳,隨機(jī)森林模型也更加穩(wěn)健酪穿。
Feature randomness, also known as feature bagging or “the random subspace method”, generates a random subset of features, which ensures low correlation among decision trees
隨機(jī)森林實(shí)操
比如我現(xiàn)在有一個(gè)數(shù)據(jù)集,結(jié)局變量是class為二分類晴裹,我要適用隨機(jī)森林算法就可以寫出如下代碼:
rf_default <- train(Class~.,
data=dataset,
method='rf',
tuneLength = 15,
trControl=control)
print(rf_default)
輸出的結(jié)果中有隨機(jī)調(diào)參的過程被济,共15次,最終發(fā)現(xiàn)超參mtry=3的時(shí)候模型最優(yōu)涧团,具體如下:
[圖片上傳失敗...(image-22ec16-1700743623136)]
以上的隨機(jī)森林模型的簡單展示只磷,接著我們再看隨機(jī)生存森林。
隨機(jī)生存森林
和隨機(jī)森林一樣泌绣,隨機(jī)生存森林也是一個(gè)集成學(xué)習(xí)方法钮追,區(qū)別在于其結(jié)局為生存資料。
示例文章
依然我們來看一篇發(fā)表在Cancer Med.上的文章阿迈,名字如下:
Prognostic risk factor of major salivary gland carcinomas and survival prediction model based on random survival forests
作者用cox進(jìn)行了變量篩選元媚,使用隨機(jī)生存森林進(jìn)行了預(yù)測模型構(gòu)建,并得到了相應(yīng)的風(fēng)險(xiǎn)分苗沧,明確了風(fēng)險(xiǎn)分的最佳截?cái)嘀担ā癿axstat” R package)惠毁,對于模型的表現(xiàn)作者使用了c指數(shù)和time-dependent ROC來評估,文章中主要的結(jié)果報(bào)告如下崎页,包括:
樹的數(shù)量和模型誤差情況,以及變量重要性的結(jié)果:
[圖片上傳失敗...(image-5d16a1-1700743623136)]
time-dependent ROC曲線結(jié)果展示和相應(yīng)的AUC值:
[圖片上傳失敗...(image-2d92d5-1700743623136)]
風(fēng)險(xiǎn)分界址點(diǎn)確定:
[圖片上傳失敗...(image-c6ca1c-1700743623136)]
高低風(fēng)險(xiǎn)組的組間生存曲線比較:
[圖片上傳失敗...(image-75e5c2-1700743623136)]
也是一篇預(yù)測模型類文章的常規(guī)套路了腰埂。挑一個(gè)算法飒焦,擬合模型后評估,做個(gè)風(fēng)險(xiǎn)分屿笼,應(yīng)用風(fēng)險(xiǎn)分劃分病人證明模型可用性牺荠。我們以這篇文章為例子看隨機(jī)生存森林預(yù)測模型的實(shí)操。
隨機(jī)生存森林實(shí)例操作
我現(xiàn)在的數(shù)據(jù)中ttodead,died兩個(gè)變量分別是時(shí)間和生存狀態(tài)驴一,此時(shí)我想做一個(gè)隨機(jī)生存森林模型就可以寫出如下代碼:
RF_obj <- rfsrc(Surv(ttodead,died)~., dataSet, ntree = 1000, membership = TRUE, importance=TRUE)
對代碼運(yùn)行后生成的對象RF_obj進(jìn)行plot即可出圖如下休雌,就得到了原文中的figure2:
[圖片上傳失敗...(image-8ed6ce-1700743623136)]
然后我們可以畫出模型的不同時(shí)間點(diǎn)的timeRoc曲線(下面代碼中的risk_score為隨機(jī)生存森林對象的預(yù)測值),就得到了原文中的figure3肝断,figure4:
ROC_rsf<-timeROC(T=finaldata.Test$Surv_day,delta=finaldata.Test$status,
marker=risk_score,
cause=1,
times=c(365,365*3,365*5),iid=TRUE)
plot(ROC_lasso,time=365)
plot(ROC_lasso,time=365*3,add = T,col="blue")
plot(ROC_lasso,time=365*5,add = T,col="green")
legend(.8, .3, legend=c("T=1 Year AUC=0.895", "T=3 Year AUC=0.917","T=5 Year AUC=0.926"),
col=c("red", "blue","green"), lty=1, cex=0.7,bty = "n")
[圖片上傳失敗...(image-9b9d7d-1700743623136)]
并且將模型預(yù)測值的截?cái)嘀嫡页鰜龛厩?yàn)證模型在不同風(fēng)險(xiǎn)組的區(qū)分能力。其中找風(fēng)險(xiǎn)分截?cái)嘀档拇a如下:
y.pred <- predict(RF_obj)[["predicted"]]
plot(surv_cutpoint(dataSet, time = "ttodead", event = "died",
variables = c("y.pred")), "y.pred", palette = "npg")
運(yùn)行后得到下圖(原文中的figure5)胸懈,就說明我們這個(gè)模型的風(fēng)險(xiǎn)分截?cái)嘀祽?yīng)該為43.21:
[圖片上傳失敗...(image-39b94b-1700743623136)]
然后根據(jù)這個(gè)風(fēng)險(xiǎn)分我們就可以將原始人群分為高風(fēng)險(xiǎn)組和低風(fēng)險(xiǎn)組担扑,再做出組間km曲線,到這兒相當(dāng)于Cancer Med的這篇用隨機(jī)生存森林的文章就完全復(fù)現(xiàn)出來了趣钱。
以上是給大家介紹的隨機(jī)生存森林的內(nèi)容涌献。