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

目录
相关文章
|
8月前
|
存储 缓存 监控
利用电商 API 接口,轻松完成多平台价格监控
在电商竞争中,价格策略至关重要。本文介绍如何利用电商平台API,构建自动化价格监控系统,实现多平台实时数据获取与智能调价,提升市场响应速度与销售转化率。
545 0
|
Python
OSError: cannot open resource
【9月更文挑战第20天】
1041 3
|
10月前
|
机器学习/深度学习 运维 算法
基于LSTM自编码器与KMeans聚类的时间序列无监督异常检测方法
本文提出的基于LSTM自编码器和KMeans聚类的组合方法,通过整合深度学习的序列建模能力与无监督聚类的模式分组优势,实现了对时间序列数据中异常模式的有效检测,且无需依赖标注的异常样本进行监督学习。
425 0
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
YOLOv5改进 | Conv篇 | 利用DualConv二次创新C3提出一种轻量化结构(降低参数30W)
892 1
|
机器学习/深度学习 自然语言处理 计算机视觉
【大模型】小样本学习的概念及其在微调 LLM 中的应用
【5月更文挑战第5天】【大模型】小样本学习的概念及其在微调 LLM 中的应用
|
存储 编解码 Python
Python GDAL基于经、纬度提取大量遥感影像中相同位置处像元的数值
【2月更文挑战第8天】本文介绍基于Python语言中的gdal模块,对2景不同的遥感影像加以对应位置像素值匹配的方法——即基于一景遥感影像的每一个像元,提取另一景遥感影像中,与之空间位置相同的像元的像素值的方法~
566 1
Python GDAL基于经、纬度提取大量遥感影像中相同位置处像元的数值
|
机器学习/深度学习 数据采集 搜索推荐
风险评分与生存时间:解密高风险组的潜在命运!
风险评分与生存时间:解密高风险组的潜在命运!
711 0
|
机器学习/深度学习 数据采集 运维
基于机器学习的用户实体行为分析技术在账号异常检测中的应用
伴随企业业务的不断扩增和电子化发展,企业自身数据和负载数据都开始暴增。然而,作为企业核心资产之一的内部数据,却面临着日益严峻的安全威胁。越来越多以周期长、频率低、隐蔽强为典型特征的非明显攻击绕过传统安全检测方法,对大量数据造成损毁。
|
人工智能 自然语言处理 搜索推荐