参数
data
:包含模型中变量的可选数据框。默认情况下,变量取自randomForestis从
subset
:一个索引向量,指示应使用哪些行。 (注意:如果给定,则必须命名此参数。)
我的问题:
data
参数为什么是“可选”的?如果data
是可选的,那么训练数据来自哪里? “默认情况下,变量是从randomForestis调用的环境中获取的”的确切含义是什么?
为什么我们需要subset
参数?假设我们有iris
数据集。如果我想将前100行用作训练数据集,则只需选择training_data <- iris[1:100,]
。何必?使用subset
有什么好处?
答案 0 :(得分:2)
这不是一种不常见的方法,当然不是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
与mtcars$cyl
),并且当引用变量的数量增加时(例如,出于“代码高尔夫”目的)它的效用会增加)。但这也可以通过其他机制来完成,例如with
,所以...主要是个人喜好。
编辑:正如joran所指出的,randomForest
(以及其他,但 not 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)