簡體   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