我在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