Как понять аргументы «data» и «subset» в пакете randomForest R? - PullRequest
0 голосов
/ 27 марта 2019

Аргументы

  • data: необязательный фрейм данных, содержащий переменные в модели.По умолчанию переменные берутся из среды, которую randomForestis вызывал из

  • subset: индексный вектор, указывающий, какие строки следует использовать.(ПРИМЕЧАНИЕ. Если указан, этот аргумент должен быть назван.)

Мои вопросы:

  1. Почему аргумент data является необязательным?Если data является необязательным, откуда поступают данные обучения?И что именно означает «По умолчанию переменные берутся из среды, из которой вызывается randomForestis»?

  2. Зачем нам нужен параметр subset?Допустим, у нас есть набор данных iris.Если я хочу использовать первые 100 строк в качестве набора обучающих данных, я просто выбираю training_data <- iris[1:100,].Зачем беспокоиться?В чем преимущество использования subset?

1 Ответ

2 голосов
/ 27 марта 2019
  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 позволяет использовать несколько более простые ссылки (cyl против mtcars$cyl), и его полезность усложняется, когда увеличивается число ссылочных переменных (т. Е. Для целей "code golf"). Но это также можно сделать с помощью других механизмов, таких как with, так что ... в основном это личные предпочтения.

Редактировать : как указывал Джоран, randomForest (и другие, но особенно не lm) можно вызывать с помощью любой формулы, как обычно используйте аргумент данных или указав аргументы предиктора / ответа отдельно с аргументами 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)
...