r语言随机森林_随机森林应用实例4昆虫学上的应用(有代码)【分类问题和回归问题】...

实例:随机森林模型在分类与回归分析中的应用(昆虫学)

【来源文献:李欣海.随机森林模型在分类与回归分析中的应用[J].应用昆虫学报,2013,50(04):1190-1197.】

随机森林可以用于 分类和回归。当因变量 Y是分类变量时,是 分类; 当因变量 Y 是连续变量时,是 回归。自变量 X 可以是多个连续变量和多个分类变量的混合。在本文 3 个案例中, 判别分析和对有无数据的分析是分类问题, 对连续变量 Y的解释是回归问题。

1 背景

随机森林( random forest)模型是由Breiman和Cutler在2001年提出的一种基于分类树的算法。它通过对大量分类树的汇总提高了模型的预测精度,是取代神经网络等传统机器学习方法的新的模型。随机森林的运算速度很快,在处理大数据时表现优异。 随机森林不需要顾虑一般回归分析面临的多元共线性的问题,不用做变量选择。现有的随机森林软件包给出了所有变量的重要性。另外, 随机森林便于计算变量的非线性作用,而且可以体现变量间的交互作用( interaction)。 它对离群值也不敏感。 2 目的:本文通过3个案例,分别介绍了随机森林在昆虫种类的 判别分析、有无数据的分析(取代逻辑斯蒂回归) 和回归分析上的应用。案例的数据格式和R语言代码可为研究随机森林在分类与回归分析中的应用提供参考。 3 具体实例: 3.1 实例一:在判别分析中的应用 判别分析( discriminant analysis)是在因变量Y的几个分类水平明确的条件下,根据若干自变量判别每个观测值的类型归属问题的一种多变量统计分析方法。判别与分类在统计学概念上有所交叉,在本文中不强调两者的区别。案例 1 中有 3种昆虫( A、B 和 C) 形态接近,不过可以通过4个长度指标( L1、L2、L3 和 L4) 进行种类的识别。 具体数据格式如表 1:

e83bac2e9d28e98141a7308117abc89d.png

R代码实现:

①建模过程

8bff84b6d23bdc828daa8614c19f9d9e.png

②用新的数据进行检验

50c98b0958ed7d0e2065cc317aba050f.png

3.2 实例二:对有无数据的分析对于有或无、生或死、发生或不发生等二分变量的分析, 一般用逻辑斯蒂回归 (logisticregression) 的方法。 逻辑斯蒂回归实质上是对因变量Y作两个分类水平的判别。逻辑斯蒂回归对自变量的多元共线性非常敏感,要求自变量之间相互独立。随机森林则完全不需要这个前提条件。 Breiman 在2001年指出经典模型如逻辑斯蒂回归经常给出不可靠的结论,而随机森林准确而可靠。本实例以朱鹮为例,说明该方法的具体应用。朱鹮的巢址选择受环境变量的影响。 假设朱鹮选择一个地方营巢的概率取决于下列自变量:土地利用类型(森林、草地、灌丛或农田等)、海拔、坡度、温度、降水、人类干扰指数等。 该问题的因变量为朱鹮1981年2008年间的532个巢(有巢,Y=1), 以及在朱鹮巢区的系统选择的(等间距) 2538个点(无巢,Y=0)。

R代码实现:

①建模

f9527379ca4db63e0dc1100f0a9a6e2f.png

运行结果:

9037149122e9f134cdf1f91857df7768.png

②随机森林可以给出每个自变量对因变量的作用。下列R代码给出海拔对巢址选择的影响, 结果在图 2 中, 表示中等程度的海拔最适宜营巢。

99541a11ea493d2a7ac5cf6038d002f9.png

运行结果:

58a891ef090f0afa5a387cf32cae5fa4.png

③随机森林可以通过下列代码预测任何地点朱鹮营巢的概率(图3)

b3a338618353177910b1a5b1f923ec2e.png

运行结果:

0c5c82344fcf92f0c9e98a12d6b878bf.png

