【发布时间】:2021-05-24 17:57:36
【问题描述】:
我想知道如何衡量mlr3 模型的预测性能(使用测试数据集)?例如,如果我使用 mlr3 创建一个 knn 模型,如下所示:
library("mlr3")
library("mlr3learners")
# get data and split into training and test
aq <- na.omit(airquality)
train <- sample(nrow(aq), round(.7*nrow(aq))) # split 70-30
aqTrain <- aq[train, ]
aqTest <- aq[-train, ]
# create model
aqT <- TaskRegr$new(id = "knn", backend = aqTrain, target = "Ozone")
aqL <- lrn("regr.kknn")
aqMod <- aqL$train(aqT)
我可以通过以下方式测量模型预测的均方误差:
prediction <- aqL$predict(aqT)
measure <- msr("regr.mse")
prediction$score(measure)
但是如何将测试数据合并到其中?也就是说,我如何衡量测试数据的预测性能?
在以前的mlr 版本中,我可以这样做;使用测试数据集获取预测并测量 MSE 或 Rsquared 值的性能,如下所示:
pred <- predict(aqMod, newdata = aqTest)
performance(pred, measures = list(mse, rsq))
关于如何在mlr3 中执行此操作的任何建议?
【问题讨论】:
-
您可以在 mlr3 中以几乎相同的方式执行此操作,请参阅 the relevant chapter of the mlr3 book。
-
阅读了本书的那一章后,它告诉我应该执行以下操作:` prediction = aqL$predict(aqT, row_ids = testRows)` 其中,
testRows是行的索引在训练数据中。但是,这会产生错误:Error: DataBackend did not return the queried rows correctly: 33 requested, 17 received -
您应该也可以像使用 mlr 一样使用
newdata。 -
链接手册中有很多例子。通常您希望使用交叉验证来进行无偏的性能估计。
-
您要么需要通过完整的任务并使用行 ID 进行训练/测试,要么事先拆分数据并使用
newdata。