Разница между подобранными значениями и значениями перекрестной проверки из модели pls в r

У меня есть только небольшой набор данных из 30 образцов, поэтому у меня есть только набор обучающих данных, но нет набора тестов. Поэтому я хочу использовать перекрестную проверку для оценки модели. Я запускал модели pls в r, используя перекрестную проверку и LOO. Выход mvr имеет значения fitted values и validation$preds, и они разные. В качестве окончательных результатов R2 и RMSE только для тренировочного набора следует ли использовать окончательные значения fitted values или validation$preds?


r pls
person Cathy    schedule 10.08.2020    source источник
comment
fitted values представляют результаты разработки или калибровки модели, а validation$preds представляют прогнозы перекрестной проверки.   -  person Bappa Das    schedule 10.08.2020
comment
Спасибо, Баппа Дас. Должен ли я сообщать об окончательной производительности модели на основе подогнанных или CV-прогнозов?   -  person Cathy    schedule 10.08.2020
comment
Оба должны быть зарегистрированы, и всегда рекомендуется тестировать вашу модель, используя независимый тестовый или проверочный набор данных.   -  person Bappa Das    schedule 10.08.2020
comment
Спасибо. Но они дают разные результаты, какой из них я должен использовать, чтобы фактически оценить, насколько действительна модель? К сожалению, у меня нет тестового набора.   -  person Cathy    schedule 10.08.2020


Ответы (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

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

person StupidWolf    schedule 10.08.2020