Вы правы в том, что есть 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.