Случайный лес - насколько mtry больше общего числа независимых переменных? - PullRequest
2 голосов
/ 28 февраля 2020

1) Я попробовал регрессию Random Forest для тренировочного набора из 185 строк с 4 независимыми переменными. 2 категориальные переменные имеют 3 уровня и 13 уровней. Еще 2 переменные являются числовыми c непрерывными переменными.

Я пробовал RF с перекрестной проверкой 10 раз, повторенной 4 раза. (Я не масштабировал зависимую переменную, и поэтому RMSE так велика.)

Я думаю, причина, по которой mtry больше 4, заключается в том, что категориальные переменные имеют 3 + 13 = 16 уровней. Но если так, то почему он не включает число переменных c?

185 samples
4 predictor

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 4 times) 
Summary of sample sizes: 168, 165, 166, 167, 166, 167, ... 
Resampling results across tuning parameters:

  mtry  RMSE      Rsquared   MAE    
   2    16764183  0.7843863  9267902
   9     9451598  0.8615202  3977457
  16     9639984  0.8586409  3813891

RMSE was used to select the optimal model using the smallest value.
The final value used for the model was mtry = 9.

Пожалуйста, помогите мне понять mtry.

2) Кроме того, каждый размер выборки составляет 168,165,166, .... а почему размер выборки меняется?

sample sizes: 168, 165, 166, 167, 166, 167

Большое спасибо.

1 Ответ

1 голос
/ 01 марта 2020

Вы правы в том, что есть 16 переменных для выборки, поэтому максимальное значение для mtry равно 16.

Значения, выбранные с помощью каретки, основаны на двух параметрах, в поезде есть опция для tuneLength по умолчанию 3:

tuneLength = ifelse(trControl$method == "none", 1, 3)

Это означает, что он проверяет три значения. Для randomForest у вас есть mtry, и по умолчанию:

getModelInfo("rf")[[1]]$grid
function(x, y, len = NULL, search = "grid"){
                    if(search == "grid") {
                      out <- data.frame(mtry = caret::var_seq(p = ncol(x), 
                                                              classification = is.factor(y), 
                                                              len = len))
                    } else {
                      out <- data.frame(mtry = unique(sample(1:ncol(x), size = len, replace = TRUE)))
                    }
                    out
                  }

Поскольку у вас есть 16 столбцов, оно становится:

var_seq(16,len=3)
[1]  2  9 16

Вы можете протестировать mtry по вашему выбору, установив:

library(caret)
trCtrl = trainControl(method="repeatedcv",repeats=4,number=10)
# we test 2,4,6..16
trg = data.frame(mtry=seq(2,16,by=2))
# some random data for example
df = data.frame(y=rnorm(200),x1 = sample(letters[1:13],200,replace=TRUE),
x2=sample(LETTERS[1:3],200,replace=TRUE),x3=rpois(200,10),x4=runif(200))

#fit
mdl = train(y ~.,data=df,tuneGrid=trg,trControl =trCtrl)

Random Forest 

200 samples
  4 predictor

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 4 times) 
Summary of sample sizes: 180, 180, 180, 180, 180, 180, ... 
Resampling results across tuning parameters:

  mtry  RMSE      Rsquared    MAE      
   2    1.120216  0.04448700  0.8978851
   4    1.157185  0.04424401  0.9275939
   6    1.172316  0.04902991  0.9371778
   8    1.186861  0.05276752  0.9485516
  10    1.193595  0.05490291  0.9543479
  12    1.200837  0.05608624  0.9574420
  14    1.205663  0.05374614  0.9621094
  16    1.210783  0.05537412  0.9665665

RMSE was used to select the optimal model using the smallest value.
The final value used for the model was mtry = 2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...