如何理解randomForest R包中“数据”和“子集”的参数?

时间:2019-03-27 16:02:13

标签: r random-forest

参数

  • data:包含模型中变量的可选数据框。默认情况下,变量取自randomForestis从

  • 调用的环境
  • subset:一个索引向量,指示应使用哪些行。 (注意:如果给定,则必须命名此参数。)

我的问题:

  1. data参数为什么是“可选”的?如果data是可选的,那么训练数据来自哪里? “默认情况下,变量是从randomForestis调用的环境中获取的”的确切含义是什么?

  2. 为什么我们需要subset参数?假设我们有iris数据集。如果我想将前100行用作训练数据集,则只需选择training_data <- iris[1:100,]。何必?使用subset有什么好处?

1 个答案:

答案 0 :(得分:2)

  1. 这不是一种不常见的方法,当然不是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中,因此这两种方法都使用了查找数据的方法。我不使用此功能,而是选择在呼叫中提供所有数据的弹性步骤;如果不是这种情况,不难想像其中再现性受到损害的示例。

  2. 类似地,许多类似的函数(包括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可以使引用稍微简单些(cylmtcars$cyl),并且当引用变量的数量增加时(例如,出于“代码高尔夫”目的)它的效用会增加)。但这也可以通过其他机制来完成,例如with,所以...主要是个人喜好。

编辑:正如joran所指出的,randomForest(以及其他,但 not lm也可以用任一公式调用,是您通常使用data参数的位置,或者通过分别与参数xy一起指定预测变量/响应参数的位置,如以下取自?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)