繁体   English   中英

使用 mlr-package 构建模型时的自定义性能度量

[英]Custom performance measure when building models with mlr-package

我刚刚从caret切换到mlr ,以解决我目前正在处理的特定问题。 我想知道这里是否有人熟悉在resample() function 中指定自定义性能度量。

这是一个可重现的代码示例:

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)

我不想计算 RMSE,而是想计算平均绝对比例误差MASE。 例如,可以在Metrics package: Metrics::mase()中找到为此的 function。

我试图在resample()调用中直接包含measures = Metrics::mase ,但正如预期的那样,有点乐观,我收到以下错误: Error in checkMeasures(measures, task): Assertion on 'measures' failed: Must be of type 'list', not 'closure'.

I found out there's a function in the mlr package for creating custom performance metrics, called makeMeasure() ( https://rdrr.io/cran/mlr/man/makeMeasure.html ). 我试着用它做一些试验,但没有成功。 我在修改定制功能方面没有太多经验,所以我希望这里有人可以帮助我,或者为这样的东西提供一些资源。

干杯!

您需要构建一个 function ,它可以在makeMeasure()中应用,其形式为function(task, model, pred, extra.args) 我们可以在Metrics::mase()周围编写一个包装器,这样您就可以在resample()中使用这个 function ,并且您可以对找到的任何其他指标执行相同的操作。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM