R-建模 randomForest

简介: 本分分享了R语言中 `randomForest` 函数的用法,以供参考

随机森林(Random Forest)是一种基于 决策树 的集成学习算法,它通过构建多个决策树,并将它们组合起来进行分类或回归。随机森林的基本思想是,通过随机选择样本和特征,构建多个决策树,然后将它们的结果进行投票或平均,得到最终的分类或回归结果。广泛应用用于分类、回归、特征选择等多个领域。

随机森林的构建过程:

  • 随机选择样本:从原始数据集中随机选择一部分样本,用于构建决策树。
  • 随机选择特征:从所有特征中随机选择一部分特征,用于构建决策树。
  • 构建决策树:使用随机选择的样本和特征,构建一棵决策树。
  • 重复步骤1-3,构建多棵决策树。
  • 投票或平均:将多棵决策树的结果进行投票或平均,得到最终的分类或回归结果。

随机森林的特点:

  • 随机性:随机森林中的每个决策树都是基于随机样本和随机特征进行构建的,这种随机性可以减少过拟合的风险,提高模型的泛化能力。
  • 集成性:随机森林将多个决策树组合起来进行分类或回归,可以减少单个决策树的误差,提高模型的准确性。
  • 可扩展性:随机森林可以处理大量的特征和样本,适用于各种规模的数据集。

随机森林的优点:

  • 随机森林可以处理高维数据,一般数据工程可以不需要进行特征选择。
  • 随机森林可以 评估特征的重要性,帮助进行特征选择。
  • 随机森林可以并行计算,加快模型训练的速度。
#### 构建随机森林分类模型
library(randomForest);library(caret);library(dplyr);library(pROC)

### Train/Test Split
dat <- MASS::fgl %>% mutate(type = as.factor(type))
sample_init <- caret::createDataPartition(dat$type,p = .75,list = F)
dat.train <- dat[ sample_init,]
dat.tests <- dat[-sample_init,]

#### Build Formular 
cur_formular <- as.formula(paste0("type~",paste0(colnames(dat)[2:9],collapse = "+")))

#### Build model 
bestmtry <- tuneRF(x = dat.train,y = dat.train$type,plot = F,trace = T) ### 基于OOB(Out-of-Bag)误差来评估随机森林的泛化能力   
RF_model <- randomForest(cur_formular,data= dat.train,mtry=6,nodesize = 6,ntree = 1000,importance= T) ### mtry控制每次分裂节点的选择范围,nodesize = 最小叶子节点大小(控制树的深度),ntree决策树数量

### 模型分析
plot(RF_model) ### 模型(类别)误差与决策树数量的关系,输出的是数据框 RF_model$err.rate(袋外误差率) 的结果,。在实际应用中,还需要考虑其他指标,如准确率、召回率、F1值等。

#####  MeanDecreaseAccuracy,衡量一个变量在多大程度上提高了森林预测分类的准确性,较高的值意味着该变量改进了预测。
#####  MeanDecreaseGini,    衡量一个变量在多大程度上影响生成的随机森林中节点和叶子的同质性的指标,较高的值意味着该变量改进了预测。
RF_model[["importance"]] ### 返回特征重要性评估数据框,行为特征名,列为响应变量和MeanDecreaseAccuracy/MeanDecreaseGini
varImpPlot(RF_model) ### MeanDecreaseAccuracy和 MeanDecreaseGini 两指标的散点图
partialPlot(RF_model,pred.data = dat.train,x.var = "Mg",which.class = "WinF") ### 偏相关图,展示选定变量对相应变量类型的分类贡献

### 训练集预测
###### 调整分类概率截断点:
train_prob <- predict(RF_model,newdata = dat.train,type = "prob") %>% data.frame()
train_response <- predict(RF_model,newdata = dat.train,type = "response")
#### 计算多分类AUC,该方法不输出 ROC 曲线
multi.train_roc <- pROC::multiclass.roc(response = dat.train[["type"]], predictor = train_prob) ### 计算多分类AUC,该方法不输出 ROC 曲线
# plot.roc(multi.train_roc[["rocs"]][[1]])
# sapply(2:length(multi.train_roc[["rocs"]]),function(i) lines.roc(multi.train_roc[["rocs"]][[i]],col=i))
confusionMatrix(data = train_response,reference = dat.train$type,mode = 'everything') ### 设置mode = “everything”才有F1指标,统计了模型的总体准确率,kappa一致度等指标

### 测试集预测...
test_response <- predict(RF_model,newdata = dat.tests,type = "response")
caret::confusionMatrix(data = test_response,reference = dat.tests$type,mode = 'everything')


Reference

Random forest regression in R - Projectpro
GitHub - WandeRum/multiROC: Calculating and Visualizing ROC and PR Curves Across Multi-Class Classifications
r - plot.roc for multiclass.roc in pROC package? - Stack Overflow
How to Calculate F1 Score in R (Including Example) - Statology

目录
相关文章
|
10月前
|
TensorFlow 算法框架/工具 Python
【Tensorflow 2】解决'Tensor' object has no attribute 'numpy'
解决'Tensor' object has no attribute 'numpy'
207 3
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习之分子生成
基于深度学习的分子生成是一项结合化学、计算科学与人工智能的新兴领域,旨在利用深度学习模型来生成具有特定性质的分子结构。
182 3
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
560 1
|
数据挖掘
ggGenshin&Genshinpalette|SCI绘图遇上原神,不输于CNS正刊调色板
本文介绍了两个R包——`ggGenshin`和`Genshinpalette`,它们提供了基于热门游戏《原神》角色的配色方案,用于提升数据分析图表的视觉吸引力。`ggGenshin`安装后可通过角色名字调用配色,展示了一个生成条形图的例子。`Genshinpalette`则提供了更多角色的色彩选项,并在`diamonds`数据集上展示了应用。这两个包为R用户提供了现成的、具有游戏特色的调色板,可用于创建更吸引人的图表。
656 0
|
人工智能
跟着 Nature Communication 学作图 | 热图+格子注释(通路富集相关)
跟着 Nature Communication 学作图 | 热图+格子注释(通路富集相关)
417 0
|
编译器 Python
Python 3安装GDAL库总结
Python 3安装GDAL库总结
1049 0
Python 3安装GDAL库总结
|
机器学习/深度学习 数据采集 算法
基于随机森林实现特征选择降维及回归预测(Matlab代码实现)
基于随机森林实现特征选择降维及回归预测(Matlab代码实现)
535 0
|
机器学习/深度学习 算法 前端开发
结合Sklearn的网格和随机搜索进行自动超参数调优
结合Sklearn的网格和随机搜索进行自动超参数调优
459 0
结合Sklearn的网格和随机搜索进行自动超参数调优
|
存储 前端开发 JavaScript
人人都是前端架构师:我来带你阅读 React18 源码!
人人都是前端架构师:我来带你阅读 React18 源码!
598 0
|
测试技术 Linux 虚拟化
Docker与虚拟机的区别
概要 Docker是近年来新兴的虚拟化工具,它可以和虚拟机一样实现资源和系统环境的隔离。本文将主要根据IBM发表的研究报告,论述docker与传统虚拟化方式的不同之处,并比较物理机、docker容器、虚拟机三者的性能差异及差异产生的原理。
2488 1