[英]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.