#r #r-caret
#r #r-каретка
Вопрос:
Я использую пакет каретки для обучения модели эластичной сети в моем dataset modDat. Я использую подход поиска по сетке в сочетании с повторной перекрестной проверкой для выбора оптимальных значений параметров лямбда и дроби, требуемых функцией эластичной сетки. Мой код показан ниже.
library(caret)
library(elasticnet)
grid <- expand.grid(
lambda = seq(0.5, 0.7, by=0.1),
fraction = seq(0, 1, by=0.1)
)
ctrl <- trainControl(
method = 'repeatedcv',
number = 5, #folds
repeats = 10, #repeats
classProbs = FALSE
)
set.seed(1)
enetTune <- train(
y ~ .,
data = modDat,
method = 'enet',
metric = 'RMSE',
tuneGrid = grid,
verbose = FALSE,
trControl = ctrl
)
Я могу получать прогнозы, используя y_hat <- predict(enetTune, modDat)
, но я не могу просмотреть коэффициенты, лежащие в основе прогнозов.
Я пробовал coef(enetTune$finalModel)
, но единственное, что возвращается, это NULL. Я подозреваю, что мне нужно предоставить coef()
функции больше информации, но не уверен, как это сделать.
Кроме того, я хотел бы создать прямоугольную диаграмму из 50 наборов коэффициентов (10 повторений по 5 раз), связанных с оптимальными параметрами лямбда и фракции.
Ответ №1:
Чтобы просмотреть коэффициенты, используйте predict
:
predict(enetTune$finalModel, type = "coefficients")
См ?predict.enet
. Для получения дополнительной информации о том, как получить конкретные коэффициенты.
Комментарии:
1. Похоже, что я получаю коэффициенты для многих значений лямбда, которые я не нахожу интуитивно понятными. Кроме того, значения лямбда не ограничены значениями, указанными в объекте grid.
Ответ №2:
Следуя ответу @Weihuang Wong, вы можете получить коэффициенты из окончательной модели, используя следующий код:
predict.enet(enetTune$finalModel, s=enetTune$bestTune[1, "fraction"], type="coef", mode="fraction")$coefficients
Ответ №3:
Для меня лучше всего работает stats::predict
, как и ответ @Weihuang Wong. Однако, как указал OP в комментарии, это предоставляет список коэффициентов для каждого проверенного значения лямбда.
Здесь важно понимать, что при использовании вы predict
намерены точно предсказать значение параметров, а не извлекать их. Затем вы должны знать об этом и изучить доступные варианты.
В этом случае вы могли бы использовать ту же функцию с аргументом s
для параметра штрафа lambda . Помните, что вы все еще прогнозируете, но на этот раз вы получите коэффициенты, которые ищете.
stats::predict(enetTune$finalModel, type = "coefficients", s = enetTune$bestTune$lambda)