R語言鐵達尼號隨機森林模型案例數據分析|附代碼數據

2023-03-28     tecdat拓端

原標題:R語言鐵達尼號隨機森林模型案例數據分析|附代碼數據

原文連結:http://tecdat.cn/?p=4281

最近我們被客戶要求撰寫關於隨機森林模型的研究報告,包括一些圖形和統計輸出。

如果我們對所有這些模型的結果進行平均,我們有時可以從它們的組合中找到比任何單個部分更好的模型。這就是集成模型的工作方式

讓我們構建一個由三個簡單決策樹組成的非常小的集合來說明:

這些樹中的每一個都根據不同的變量做出分類決策。

隨機森林模型比上面的決策樹更深地生長樹木,實際上默認是儘可能地將每棵樹生長出來。隨機森林以兩種方式做到這一點。

第一個技巧是使用套袋。Bagging會對您的訓練集中的行進行隨機抽樣。使用樣本函數很容易在R中進行模擬。假設我們想在10行的訓練集上進行裝袋。

> sample(1:10, replace = TRUE)

[1] 3 1 9 1 7 10 10 2 2 9

在此模擬中,如果再次運行此命令,則每次都會獲得不同的行樣本。平均而言,大約37%的行將被排除在自舉樣本之外。通過這些重複和省略的行,每個使用裝袋生長的決策樹將略有不同。

第二個隨機來源超越了這個限制。隨機森林不是查看整個可用變量池,而是僅採用它們的一部分,通常是可用數量的平方根。在我們的例子中,我們有10個變量,因此使用三個變量的子集是合理的。

通過這兩個隨機性來源,整體包含一系列完全獨特的樹木,這些樹木的分類都不同。與我們的簡單示例一樣,每個樹都被調用以對給定乘客進行分類,對投票進行統計(可能有數百或數千棵樹)並且選擇多數決策。

R的隨機森林算法對我們的決策樹沒有一些限制。我們必須清理數據集中的缺失值。rpart它有一個很大的優點,它可以在遇到一個NA值時使用替代變量。在我們的數據集中,缺少很多年齡值。如果我們的任何決策樹按年齡分割,那麼樹將搜索另一個以與年齡相似的方式分割的變量,並使用它們代替。隨機森林無法做到這一點,因此我們需要找到一種手動替換這些值的方法。

看一下合併後的數據框的年齡變量:

> summary(combi$Age)

Min. 1st Qu. Median Mean 3rd Qu. Max. NA's

0.17 21.00 28.00 29.88 39.00 80.00 263

1309個中有263個值丟失了,這個數字高達20%!此子集是否缺少值。我們現在也想使用method="anova"決策樹的版本,因為我們不是要再預測某個類別,而是連續變量。因此,讓我們使用可用的年齡值在數據子集上生成一個樹,然後替換缺少的那些樣本:

> combi$Age[is.na(combi$Age)] <- predict(Agefit, combi[is.na(combi$Age),])

您可以繼續檢查摘要,所有這些NA值都消失了。

現在讓我們看看整個數據集的摘要,看看是否還有其他我們以前沒有注意到的問題變量:

> summary(combi)

> summary(combi$Embarked)

C Q S

2 270 123 914

兩名乘客的空白。首先,我們需要找出他們是誰!我們可以which用於此:

> which(combi$Embarked == '')

[1] 62 830

然後我們簡單地替換這兩個,並將其編碼為一個因素:

> combi$Embarked <- factor(combi$Embarked)

另一個變量是Fare,讓我們來看看:

> summary(combi$Fare)

Min. 1st Qu. Median Mean 3rd Qu. Max. NA's

0.000 7.896 14.450 33.300 31.280 512.300 1

它只有一個乘客NA,所以讓我們找出它是哪一個並用中位數票價取而代之:

> which(is.na(combi$Fare))

[1] 1044

好的。我們的數據框現已被清理。現在進入第二個限制:R中的隨機森林只能消化多達32個等級的因子。我們的FamilyID變量幾乎翻了一倍。我們可以在這裡採用兩條路徑,或者將這些級別更改為它們的基礎整數(使用unclass()函數)並讓樹將它們視為連續變量,或者手動減少級別數以使其保持在閾值之下。

我們採取第二種方法。然後我們將它轉換回一個因素:

> combi$FamilyID2 <- combi$FamilyID

> combi$FamilyID2 <- factor(combi$FamilyID2)

我們已經降到了22級,所以我們很好地將測試和訓練集分開,安裝並加載包

randomForest:

> install.packages('randomForest')

設置隨機種子。

> set.seed(415)

內部數字並不重要,您只需確保每次使用相同的種子編號,以便在隨機森林函數內生成相同的隨機數。

現在我們準備運行我們的模型了。語法類似於決策樹。

> fit <- randomForest( )

我們強制模型通過暫時將目標變量更改為僅使用兩個級別的因子來預測我們的分類,而不是method="class"像使用那樣指定。

如果您正在使用更大的數據集,您可能希望減少樹的數量,至少在初始探索時,使用限制每個樹的複雜性nodesize以及減少採樣的行數sampsize

那麼讓我們來看看哪些變量很重要:

> varImpPlot(fit)

點擊標題查閱往期內容

PYTHON鏈家租房數據分析:嶺回歸、LASSO、隨機森林、XGBOOST、KERAS神經網絡、KMEANS聚類、地理可視化

左右滑動查看更多

01

02

03

04

我們的Title變量在這兩個指標中都處於領先地位。我們應該非常高興地看到剩下的工程變量也做得非常好。

預測函數與決策樹的工作方式類似,我們可以完全相同的方式構建提交文件。

> Prediction <- predict(fit, test)

> write.csv(submit, file = "firstforest.csv", row.names = FALSE)

