首页 > 解决方案 > 如何理解 randomForest R 包中“数据”和“子集”的参数?

问题描述

论据

我的问题:

  1. 为什么data参数是“可选的”?如果data是可选的,训练数据来自哪里?“默认情况下,变量取自 randomForestis 调用的环境”究竟是什么意思?

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

标签: rrandom-forest

解决方案


  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允许稍微简单的引用(cylvs mtcars$cyl),并且当引用变量的数量增加时(即,出于“代码高尔夫”的目的),它的实用性会更加复杂。但这也可以通过其他机制来完成,例如with,所以……主要是个人喜好。

编辑:正如 joran 所指出的,randomForest(和其他人,但值得注意 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)

推荐阅读