【问题标题】:Custom performance measure when building models with mlr-package使用 mlr-package 构建模型时的自定义性能度量
【发布时间】:2020-08-11 05:06:48
【问题描述】:

我刚刚从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)

我想计算平均绝对比例误差,而不是计算 RMSE,MASE。例如,可以在 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)。我试着用它做一些试验,但没有成功。我在修改自定义功能方面没有太多经验,所以我希望这里的人可以帮助我,或者为类似的东西提供一些资源。

干杯!

【问题讨论】:

    标签: r function machine-learning mlr performance-measuring


    【解决方案1】:

    您需要构造一个可在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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 2023-02-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多