计算在插入符号中做出预测的时间

calculating time to make predictions in caret

我已经在插入符号中构建了一些模型,并且正在尝试评估哪个模型在对看不见的数据进行预测方面最快,因此我知道在部署时哪个模型进行预测最快。我知道我可以使用 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 等)。还有其他方法吗?或者这是正确的方法吗?

您可以使用 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