Сохраните модель предсказания каретки и примените к внешним данным в R

Я запустил модель предсказания каретки

fit <- train(outcome~ ., data = training, 
                    method = 'glmnet', 
                    metric = "ROC",
                    tuneLength = 5,
                    trControl = fitControl)

fit

Теперь я хочу применить эту модель к выборочному (внешнему) набору проверки, однако у меня нет доступа к этим данным, я отправляю окончательные модели соавтору, чтобы они могли применить их к своим данным.

Первоначально я сохранил окончательную модель:

combined_coef<-as.matrix(exp(coef(fit$finalModel, fit$bestTune$lambda)))

Таким образом, его можно было прочитать и применить к новым данным.

fitValidation <- predict(fit, newdata = validation, type = "prob")

Это не сработало бы с фреймом данных или матрицей, и при чтении в виде списка сообщение об ошибке было таким:

"Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('tbl_df', 'tbl', 'data.frame')"

Так должна ли вся модель соответствовать объекту? Есть ли более простой способ сделать это, чем сохранить и отправить весь (массивный) подходящий объект? Есть ли способ сохранить только «окончательную модель» (как указано выше), а затем применить ее в вызове «предсказать»?

Спасибо


person ayeepi    schedule 23.02.2021    source источник
comment
Он действительно такой массивный? Теперь ваш получатель должен будет воссоздать объект модели, как это было бы на вашем конце, чтобы иметь возможность использовать predict таким образом - или - точно знать, как работать с коэффициентами для этой модели. Отправка всей модели, безусловно, самый простой вариант.   -  person Sirius    schedule 23.02.2021
comment
ОК спасибо за совет :)   -  person ayeepi    schedule 23.02.2021


Ответы (1)


Как говорит Сириус, лучший способ сделать это — просто сохранить объект модели. Он не должен быть таким большим.

Однако, в крайнем случае, другим вариантом может быть то, что ваш соавтор может оценить модель вручную. Это можно сделать, умножив проверочную матрицу на вектор коэффициентов. Код будет выглядеть так, как показано ниже, если у вас есть матрица validation в том же формате, что и матрица вашей модели, и coefficients в виде вектора. Этот расчет предназначен для логистической регрессии, и, учитывая, что вы используете ROC в качестве метрики соответствия, это должно быть то, что вам нужно.

# do the scoring via matrix multiplication
scores <- t(t(validation) * coefficients)

# sum the scores by row and exponentiate. 
log_odds <- exp(rowSums(scores, na.rm = TRUE))
final_scores <- log_odds / (1 + log_odds)
person Colin H    schedule 25.02.2021