3.3 实例三:回归分析 当因变量Y为连续变量时,随机森林通过一组自变量X对Y进行解释,类似经典的回归分析。案例3依旧以朱鹮为例,介绍随机森林在回归分析上的应用。朱鹮是依赖湿地的鸟类,其生境可以分为一个个相邻的集水区。每个集水区内朱鹮的巢数同集水区的环境变量相关。用环境变量(包括连续变量和分类变量两个类型) 解释集水区内朱鹮的巢数,可以被看作为一个回归的问题。

R代码实现:

①导入数据

aa8ff0b79b1b756be41ad7ab4492e835.png

运行结果:

9b90e96c819e1ff696c313deb252ae11.png

②对于缺失数据,R语言的 randomForest 软件包通过na.roughfix函数用中位数(对于连续变量)或众数(对于分类变量)来进行替换。

da0fd73e98ba24ebe824547b64ab586f.png

运行结果:

d39c84a43bbd816f22c91c778036efca.png

mtry指定分类树每个节点用来二分数据的自变量的个数。如果mtry 没有被指定,随机森林用缺省值。对于分类(判别)分析(Y是分类变量),缺省值是自变量总数的平方根; 如果是回归分析(Y是连续变量),缺省值是自变量总数的1 /3。

4 总结

本文中随机森林的优点:随机森林结构比较复杂,然而它却极端易用,需要的假设条件(如变量的独立性、正态性等) 比逻辑斯蒂回归等模型要少得多;它也不需要检查变量的交互作用和非线性作用是否显著;使用者可以调节mtry的取值来检查模型的缺省值是否给出误差最小的结果;目前,人们已经对多种机器学习的模型进行了比较,随机森林经常独占鳌头;它包含估计缺失值的算法,如果有一部分的资料遗失,仍可以维持一定的准确度;随机森林中分类树的算法自然地包括了变量的交互作用;随机森林对离群值不敏感;随机森林通过袋外误差( out-of-bag error) 估计模型的误差,对于分类问题,误差是分类的错误率;对于回归问题,误差是残差的方差,所以随机森林不需要另外预留部分数据做交叉验证。 本文中随机森林的缺点是它的算法倾向于观测值较多的类别(如果昆虫B的记录较多,而且昆虫A、B和C间的差距不大,预测值会倾向于B,所以最好选数据时保证两类的平衡,可以利用过采样或欠采样方法平衡)。另外,随机森林中水平较多的分类属性的自变量(如土地利用类型>20个类别)比水平较少的分类属性的自变量(气候区类型<10 个类别)对模型的影响大。总之,随机森林功能强大而又简单易用,相信它会对各行各业的数据分析产生积极的推动作用。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 下面是一个使用R语言实现随机森林代码示例: ```R # 导入随机森林库 library(randomForest) # 构建因变量和自变量的公式 form_reg <- as.formula(paste0("medv ~ ", paste(colnames(traindata)\[1:13\], collapse = " + "))) # 训练模型 set.seed(42) fit_rf_reg <- randomForest(form_reg, data = traindata, ntree = 500, mtry = 6, importance = TRUE) # 输出模型概要 summary(fit_rf_reg) # 绘制错误率与决策树数量之间的关系图 plot(fit_rf_reg, main = "ERROR & TREES") # 输出变量重要性 importance(fit_rf_reg) # 绘制变量重要性图 varImpPlot(fit_rf_reg, main = "Variable Importance Plot") # 绘制偏依赖图 partialPlot(x = fit_rf_reg, pred.data = traindata, x.var = "crim") ``` 这段代码使用了randomForest库来构建随机森林模型。首先,我们通过将因变量和自变量组合成公式来定义模型。然后,使用randomForest函数训练模型,设置决策树的数量(ntree)、每个节点可供选择的变量数目(mtry)和输出变量重要性(importance)。接下来,我们可以通过summary函数查看模型的概要信息,通过plot函数绘制错误率与决策树数量之间的关系图,通过importance函数输出变量重要性,通过varImpPlot函数绘制变量重要性图,通过partialPlot函数绘制偏依赖图。以上是一个简单的随机森林代码示例,具体的实现可能会根据具体的数据和需求进行调整。 #### 引用[.reference_title] - *1* *2* [R语言实战应用精讲50篇(二十七)-R语言实现随机森林(附R语言代码)](https://blog.csdn.net/wenyusuran/article/details/122415114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [随机森林实例R语言实现)](https://blog.csdn.net/qq_51165184/article/details/123362161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值