Вопрос или проблема
Я подгоняю регрессии случайного леса к своим данным и использую 10-кратную кросс-валидацию для оценки качества модели. При повторном запуске кросс-валидации я заметил, что результаты различаются между каждым запуском, иногда значительно. Поэтому я решил повторить расчет кросс-валидации 20 раз, создав цикл for, а затем подвести итоги результатов. Просто для иллюстрации, я делаю что-то вроде этого:
for (i in 1:20) {
trainIndex <- createDataPartition(data$response, p = .8, list = FALSE, times = 1)
data_train <- data[ trainIndex,]
data_test <- data[-trainIndex,]
train.control <- trainControl(method = "cv",
number = 10)
model <- train(formula, data = data_train, method = "rf",
trControl = train.control)
pred <- predict(model, data_test)
t<- postResample(pred = pred, obs = data_test$estimate)
t <- t[[2]]
result[[i]] <- t }
Таким образом, по сути, при каждом повторном запуске я снова разделяю свой набор данных на обучающую и тестовую выборки. Это приводит к высокой дисперсии, когда графически отображая результаты каждого запуска вместе, они варьируются от ~0.2
до 0.6
R.squared
. Если я не делаю это в цикле (т.е. если я разделяю на обучающую/тестовую до цикла), то результаты 20 запусков очень похожи.
Какой способ является правильным в этом случае?
Цель k-кратной кросс-валидации заключается в том, чтобы подгонять модель несколько раз и усреднять результаты для оценки предсказательной способности модели.
Если проведя 10-кратную CV один раз, вы получили один результат, а затем повторив его, получили значительно другой результат, вероятно, это означает, что количество частей слишком мало, и процесс k-кратной валидации недостаточно хорошо фиксирует внутреннюю изменчивость данных.
Лучше протестировать, изменив количество частей, и посмотреть, что происходит со средним значением и дисперсией объединенного вывода.
Ответ или решение
Повторение разбиения на тестовые и обучающие выборки при повторном выполнении K-fold кросс-валидации
Вопрос, который вы подняли относительно того, следует ли повторять разбиение на тестовые и обучающие выборки при многократном выполнении K-fold кросс-валидации, действительно очень важен для понимания правильной оценки производительности модели.
1. Понимание K-fold кросс-валидации
K-fold кросс-валидация — это метод оценки производительности моделей, который подразумевает разделение всего набора данных на K подмножеств (или "фолдов"). Модель обучается на K-1 фолдах и тестируется на оставшемся фолде. Этот процесс повторяется K раз, и в каждом из запусков используется другой фолд в качестве тестового. Основная цель K-fold кросс-валидации — оценить, как будет вести себя модель на независимых данных, и минимизировать влияние случайных вариаций.
2. Проблема со случайным разбитием
Вы описали, что при повторном выполнении кросс-валидации с новым разбиением на обучающую и тестовую выборки результаты сильно варьируются — от 0.2 до 0.6 по коэффициенту детерминации (R²). Этого можно ожидать, если ваша обучающая выборка недостаточно велика или ваша модель слишком чувствительна к изменениям в данных. Однако такое сильное колебание может также указывать на то, что K, выбранное вами для кросс-валидации, слишком мало для корректной оценки модели.
3. Рекомендации
Вместо того чтобы повторять разбиение на обучающие и тестовые наборы при каждом выполнении кросс-валидации, рекомендуется использовать одно разбиение на обучающую и тестовую выборки, а затем внутри обучающего набора выполнять K-fold кросс-валидацию. Такой подход позволит вам оценить стабильность вашого признакового пространства и прогнозируемой переменной:
-
Фиксированное разбитие: Разделите ваши данные на фиксированные обучающие и тестовые наборы в начале. Например, вы можете выделить 80% для обучения и 20% для тестирования.
-
K-fold на обучающей выборке: Затем выполните K-fold кросс-валидацию только на обучающей выборке. Это даст вам оценку производительности модели с уменьшением вариаций, которые возникают из-за случайных разбиений.
-
Анализ стабильности модели: Если после выполнения кросс-валидации вы увидите, что результаты остаются достаточно стабильными, вы можете быть более уверенными в качестве своей модели.
-
Тестирование на независимом наборе: После того как вы завершите K-fold кросс-валидацию на обучающей выборке и получите надежную оценку производительности, протестируйте модель на фиксированной тестовой выборке, чтобы получить окончательную оценку.
4. Изменение числа фолдов
Еще одним шагом для улучшения ваших результатов может быть изменение числа фолдов (например, увеличение K до 5 или 10). Вы также можете провести несколько итераций с различным значением K и анализировать, как это влияет на среднюю производительность и её дисперсию. Это поможет получить более надежную и стабильную оценку производительности вашей модели.
Заключение
Таким образом, повторное разбиение на тестовые и обучающие наборы в каждой итерации не является оптимальным подходом. Оптимально применять один разбиение на обучающую и тестовую выборки, после чего использовать K-fold кросс-валидацию только на обучающей выборке. Этот метод обеспечит более надежные и стабильные результаты, минимизируя случайные вариации, которые могут исказить вашу оценку производительности модели.