【问题标题】:Save out a caret prediction model and apply to external data in R保存插入符号预测模型并应用于 R 中的外部数据
【发布时间】:2021-02-23 14:05:04
【问题描述】:

我已经运行了插入符号预测模型

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')"

那么它必须是整个模型拟合对象吗? 有没有比保存并发送整个(大量)适合对象更简单的方法? 有没有办法只保存“最终模型”(如上),然后在“预测”调用中应用它?

谢谢

【问题讨论】:

  • 真的有那么大吗?现在,您的接收器必须重新创建模型对象,就像它在您的末端一样,才能像那样使用predict - 或者 - 确切地知道如何自己处理这个模型的系数。发送整个模型绝对是最简单的选择。

标签: r validation external r-caret glmnet


【解决方案1】:

正如 Sirius 所说,最好的方法是保存模型对象。它不应该那么那么大。

但是,在紧要关头,另一种选择是让您的合作者手动为模型评分。可以通过将验证矩阵与系数向量相乘来做到这一点。代码如下所示,假设您有一个与模型矩阵格式相同的矩阵 validationcoefficients 作为向量。此计算用于逻辑回归,并且假设您使用 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)

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2018-02-07
    相关资源
    最近更新 更多