У меня есть только небольшой набор данных из 30 образцов, поэтому у меня есть только набор обучающих данных, но нет набора тестов. Поэтому я хочу использовать перекрестную проверку для оценки модели. Я запускал модели pls в r, используя перекрестную проверку и LOO. Выход mvr
имеет значения fitted values
и validation$preds
, и они разные. В качестве окончательных результатов R2 и RMSE только для тренировочного набора следует ли использовать окончательные значения fitted values
или validation$preds
?
Разница между подобранными значениями и значениями перекрестной проверки из модели pls в r
Ответы (1)
Короткий ответ: если вы хотите узнать, насколько хороша модель для прогнозирования, вы будете использовать validation$preds
, потому что она проверена на невидимых данных. Значения под $fitted.values
получены путем подгонки окончательной модели ко всем вашим обучающим данным, что означает, что одни и те же обучающие данные используются при построении модели и прогнозировании. Таким образом, значения, полученные в результате этой окончательной подгонки, будут недооценивать производительность вашей модели на невидимых данных.
Вам, вероятно, нужно объяснить, что вы подразумеваете под действительным (в ваших комментариях).
Перекрестная проверка используется для определения наилучшего гиперпараметра, в данном случае количества компонентов модели.
При кросс-валидации часть данных не используется для подгонки и служит тестовым набором. Это фактически дает приблизительную оценку того, что модель будет работать с невидимыми данными. Посмотрите это изображение из scikit Learn, чтобы узнать, как работает CV.
LOO работает аналогичным образом. Предположительно, после нахождения наилучшего параметра вы получаете окончательную модель для использования в тестовом наборе. В этом случае mvr
обучается на всех моделях с 2-6 ПК, но $fitted.values исходит из модели, обученной на всех обучающих данных.
Вы также можете увидеть ниже, насколько они разные, сначала я подогнал модель
library(pls)
library(mlbench)
data(BostonHousing)
set.seed(1010)
idx = sample(nrow(BostonHousing),400)
trainData = BostonHousing[idx,]
testData = BostonHousing[-idx,]
mdl <- mvr(medv ~ ., 4, data = trainData, validation = "CV",
method = "oscorespls")
Затем мы вычисляем среднее значение RMSE в CV, полной модели обучения и тестовых данных, используя 4 ПК:
calc_RMSE = function(pred,actual){ mean((pred - actual)^2)}
# error in CV
calc_RMSE(mdl$validation$pred[,,4],trainData$medv)
[1] 43.98548
# error on full training model , not very useful
calc_RMSE(mdl$fitted.values[,,4],trainData$medv)
[1] 40.99985
# error on test data
calc_RMSE(predict(mdl,testData,ncomp=4),testData$medv)
[1] 42.14615
Вы можете видеть, что ошибка перекрестной проверки ближе к тому, что вы получаете, если у вас есть тестовые данные. Опять же, это действительно зависит от ваших данных.
fitted values
представляют результаты разработки или калибровки модели, аvalidation$preds
представляют прогнозы перекрестной проверки. - person Bappa Das   schedule 10.08.2020