R數據分析:集成學習方法之隨機生存森林的原理和做法,實例解析

很久很久以前給大家寫過決策樹,非常簡單明了的算法。今天給大家寫隨機(生存)森林,隨機森林是集成了很多個決策數的集成模型。像隨機森林這樣將很多個基本學習器集合起來形成一個更加強大的學習器的這么一種集成思想還是非常好的。所以今天來寫寫這類算法。

集成學習方法

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.

所謂的集成學習方法,就是把很多的比較簡單的學習算法統起來用,比如光看一個決策樹,好像效果比較單調,還比較容易過擬合,我就訓練好多樹,把這些樹的結果綜合一下,結果應該會好很多,用這么樣思路形成的算法就是集成學習算法Ensemble methods,就是利用很多個基礎學習器形成一個綜合學習器。

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

集成學習方法最有名的就是bagging 和boosting?方法:

The most well-known ensemble methods are bagging, also known as bootstrap aggregation, and boosting

BAGGing

BAGGing, or?Bootstrap?AGGregating這個方法把自助抽樣和結果合并整合在一起,包括兩個步驟,一個就是自助抽樣,抽很多個數據集出來,每個數據集來訓練一個模型,這樣就可以有很多個模型了;第二步就是將這么多模型的結果合并出來最終結果,這個最終結果相對于單個模型結果就會更加穩健。

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.

隨機森林就可以看作是遵循了bagging方法的一個思路,只不過在每一個抽樣樣本中的樹(模型)是不一樣的:

Boosting:

Boosting為強化學習,最大的特點是可以將原來的弱模型變強,邏輯在于算法會先后訓練很多模型,后面訓練模型的時候會不斷地給原來模型表現不好的樣本增大權重,使得后面的模型越來越將學習重點放在之前模型表現差的樣本上,這么一來,整體模型越來越強。就像人會從之前的錯誤中反省經驗一個意思了。

這么一描述大家就知道,boosting方法的模型訓練是有先后順序的,并行算法就用不了了

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),下圖感興趣的同學可以看看:

上面的算法之后再給大家寫,接下來的實操部分還是以隨機森林為例子給大家具體介紹:

隨機森林

隨機森林模型的擬合過程大概可以分為三步:

1.通過有放回的自助抽樣形成ntree個抽樣樣本集(Bootstrap)

2.對每個抽樣樣本集形成一個決策樹,這個樹是基于mtry個預測因子的

3.將最終的模型結果就是ntree個抽樣樣本集得出的結果的最大票數或者均值(AGGregating)

隨機森林的整個的流程就如下圖:

為了方便理解“最終的模型結果就是ntree個抽樣樣本集得出的結果的最大票數或者均值”我們用例子做個解釋,先看下圖:

我們有一個水果集,然后我訓練一個3棵樹組成的隨機森林來判斷每一個水果到底是何種類,有兩棵樹都告訴我是某一個水果是蘋果,一棵樹告訴我是香蕉,那么最后我們隨機森林就會輸出該水果是香蕉的結論。

上面的過程有幾個超參需要確定

  • mtry: Number of variables randomly sampled as candidates at each split.
  • ntree: Number of trees to grow.

mtry一般需要調參,ntree都是越大越好自己設定就行。在上面的過程中我們每棵樹的節點都是不同的,叫做特征隨機化,通過特征隨機化我們保證了森林中樹的多樣性,隨機森林模型也更加穩健。

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

隨機森林實操

比如我現在有一個數據集,結局變量是class為二分類,我要適用隨機森林算法就可以寫出如下代碼:

rf_default <- train(Class~., data=dataset, method='rf', tuneLength  = 15, trControl=control)
print(rf_default)

輸出的結果中有隨機調參的過程,共15次,最終發現超參mtry=3的時候模型最優,具體如下:

以上的隨機森林模型的簡單展示,接著我們再看隨機生存森林。

隨機生存森林

和隨機森林一樣,隨機生存森林也是一個集成學習方法,區別在于其結局為生存資料。

示例文章

依然我們來看一篇發表在Cancer Med.上的文章,名字如下:

Prognostic risk factor of major salivary gland carcinomas and survival prediction model based on random survival forests

作者用cox進行了變量篩選,使用隨機生存森林進行了預測模型構建,并得到了相應的風險分,明確了風險分的最佳截斷值(“maxstat” R package),對于模型的表現作者使用了c指數和time-dependent ROC來評估,文章中主要的結果報告如下,包括:

樹的數量和模型誤差情況,以及變量重要性的結果:

time-dependent ROC曲線結果展示和相應的AUC值:

風險分界址點確定:

高低風險組的組間生存曲線比較:

