在前一篇文章中,我们介绍了随机森林,本文我们将着重介绍其R语言的实现。

使用randomForest包中的randomForest函数

数据简介

本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

数据下载戳我

因变量:等级

自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

library(openxlsx)
wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx")
#将数据集分为训练集和测试集,比例为7:3
train_sub = sample(nrow(wine),7/10*nrow(wine))
train_data = wine[train_sub,]
test_data = wine[-train_sub,]

随机森林的实现

R包下载

install.packages('randomForest')

实现随机森林

randomForest函数的重要参数:

参数 意义
formula yyy~x1+12+...+xnx_1+1_2+...+x_nx1​+12​+...+xn​,确定自变量和因变量
data 使用的数据集
ntree 在森林中树的个数,默认是500
mtry 每棵树使用的特征个数
importance 是否计算变量的特征重要性,默认为False
proximity 是否计算各个观测之间的相似性

randomForest函数的参数非常多,这里只列举了几个常用以及会对模型结果造成影响的参数。其全部参数请参考:随机森林参数

library(pROC) #绘制ROC曲线
library(randomForest)
#数据预处理
train_data$等级 = as.factor(train_data$等级)
test_data$等级 = as.factor(test_data$等级)
wine_randomforest <- randomForest(等级 ~  非挥发性酸性+挥发性酸性+柠檬酸+剩余糖分+氯化物+游离二氧化硫+二氧化硫总量+浓度+pH+硫酸盐+酒精,data = train_data,ntree =500,mtry=3,importance=TRUE ,proximity=TRUE)

这样我们就实现了随机森林算法

查看变量的重要性

#查看变量的重要性
wine_randomforest$importance

解释: 在随机森林中变量的重要性计算时通过将相应变量替换成一列随机的数后,计算模型准确率或者GINI系数的降低。上图的意思是:0:表示变量替换后对分类为0的数据的影响;1:表示表示变量替换后对分类为0的数据的影响;MeanDecreaseAccuracy:表示变量替换后准确率的下降;MeanDecreaseGini:表示变量替换后GINI系数的降低。数值越大表示变量越重要。

对于变量重要性的判断,也可以通过画图的方式直观显现:

varImpPlot(wine_randomforest, main = "variable importance")

ROC曲线和AUC值

#对测试集进行预测
pre_ran <- predict(wine_randomforest,newdata=test_data)
#将真实值和预测值整合到一起
obs_p_ran = data.frame(prob=pre_ran,obs=test_data$等级)
#输出混淆矩阵
table(test_data$等级,pre_ran,dnn=c("真实值","预测值"))
#绘制ROC曲线
ran_roc <- roc(test_data$等级,as.numeric(pre_ran))
plot(ran_roc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),grid.col=c("green", "red"), max.auc.polygon=TRUE,auc.polygon.col="skyblue", print.thres=TRUE,main='随机森林模型ROC曲线,mtry=3,ntree=500')

1.当mtry=3,ntree=500时: AUC = 0.811
2.当mtry=7,ntree=500时: AUC = 0.814
3.当mtry=3,ntree=1000时: AUC = 0.809


由此可见,mtry和ntree两个参数会影响模型的结果,但是其影响程度都不是很高。而且,由于行列的随机性,并不是说mtry越大(一棵CART树选择的特征越多)效果就越好,ntree越大(森林中的树越多)效果就越好。

R语言:随机森林的实现——randomForest相关推荐

  1. R语言随机森林回归(randomforest)模型构建

    R语言随机森林回归(randomforest)模型构建 目录 R语言随机森林回归(randomforest)模型构建

  2. R语言随机森林模型回归randomForest

    基于<The influence of the neighbourhood environment on peer-to-peer accommodations: A random forest ...

  3. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)

    R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度.使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异) 目录

  4. r语言随机森林_随机森林+时间序列(R语言版)

    参考自: https://www.statworx.com/at/blog/time-series-forecasting-with-random-forest/ https://www.r-blog ...

  5. r语言随机森林回归预测_从零实现回归随机森林

    一.前言 回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的.为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理 ...

  6. R语言随机森林报错The response has five or fewer unique values. Are you sure you want to do regression原因及解决办法

    问题描述 在使用随机森林算法建模时,R报错/警告如下: The response has five or fewer unique values. Are you sure you want to d ...

  7. 使用R构建随机森林回归模型(Random Forest Regressor)

    使用R构建随机森林回归模型(Random Forest Regressor) 目录 使用R构建随机森林回归模型(Random Forest Regressor) 安装包randomForest 缺失值 ...

  8. R语言画森林图方法4

    获取更多R语言知识,请关注公众号:医学和生信笔记 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化.主要分享R语言做医学统计学.meta分析.网络药理学.临床预测模型.机器学习.生 ...

  9. Logit Beta分布及其R语言随机模拟算法

    Logit Beta分布及其R语言随机模拟算法 Logit Beta分布 Logit Beta分布的采样算法 Logit Beta分布是一个在广义线性模型中时常遇到的分布,通常是作为模型算法的一个中间 ...

最新文章

  1. R语言dplyr包使用recode函数进行数据列内容编码、转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值)
  2. 为什么servlet-nameaction/servlet-name要这么写
  3. 一脸懵逼学习Hive的元数据库Mysql方式安装配置
  4. mysql事务实战_MySQL - 实战 (2) - 事务隔离
  5. 北斗导航 | PPP-RTK技术研究进展与试验验证(第十一届中国卫星导航年会报告)
  6. datetime类型怎么输入_数据库之mysql的基础类型
  7. [Ext JS 4] 实战之Grid, Tree Gird 动态添加行
  8. [C++面试题]之冒泡排序
  9. oracle授权with,Oracle With 语句语法及示例
  10. 普元EOS开发积累第二篇(常见错误解决方法) 持续更新
  11. 计算机表格用计算公式百分百,计算机表格怎么算所占比例 - 卡饭网
  12. gird布局之容器属性justify-items与align-items
  13. 纯C语言写计算器界面
  14. Elasticsearch exception [type=action_request_validation_exception, reason=Validation Failed:
  15. 内容权限判断帝国cms教程
  16. C# GDAL 数字图像处理Part10 自动配准/半自动配准
  17. idea最新Activation code
  18. 趣文|老舍:好读书,不求甚解
  19. 敏捷宣言及原则(中英对照)
  20. odoo13搭建医院HRP环境(详细步骤---单节点)

热门文章

  1. 为什么电子计算机奏出美妙的交响,近义词反义词).doc
  2. 网络硬盘录像机NVR的接入、解码、转发能力解析
  3. 使用java实现基础的家庭记账程序
  4. echarts——实现2D地图+各省份数据展示——技能提升
  5. hp8080计算机无法usb启动,求助啊,Hp怎么设置启用USB为第一启动项
  6. electron + vue中使用 el-table 死活不显示的问题
  7. B 站崩了 尴尬的却是A站
  8. Data Leakage
  9. 景德镇市MedAccred _AC8121电子电缆和线束组件的审核标准 (46)
  10. 5645. 找到最高海拔