首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >auc在mlr基准实验中给出了错误(要求预测类型为:'prob')

auc在mlr基准实验中给出了错误(要求预测类型为:'prob')
EN

Stack Overflow用户
提问于 2018-10-22 15:50:11
回答 1查看 376关注 0票数 0

我正在使用mlr包进行基准分析,并希望使用auc作为性能度量。我已经指定了predict.type = "prob",并且仍然收到以下错误消息:

代码语言:javascript
复制
0001: Error in FUN(X[[i]], ...) : 
  Measure auc requires predict type to be: 'prob'!

我的代码:

代码语言:javascript
复制
#define measures
meas <- list(acc, mlr::auc, brier)

##random forest
p_length <- ncol(training_complete) - 1
lrn_RF = makeLearner("classif.randomForest", predict.type = "prob", par.vals = list("ntree" = 500L))
wcw_lrn_RF = makeWeightedClassesWrapper(lrn_RF, wcw.weight = 0.10) #weighted class wrapper
parsRF = makeParamSet(
  makeIntegerParam("mtry", lower = 1 , upper = floor(0.4*p_length)),
 makeIntegerParam("nodesize", lower = 10, upper = 50))
tuneRF = makeTuneControlRandom(maxit = 100)
inner = makeResampleDesc("CV", iters = 2)
learnerRF = makeTuneWrapper(lrn_RF, resampling = inner, meas, par.set = parsRF, control = tuneRF, show.info = FALSE)

##extreme gradient boosting
lrn_xgboost <- makeLearner(
  "classif.xgboost",
  predict.type = "prob", #before was response
  par.vals = list(objective = "binary:logistic", eval_metric = "error", nrounds = 200)) 
getParamSet("classif.xgboost")
pars_xgboost = makeParamSet(
  makeIntegerParam("nrounds", lower = 100, upper = 500),
  makeIntegerParam("max_depth", lower = 1, upper = 10),
  makeNumericParam("eta", lower = .1, upper = .5),
  makeNumericParam("lambda", lower = -1, upper = 0, trafo = function(x) 10^x))
tunexgboost = makeTuneControlRandom(maxit = 50) 
inner = makeResampleDesc("CV", iters = 2)
learnerxgboost = makeTuneWrapper(lrn_xgboost, resampling = inner, meas, par.set = pars_xgboost,control = tunexgboost, show.info = FALSE)


##Benchmarking via outer resampling loop

#Learners to be compared
lrns = list(
  makeLearner("classif.featureless"), 
  learnerRF,
  learnerxgboost
)

#outer resampling strategy
rdesc = makeResampleDesc("CV", iters = 5) 

library(methods)
library(parallel)
library(parallelMap)

set.seed(123, "L'Ecuyer") 

parallelStartSocket(parallel::detectCores(), level = "mlr.resample")

churn_benchmarking <- benchmark(learners = lrns,
                                tasks = trainTask,
                                resamplings = rdesc,
                                models = FALSE,
                                measures = meas)

parallelStop()

任何提示都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 09:27:47

我能看到一个问题。你的无特点的学习者并没有提供可能性。

makeLearner("classif.featureless", predict.type = "prob")代替。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52933227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档