#r #random-forest
#r #случайный лес
Вопрос:
Аргументы
-
data
: необязательный фрейм данных, содержащий переменные в модели. По умолчанию переменные берутся из среды, из которой вызывается randomForestis -
subset
: вектор индекса, указывающий, какие строки следует использовать. (ПРИМЕЧАНИЕ: Если задан, этот аргумент должен быть назван.)
Мои вопросы:
-
Почему
data
аргумент «необязательный»? Еслиdata
это необязательно, откуда берутся обучающие данные? И что именно означает «По умолчанию переменные берутся из среды, из которой вызывается randomForestis»? -
Зачем нам нужен
subset
параметр? Допустим, у нас естьiris
набор данных. Если я хочу использовать первые 100 строк в качестве обучающего набора данных, я просто выбираюtraining_data <- iris[1:100,]
. Зачем беспокоиться? В чем преимущество использованияsubset
?
Ответ №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
, поэтому для поиска данных использовались оба метода. Я не использую эту функциональность, предпочитая отказоустойчивый этап предоставления всех данных в вызове; нетрудно придумать примеры, когда воспроизводимость страдает, если это не так. -
Аналогичным образом, многие похожие функции (включая
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
) могут быть вызваны либо с помощью формулы, в которой вы обычно используете аргумент data, либо путем указания аргументов predictor / response отдельно с аргументами 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)
Комментарии:
1. Также может быть полезно подчеркнуть, что
randomForsest
может вызываться либо с помощью формулы, в которой вы обычно используетеdata
аргумент, либо путем указания аргументов предиктора / ответа отдельно с аргументамиx
иy
.2. @r2evans Спасибо вам! Очень четкие ответы. Теперь я понимаю.