Это связано с тем, что randomForest
использует случайное начальное число. Он использует начальное значение для выбора предикторов в формуле во время выполнения, основываясь на положении предикторов, а не на имени. Поскольку вы используете оператор .
для выбора всех столбцов в вашем фрейме данных, порядок предикторов в вызове формулы различается (в зависимости от упорядочения фрейма данных), и хотя модель выбирает одну и ту же позицию на каждой итерации, они фактически различны столбцы.
Я показываю только вывод ошибок OOB ниже, чтобы уменьшить длину сообщения, но вот простой пример.
library(randomForest)
set.seed(123)
df <- data.frame(class = c(sample(c("a", "b", "c"), size = 100, replace = T)),
x = runif(100),
y = runif(100))
set.seed(1)
randomForest(class ~ ., data = df)
#> OOB estimate of error rate: 75%
# Changing order of columns changes results
set.seed(1)
randomForest(class ~ ., data = df[,c(1,3,2)])
#> OOB estimate of error rate: 70%
# But if we specify the formula, get the same result as original
set.seed(1)
randomForest(class ~ x + y, data = df[,c(1,3,2)])
#> OOB estimate of error rate: 75%
# Keeping ordering of data frame but renaming columns doesn't change results
names(df) <- c("class", "y", "x")
set.seed(1)
randomForest(class ~ ., data = df)
#> OOB estimate of error rate: 75%
Чтобы получить то же самое поведение каждый раз, вам нужно либо укажите формулу явно или сохраняйте тот же порядок столбцов фрейма данных.