使用 mlr-package 构建模型时的自定义性能度量
Custom performance measure when building models with mlr-package
我刚刚从 caret
切换到 mlr
以解决我目前正在处理的特定问题。
我想知道这里是否有人熟悉在 resample()
函数中指定自定义性能度量。
这是一个可重现的代码示例:
library(mlr)
library(mlbench)
data(BostonHousing, package = "mlbench")
task_reg1 <- makeRegrTask(id = "bh", data = BostonHousing, target = "medv")
lrn_reg1 <- makeLearner(cl = "regr.randomForest",
predict.type = "response",
mtry=3)
cv_reg1 <- makeResampleDesc("RepCV", folds = 5, reps = 5)
regr_1 <- resample(learner = lrn_reg1,
task = task_reg1,
resampling = cv_reg1,
measures = mlr::rmse)
我想计算平均绝对标度误差,MASE,而不是计算 RMSE。例如,可以在 Metrics
包中找到此功能:Metrics::mase()
.
我试图将 measures = Metrics::mase
直接包含在 resample()
调用中,但正如预期的那样,有点乐观,我收到以下错误:
Error in checkMeasures(measures, task) :
Assertion on 'measures' failed: Must be of type 'list', not 'closure'.
我发现 mlr
包中有一个用于创建自定义性能指标的函数,称为 makeMeasure()
(https://rdrr.io/cran/mlr/man/makeMeasure.html)。我试着用它做一些试验,但没有成功。我在修改自定义函数方面没有太多经验,所以我希望这里有人可以帮助我,或者为这样的事情提供一些资源。
干杯!
您需要构造一个可以在 makeMeasure()
中应用的函数,其形式为 function(task, model, pred, extra.args)
。我们可以围绕 Metrics::mase()
编写一个包装器,这样您就可以在 resample()
中使用这个函数,并且您可以对找到的任何其他指标执行相同的操作。
mase_fun <- function(task, model, pred, feats, extra.args) {
Metrics::mase(pred$data$truth, pred$data$response, step_size = extra.args$step_size)
}
mase_measure <- makeMeasure(id = "mase",
minimize = T,
properties = c("regr", "req.pred", "req.truth"),
fun = mase_fun,
extra.args = list(step_size = 1))
resample(learner = lrn_reg1,
task = task_reg1,
resampling = cv_reg1,
measures = mase_measure)
我刚刚从 caret
切换到 mlr
以解决我目前正在处理的特定问题。
我想知道这里是否有人熟悉在 resample()
函数中指定自定义性能度量。
这是一个可重现的代码示例:
library(mlr)
library(mlbench)
data(BostonHousing, package = "mlbench")
task_reg1 <- makeRegrTask(id = "bh", data = BostonHousing, target = "medv")
lrn_reg1 <- makeLearner(cl = "regr.randomForest",
predict.type = "response",
mtry=3)
cv_reg1 <- makeResampleDesc("RepCV", folds = 5, reps = 5)
regr_1 <- resample(learner = lrn_reg1,
task = task_reg1,
resampling = cv_reg1,
measures = mlr::rmse)
我想计算平均绝对标度误差,MASE,而不是计算 RMSE。例如,可以在 Metrics
包中找到此功能:Metrics::mase()
.
我试图将 measures = Metrics::mase
直接包含在 resample()
调用中,但正如预期的那样,有点乐观,我收到以下错误:
Error in checkMeasures(measures, task) :
Assertion on 'measures' failed: Must be of type 'list', not 'closure'.
我发现 mlr
包中有一个用于创建自定义性能指标的函数,称为 makeMeasure()
(https://rdrr.io/cran/mlr/man/makeMeasure.html)。我试着用它做一些试验,但没有成功。我在修改自定义函数方面没有太多经验,所以我希望这里有人可以帮助我,或者为这样的事情提供一些资源。
干杯!
您需要构造一个可以在 makeMeasure()
中应用的函数,其形式为 function(task, model, pred, extra.args)
。我们可以围绕 Metrics::mase()
编写一个包装器,这样您就可以在 resample()
中使用这个函数,并且您可以对找到的任何其他指标执行相同的操作。
mase_fun <- function(task, model, pred, feats, extra.args) {
Metrics::mase(pred$data$truth, pred$data$response, step_size = extra.args$step_size)
}
mase_measure <- makeMeasure(id = "mase",
minimize = T,
properties = c("regr", "req.pred", "req.truth"),
fun = mase_fun,
extra.args = list(step_size = 1))
resample(learner = lrn_reg1,
task = task_reg1,
resampling = cv_reg1,
measures = mase_measure)