R數(shù)據(jù)分析:集成學(xué)習(xí)方法之隨機(jī)生存森林的原理和做法,實(shí)例解析

很久很久以前給大家寫過決策樹键菱,非常簡單明了的算法谬墙。今天給大家寫隨機(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)容涌献。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市首有,隨后出現(xiàn)的幾起案子燕垃,更是在濱河造成了極大的恐慌枢劝,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卜壕,死亡現(xiàn)場離奇詭異您旁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)印叁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門被冒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轮蜕,你說我怎么就攤上這事昨悼。” “怎么了跃洛?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵率触,是天一觀的道長。 經(jīng)常有香客問我汇竭,道長葱蝗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任细燎,我火速辦了婚禮两曼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玻驻。我一直安慰自己悼凑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布璧瞬。 她就那樣靜靜地躺著户辫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗤锉。 梳的紋絲不亂的頭發(fā)上渔欢,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音瘟忱,去河邊找鬼奥额。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酷誓,可吹牛的內(nèi)容都是我干的披坏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼盐数,長吁一口氣:“原來是場噩夢啊……” “哼棒拂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤帚屉,失蹤者是張志新(化名)和其女友劉穎谜诫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體攻旦,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喻旷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牢屋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片且预。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖烙无,靈堂內(nèi)的尸體忽然破棺而出锋谐,到底是詐尸還是另有隱情,我是刑警寧澤截酷,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布涮拗,位于F島的核電站,受9級(jí)特大地震影響迂苛,放射性物質(zhì)發(fā)生泄漏三热。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一三幻、第九天 我趴在偏房一處隱蔽的房頂上張望就漾。 院中可真熱鬧,春花似錦念搬、人聲如沸从藤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懊蒸,卻和暖如春荣倾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骑丸。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工舌仍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人通危。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓铸豁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菊碟。 傳聞我的和親對象是個(gè)殘疾皇子节芥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容