讓我們嘗試一下條件推理樹的森林。

所以繼續安裝並加載party包。

> install.packages('party')

> library(party)

以與我們的隨機森林類似的方式構建模型:

> set.seed(415)

> fit <- cforest( )

條件推理樹能夠處理比Random Forests更多級別的因子。讓我們做另一個預測:

> Prediction <- predict(fit, test, OOB=TRUE, type = "response")

有問題歡迎下方留言!

點擊文末 「閱讀原文」

獲取全文完整代碼數據資料。

本文選自《R語言鐵達尼號隨機森林模型案例數據分析》。

點擊標題查閱往期內容

R語言貝葉斯廣義線性混合(多層次/水平/嵌套)模型GLMM、邏輯回歸分析教育留級影響因素數據

Python中的Lasso回歸之最小角算法LARS

高維數據懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網絡elastic net分析基因數據

Python高維變量選擇:SCAD平滑剪切絕對偏差懲罰、Lasso懲罰函數比較

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

R使用LASSO回歸預測股票收益

廣義線性模型glm泊松回歸的lasso、彈性網絡分類預測學生考試成績數據和交叉驗證

貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析免疫球蛋白、前列腺癌數據

R語言RSTAN MCMC:NUTS採樣算法用LASSO 構建貝葉斯線性回歸模型分析職業聲望數據

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

R語言高維數據懲罰回歸方法:主成分回歸PCR、嶺回歸、lasso、彈性網絡elastic net分析基因數據(含練習題)

Python中LARS和Lasso回歸之最小角算法Lars分析波士頓住房數據實例

R語言Bootstrap的嶺回歸和自適應LASSO回歸可視化

R語言Lasso回歸模型變量選擇和糖尿病發展預測模型R語言實現貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析

基於R語言實現LASSO回歸分析

R語言用LASSO,adaptive LASSO預測通貨膨脹時間序列

R語言自適應LASSO 多項式回歸、二元邏輯回歸和嶺回歸應用分析

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

Python中的Lasso回歸之最小角算法LARS

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現

R語言實現LASSO回歸——自己編寫LASSO回歸算法

R使用LASSO回歸預測股票收益

python使用LASSO回歸預測股票收益Python中LARS和Lasso回歸之最小角算法Lars分析波士頓住房數據實例

R語言Bootstrap的嶺回歸和自適應LASSO回歸可視化

R語言Lasso回歸模型變量選擇和糖尿病發展預測模型R語言實現貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析

基於R語言實現LASSO回歸分析

R語言用LASSO,adaptive LASSO預測通貨膨脹時間序列

R語言自適應LASSO 多項式回歸、二元邏輯回歸和嶺回歸應用分析

R語言懲罰logistic邏輯回歸(LASSO,嶺回歸)高維變量選擇的分類模型案例

Python中的Lasso回歸之最小角算法LARS

r語言中對LASSO回歸,Ridge嶺回歸和彈性網絡Elastic Net模型實現

r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現

R語言實現LASSO回歸——自己編寫LASSO回歸算法

R使用LASSO回歸預測股票收益

python使用LASSO回歸預測股票收益R語言隨機森林RandomForest、邏輯回歸Logisitc預測心臟病數據和可視化分析

數據分享|R語言邏輯回歸、線性判別分析LDA、GAM、MARS、KNN、QDA、決策樹、隨機森林、SVM分類葡萄酒交叉驗證ROC

MATLAB隨機森林優化貝葉斯預測分析汽車燃油經濟性

R語言用Rcpp加速Metropolis-Hastings抽樣估計貝葉斯邏輯回歸模型的參數

R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機森林算法預測心臟病

R語言中貝葉斯網絡(BN)、動態貝葉斯網絡、線性模型分析錯頜畸形數據

R語言中的block Gibbs吉布斯採樣貝葉斯多元線性回歸

Python貝葉斯回歸分析住房負擔能力數據集

R語言實現貝葉斯分位數回歸、lasso和自適應lasso貝葉斯分位數回歸分析

Python用PyMC3實現貝葉斯線性回歸模型

R語言用WinBUGS 軟體對學術能力測驗建立層次(分層)貝葉斯模型

R語言Gibbs抽樣的貝葉斯簡單線性回歸仿真分析

R語言和STAN,JAGS:用RSTAN,RJAG建立貝葉斯多元線性回歸預測選舉數據

R語言基於copula的貝葉斯分層混合模型的診斷準確性研究

R語言貝葉斯線性回歸和多元線性回歸構建工資預測模型

R語言貝葉斯推斷與MCMC:實現Metropolis-Hastings 採樣算法示例

R語言stan進行基於貝葉斯推斷的回歸模型

R語言中RStan貝葉斯層次模型分析示例

R語言使用Metropolis-Hastings採樣算法自適應貝葉斯估計與可視化

R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型

WinBUGS對多元隨機波動率模型:貝葉斯估計與模型比較

R語言實現MCMC中的Metropolis–Hastings算法與吉布斯採樣

R語言貝葉斯推斷與MCMC:實現Metropolis-Hastings 採樣算法示例

R語言使用Metropolis-Hastings採樣算法自適應貝葉斯估計與可視化

視頻:R語言中的Stan機率編程MCMC採樣的貝葉斯模型

R語言MCMC:Metropolis-Hastings採樣用於回歸的貝葉斯估計R語言用lme4多層次(混合效應)廣義線性模型(GLM),邏輯回歸分析教育留級調查數據

R語言隨機森林RandomForest、邏輯回歸Logisitc預測心臟病數據和可視化分析

R語言基於Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者

R語言用主成分PCA、 邏輯回歸、決策樹、隨機森林分析心臟病數據並高維可視化

文章來源: https://twgreatdaily.com/zh-hk/d09ee2bda77f60e9ae161ee119eb0be2.html