【问题标题】:calculating time to make predictions in caret计算在插入符号中进行预测的时间
【发布时间】:2021-06-17 05:40:24
【问题描述】:

我已经在插入符号中构建了一些模型,并且正在尝试评估哪个模型对看不见的数据进行预测的速度最快,因此我知道哪个模型在部署时进行预测的速度最快。我知道我可以使用 modelname$times 从插入符号模型中提取训练时间,但是,我想评估模型进行预测的速度。我有点不确定最好的方法,目前,我已经做了以下事情:

# model 1
S_time <- Sys.time()
preds <- modelname %>% predict(testdata)
E_time <- Sys.time()
pred_time1 <- E_time - S_time


# model 2
S_time <- Sys.time()
preds <- modelname %>% predict(testdata)
E_time <- Sys.time()
pred_time2 <- E_time - S_time

然后我可以对时间进行直接比较,并评估模型对看不见的数据进行预测的速度。然后,我可以在评估最佳模型时将此预测时间用作附加模型参数(以及各种其他指标,例如 AIC 分数、RMSE、MAE、R2 等)。是否有其他方法可以做到这一点,或者这是正确的方法吗?

【问题讨论】:

    标签: r time prediction r-caret


    【解决方案1】:

    您可以使用microbenchmark 并以模型作为输入来编写一个函数,例如,如果我们创建 2 个模型:

    library(microbenchmark)
    library(caret)
    library(magrittr)
    
    data(cars)
    idx = sample(nrow(cars),500)
    traindata = cars[idx,]
    testdata = cars[-idx,]
    
    model1 = train(Price ~ .,data=traindata,method="gbm",
    trControl=trainControl(method="cv"))
    
    model2 = train(Price ~ .,data=traindata,method="rf",
    trControl=trainControl(method="cv"))
    

    然后有一个函数接收模型和测试数据:

    predict_func = function(mdl,data){
              mdl %>% predict(data)
    }
    

    我们可以将其输入microbenchmark()

    microbenchmark(model1=predict_func(model1,testdata),model2=predict_func(model2,testdata))
    Unit: milliseconds
       expr       min        lq      mean    median        uq       max neval cld
     model1  2.394427  2.507652  2.944221  2.710818  2.900977  9.967533   100  a 
     model2 10.281856 12.174207 13.716903 13.121166 14.651236 23.971576   100   b
    

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2017-12-18
      相关资源
      最近更新 更多