在 R 中设置 SVM 分类的参数

Posted

技术标签:

【中文标题】在 R 中设置 SVM 分类的参数【英文标题】:Setting the parameters for SVM Classification in R 【发布时间】:2021-06-02 23:22:52 【问题描述】:

说明:

    对于数据集,我想通过使用径向基函数 (RBF) 内核和 Weston, Watkins native multi-class 来应用 SVM。 rbf 内核参数sigma 必须调整,我想使用k-folds cross validation 来执行此操作。我认为是固定的C

解决方案:

看来我可以使用漂亮的包mlr 来做到这一点!因此,使用CVMSVM 分类调整rbf 参数sigma,(使用此tutorial)

#While C is fix = 3, define a range to search sigma over it. Search between [10^-6, 10^6]
num_ps = makeParamSet(
  makeDiscreteParam("C", values = 3),
  makeNumericParam("sigma", lower = -6, upper = 6, trafo = function(x) 10^x)
)
#Define the Grid search method
ctrl = makeTuneControlGrid()
#Apply the k-folds CV
rdesc = makeResampleDesc("CV", iters = 3L)

res = tuneParams("classif.ksvm", task = iris.task, resampling = rdesc,
  par.set = num_ps, control = ctrl)

问题:

对于这部分

res = tuneParams("classif.ksvm", task = iris.task, resampling = rdesc,
      par.set = num_ps, control = ctrl)

根据文档,通过使用集成学习器classif.ksvm,我要求应用包ksvm 中定义的多类分类。

我如何知道使用了哪种方法和内核类型?我的意思是,如何强制学习者classif.ksvm使用ksvm中已经定义的分类类型(kbb-svc)和内核(rbfdot)?

如果这是不可能的,那么如何定义一个满足我所有要求的新学习者?

【问题讨论】:

【参考方案1】:

您必须在学习器中设置固定参数。因此,您首先必须创建它:

library(mlr)
lrn = makeLearner("classif.ksvm", par.vals = list(C = 3, type = "kbb-svc", kernel = "rbfdot"))

然后您只需在 ParamSet 中定义要更改的参数

num_ps = makeParamSet(
  makeNumericParam("sigma", lower = -6, upper = 6, trafo = function(x) 10^x)
)

然后你可以像你的例子一样进行调整

ctrl = makeTuneControlGrid()
rdesc = makeResampleDesc("CV", iters = 3L)
res = tuneParams(lrn, task = iris.task, resampling = rdesc, par.set = num_ps, control = ctrl)

【讨论】:

非常感谢您的回答。我只是还有一个问题!通常,当使用其他包(如 caret)使用 k-folds CV 调整参数 sigma 时,我们只使用训练集。这里使用 mlr 包,我只需要提供训练集还是像我的示例一样,我提供整个集合“IRIS”,函数 tuneParams() 将处理这个并划分集合? 我的意思是 tuneParams() 会在整个 IRIS 集合上调整 sigma 还是先划分集合然后只在训练中调整 sigma? 它将根据rdesc 对整个数据进行拆分(因此此处为 3 倍 cv)。这将为您提供“最佳”参数。如果您对调整性能的无偏估计感兴趣,则必须使用 makeTuneWrapper 进行嵌套重采样。

以上是关于在 R 中设置 SVM 分类的参数的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中设置函数参数的默认值

R语言笔记 R中设置图形参数--函数par()详解

译:支持向量机(SVM)及其参数调整的简单教程(Python和R)

测试是不是在 R 中设置了函数的参数

Scikit Learn:如何在回归中设置 SVM 输出范围?

在react-route r中设置params的类型