也是一篇預測模型類文章的常規套路了。挑一個算法,擬合模型后評估,做個風險分,應用風險分劃分病人證明模型可用性。我們以這篇文章為例子看隨機生存森林預測模型的實操。

隨機生存森林實例操作

我現在的數據中ttodead,died兩個變量分別是時間和生存狀態,此時我想做一個隨機生存森林模型就可以寫出如下代碼:

RF_obj <- rfsrc(Surv(ttodead,died)~., dataSet, ntree = 1000,  membership = TRUE, importance=TRUE)

對代碼運行后生成的對象RF_obj進行plot即可出圖如下,就得到了原文中的figure2:

然后我們可以畫出模型的不同時間點的timeRoc曲線(下面代碼中的risk_score為隨機生存森林對象的預測值),就得到了原文中的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")

并且將模型預測值的截斷值找出來,驗證模型在不同風險組的區分能力。其中找風險分截斷值的代碼如下:

y.pred <- predict(RF_obj)[["predicted"]]
plot(surv_cutpoint(dataSet, time = "ttodead", event = "died",variables = c("y.pred")), "y.pred", palette = "npg")

運行后得到下圖(原文中的figure5),就說明我們這個模型的風險分截斷值應該為43.21:

然后根據這個風險分我們就可以將原始人群分為高風險組和低風險組,再做出組間km曲線,到這兒相當于Cancer Med的這篇用隨機生存森林的文章就完全復現出來了

以上是給大家介紹的隨機生存森林的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164516.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法面試題:反轉一個整數

題目&#xff1a;反轉一個整數。例如&#xff0c;輸入123&#xff0c;輸出321&#xff1b;輸入-456&#xff0c;輸出-654。注意&#xff1a;反轉后的整數在32位帶符號整數范圍內。 編寫一個函數 reverseInteger(x: int) -> int 來實現這個功能。 答案&#xff1a; def re…

【前端】必學知識ES6 1小時學會

1.ES6概述 2.let和const的認識 3.let、const、var的區別 4.模板字符串 5.函數默認參數 6.箭頭函數【重點】 ?編輯7.對象初始化簡寫以及案例分析 【重點】 8.對象解構 8.對象傳播操作符 9.對象傳播操作符案例分析 ?編輯 10.數組Map 11.數組Reduce 12.NodeJS小結 …

代碼隨想錄算法訓練營第四十四天【動態規劃part06】 | 完全背包、518. 零錢兌換 II、377. 組合總和 Ⅳ

完全背包 有N件物品和一個最多能背重量為W的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品都有無限個&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解將哪些物品裝入背包里物品價值總和最大。 題目鏈接&#xff1a; 題目頁…

計算機畢業設計 基于Hadoop的物品租賃系統的設計與實現 Java實戰項目 附源碼+文檔+視頻講解

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精…

YOLO目標檢測——泄露檢測數據集下載分享【含對應voc、coco和yolo三種格式標簽】

實際項目應用&#xff1a;泄露檢測數據集說明&#xff1a;泄露檢測數據集&#xff0c;真實場景的高質量圖片數據&#xff0c;數據場景豐富&#xff0c;含多個類別標簽說明&#xff1a;使用lableimg標注軟件標注&#xff0c;標注框質量高&#xff0c;含voc(xml)、coco(json)和yo…

AES 加解密

AES 加解密 AES(Advanced Encryption Standard),又稱高級加密標準,是一種對稱加密算法,也是目前廣泛使用的加密技術之一。其主要特點是加密速度快、安全性高、可擴展性好等。 AES 算法采用對稱加密的方式,即加密和解密使用相同的密鑰進行操作。密鑰長度可以是 128、192…

【JavaSE】不允許你不會使用String類

&#x1f3a5; 個人主頁&#xff1a;深魚~&#x1f525;收錄專欄&#xff1a;JavaSE&#x1f304;歡迎 &#x1f44d;點贊?評論?收藏 目錄 前言&#xff1a; 一、常用方法 1.1 字符串構造 1.2 String對象的比較 &#xff08;1&#xff09;比較是否引用同一個對象 注意…

從零開始的C++(十九)

紅黑樹&#xff1a; 一種接近平衡的二叉樹&#xff0c;平衡程度低于搜索二叉樹。 特點&#xff1a; 1.根節點為黑 2.黑色結點的子結點可以是紅色結點或黑色結點。 3.紅色結點的子結點只能是黑色結點。 4.每個結點到其所有葉子結點的路徑的黑色結點個數相同。 5.指向空的…

OmniGraffle

