r - 如何理解 randomForest R 包中“数据”和“子集”的参数?
问题描述
论据
data
:包含模型中变量的可选数据框。默认情况下,变量取自 randomForestis 调用的环境subset
:指示应使用哪些行的索引向量。(注意:如果给定,这个参数必须命名。)
我的问题:
为什么
data
参数是“可选的”?如果data
是可选的,训练数据来自哪里?“默认情况下,变量取自 randomForestis 调用的环境”究竟是什么意思?为什么我们需要这个
subset
参数?假设我们有iris
数据集。如果我想使用前 100 行作为训练数据集,我只需选择training_data <- iris[1:100,]
. 何必?使用有什么好处subset
?
解决方案
这不是一种不常见的方法,当然也不是
randomForests
.mpg <- mtcars$mpg disp <- mtcars$disp lm(mpg~disp) # Call: # lm(formula = mpg ~ disp) # Coefficients: # (Intercept) disp # 29.59985 -0.04122
因此,当
lm
(在这种情况下)尝试解析公式中引用的变量时mpg~disp
,它会查看data
是否提供,然后在调用环境中查看。进一步的例子:rm(mpg,disp) mpg2 <- mtcars$mpg lm(mpg2~disp) # Error in eval(predvars, data, env) : object 'disp' not found lm(mpg2~disp, data=mtcars) # Call: # lm(formula = mpg2 ~ disp, data = mtcars) # Coefficients: # (Intercept) disp # 29.59985 -0.04122
(请注意
mpg2
不在 中mtcars
,因此这使用了两种方法来查找数据。我不使用此功能,而是更喜欢在调用中提供所有数据的弹性步骤;如果这样,不难想到可重现性受到影响的示例并非如此。类似地,许多类似的函数(包括
lm
)都允许这个subset=
参数,所以randomForests
包含它的事实是一致的。我相信这只是一个方便的论点,因为以下大致等价:lm(mpg~disp, data=mtcars, subset= cyl==4) lm(mpg~disp, data=mtcars[mtcars$cyl == 4,]) mt <- mtcars[ mtcars$cyl == 4, ] lm(mpg~disp, data=mt)
的使用
subset
允许稍微简单的引用(cyl
vsmtcars$cyl
),并且当引用变量的数量增加时(即,出于“代码高尔夫”的目的),它的实用性会更加复杂。但这也可以通过其他机制来完成,例如with
,所以……主要是个人喜好。
编辑:正如 joran 所指出的,randomForest
(和其他人,但值得注意的 lm
是)可以使用公式调用,这是您通常使用 data 参数的地方,或者通过单独指定预测器/响应参数和参数x
,y
如以下示例取自?randomForest
(忽略其他不一致的参数):
iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, proximity=TRUE)
iris.rrf <- randomForest(iris[-1], iris[[1]], ntree=101, proximity=TRUE, oob.prox=FALSE)
推荐阅读
- reactjs - React-Table,如何通过一个保存按钮保存完整的数据表
- javascript - 在 d3.js 中使用两级嵌套数据绘制图形符号
- scala - Scala 运行时编译:如何获取错误消息的行号?
- r - 根据 dplyr 中的条件查找组之间的差异
- spss - SPSS Merge 基于标签的输出表
- r - R - 具有两个 Y 轴的 ggplot
- r - 如何将线性回归的置信区间添加到具有多个组的图中
- python - 试图从一个城市的一系列可能温度中获得一个随机温度
- python - 我拥有的两个 Gmail 帐户之间从 Python SMTP 服务器发送的简单电子邮件被标记为垃圾邮件。我该如何解决?
- node.js - 带有健康检查的nestjs enableCors