保存插入符号预测模型并应用于 R 中的外部数据
Save out a caret prediction model and apply to external data in 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')"
那么它必须是整个模型拟合对象吗?
有没有比保存并发送整个(大量)适合对象更简单的方法?
有没有办法只保存 'final model'(如上所述),然后在 'predict' 调用中应用它?
谢谢
正如 Sirius 所说,最好的方法是只保存模型对象。它不应该 那么 大。
但是,在紧要关头,另一种选择是让您的合作者手动为模型评分。可以通过将验证矩阵与系数向量相乘来做到这一点。假设您有一个与模型矩阵格式相同的矩阵 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)
我有 运行 插入符号预测模型
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')"
那么它必须是整个模型拟合对象吗? 有没有比保存并发送整个(大量)适合对象更简单的方法? 有没有办法只保存 'final model'(如上所述),然后在 'predict' 调用中应用它?
谢谢
正如 Sirius 所说,最好的方法是只保存模型对象。它不应该 那么 大。
但是,在紧要关头,另一种选择是让您的合作者手动为模型评分。可以通过将验证矩阵与系数向量相乘来做到这一点。假设您有一个与模型矩阵格式相同的矩阵 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)