安裝 在mac上安裝OmniGraffle&#xff0c;找一個正版或者啥的都行&#xff0c;安裝好后&#xff0c;可以直接在網上找一個激活碼&#xff0c;然后找到軟件的許可證&#xff0c;進行添加即可。 使用 新建空白頁 然后圖形啥的看一眼工具欄就知道了&#xff0c;顏色形狀還是挺…

音視頻項目—基于FFmpeg和SDL的音視頻播放器解析(二十一)

介紹 在本系列&#xff0c;我打算花大篇幅講解我的 gitee 項目音視頻播放器&#xff0c;在這個項目&#xff0c;您可以學到音視頻解封裝&#xff0c;解碼&#xff0c;SDL渲染相關的知識。您對源代碼感興趣的話&#xff0c;請查看基于FFmpeg和SDL的音視頻播放器 如果您不理解本…

【C++】拷貝構造函數,析構函數詳解!

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

【LeetCode】挑戰100天 Day13(熱題+面試經典150題)

【LeetCode】挑戰100天 Day13&#xff08;熱題面試經典150題&#xff09; 一、LeetCode介紹二、LeetCode 熱題 HOT 100-152.1 題目2.2 題解 三、面試經典 150 題-153.1 題目3.2 題解 一、LeetCode介紹 LeetCode是一個在線編程網站&#xff0c;提供各種算法和數據結構的題目&…

Vue3 實現elementPlus的table列寬調整和拖拽

1、需要的包 // 除了Vue和element-plus外還需要以下的包 npm install sortablejs2、具體代碼如下&#xff0c;可直接粘貼運行 <template><div class"draggable-table"><el-table ref"tableRef":data"tableData.data":key"…

Java-飛翔的小鳥

前言 基于Java的飛翔小鳥游戲&#xff0c;本代碼來自b站up主分享。本游戲所需的圖片素材需要自己獲取并下載&#xff0c;在此視頻下&#xff0c;視頻鏈接&#xff1a;【Java經典小游戲項目之飛翔的小鳥】 https://www.bilibili.com/video/BV1ou411o7br/?p10&share_source…

C#編程題分享(4)

換行輸出整數問題 輸?任意?個位數未知的整數&#xff0c;輸出這個數每?位上的數字。輸出的時候&#xff0c;從個位開始輸出&#xff0c;每輸出?個數字換??。樣例輸?&#xff1a;3547 輸出&#xff1a;7 換行輸出 4 換行輸出5 換行輸出3 int n Convert.ToInt32(Conso…

【python基礎(九)】文件和異常詳解:使用、讀取、寫入、追加、保存用戶的信息,以及優雅的處理異常

文章目錄 一. 從文件中讀取數據1. 讀取整個文件2. 文件路徑3. 逐行讀取4. 創建一個包含文件各行內容的列表 二. 寫入文件1. 寫入空文件2. 寫入多行3. 附加到文件 三. 異常1. 處理ZeroDivisionError異常2. 使用try-except代碼塊3. try-except-else ing4. 處理FileNotFoundError異…

如何在AD上創建完整的項目

首先&#xff0c;我們先安裝好AD&#xff0c;這里我使用的是AD22&#xff0c;安裝過程如下&#xff1a; Altium Designer 22下載安裝教程-CSDN博客 Altium Designer 22是全球領先的PCB設計軟件之一&#xff0c;為電路板設計師提供了一種集成的解決方案&#xff0c;旨在簡化和加…

探討工業元宇宙和數字孿生的關系

就在各類技術專家還在試圖設想元宇宙虛擬世界將為企業和消費者帶來什么時&#xff0c;工業元宇宙虛擬世界已經在改變人們設計、制造以及與各行業物理實體互動的方式。盡管元宇宙的定義比比皆是&#xff0c;工業元宇宙將如何發展還有待觀察&#xff0c;但數字孿生越來越多地被視…

shell(函數和數組)

目錄 一、函數 1.函數的由來 2.函數的作用 3.函數的使用方法 4.函數的定義 5.查看函數 6.刪除函數 7.函數返回值 8.函數的傳參數 9.函數遞歸 二、數組 1.數組的相關介紹 2.聲明數組 3.定義數組的格式 4.冒泡排序 總結&#xff1a;本章主要介紹了函數和數組相關知…

運維 在Windows上搭建小型Git服務

文章目錄 1、Git選型1.1、主要特性1.2、代碼管理1.3、工單管理1.4、Pull/Merge requests1.5、第三方集成1.6、選型結論 2、環境搭建2.1、Gitea下載2.2、Gitea安裝2.3、配置服務信息2.4、運行服務2.5、注冊Gitea為服務2.6、正常使用 1、Git選型 1.1、主要特性 1.2、代碼管理 1.…