使用mlrMBO贝叶斯优化进行SVM超参数调优时出现错误

我试图针对一个分类任务优化SVM,这个方法在许多其他模型上都有效。然而,当我在基于模型的优化函数中使用SVM时,它返回了一个错误:“错误在checkStuff(fun, design, learner, control) : 提供的学习器不支持因子参数。”

附件是相关的代码。在我的训练任务中,所有自变量都是数值型的,唯一的一个因子是我感兴趣的结果变量。

library(mlr)library(mlrMBO)library(dplyr)library(PRROC)library(ggplot2)library(DiceKriging)traindf <- read.csv("/Users/njr/Google Drive/HMS IR Research/NSQIP Research/Endovascular/randomtraining.csv")testdf <- read.csv("/Users/njr/Google Drive/HMS IR Research/NSQIP Research/Endovascular/randomtesting.csv")traindf$Amputation<-as.factor(traindf$Amputation)testdf$Amputation <- as.factor(testdf$Amputation)trn.task = makeClassifTask(data = traindf, target = "Amputation", positive = "2")test.task = makeClassifTask(data = testdf, target = "Amputation", positive = "2")set.seed(9)svmlrn =  makeLearner("classif.svm", predict.type = "prob")svm_model <- mlr::train(svmlrn, task = trn.task)res = makeResampleDesc("CV", iters = 10, stratify = TRUE)par5 = makeParamSet(  makeDiscreteParam("kernel", values = c("radial", "polynomial", "linear")),  makeNumericParam("cost", -15, 15, trafo = function(x) 2^x),  makeNumericParam("gamma", -15, 15, trafo = function(x) 2^x, requires = quote(kernel == "radial")),  makeIntegerParam("degree", lower = 1, upper = 4, requires = quote(kernel == "polynomial")))mbo.ctrl = makeMBOControl()mbo.ctrl = setMBOControlInfill(mbo.ctrl, crit = crit.ei)mbo.ctrl = setMBOControlTermination(mbo.ctrl, iters = 35, max.evals = 25)design.mat = generateRandomDesign(n = 50, par.set = par5)surrogate.lrn = makeLearner("regr.km", predict.type = "se")ctrl = mlr::makeTuneControlMBO(learner = surrogate.lrn, mbo.control = mbo.ctrl, mbo.design = design.mat)parallelStartMulticore(cpus = 8L)res.mbo = tuneParams(makeLearner("classif.svm"), trn.task, resampling = res, par.set = par5, control = ctrl,                      show.info = TRUE, measures = auc)parallelStop()

这是错误的跟踪代码:

6.stop("Provided learner does not support factor parameters.")5.checkStuff(fun, design, learner, control)4.initOptProblem(fun = fun, design = design, learner = learner, control = control, show.info = show.info, more.args = more.args)3.mlrMBO::mbo(tff, design = control$mbo.design, learner = control$learner, control = mbo.control, show.info = FALSE)2.sel.func(learner, task, resampling, measures, par.set, control, opt.path, show.info, resample.fun)1.tuneParams(makeLearner("classif.svm"), trn.task, resampling = res, par.set = par5, control = ctrl, show.info = TRUE, measures = auc)

回答:

问题在于你的参数集中有一个分类参数(kernel),而你使用的代理模型(regr.km)不支持这个。你可以尝试使用随机森林作为代理模型来替代。

Related Posts

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注