r-计算用插入符号进行预测的时间



我在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并基本上以模型作为输入编写函数,例如,如果我们创建两个模型:

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

最新更新