使用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

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

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