在R中设置SVM分类参数

描述:

  1. 对于一个数据集,我想使用径向基函数(RBF)核函数和Weston, Watkins 原生多类方法应用SVM分类。
  2. 必须调整rbf核函数参数sigma,我想使用k折交叉验证来完成这一步。我考虑固定C的值。

解决方案:

似乎我可以使用mlr这个很棒的包来完成!所以,要为MSVM分类使用CV来调整rbf参数sigma,(使用这个教程

#当C固定为3时,定义一个范围来搜索sigma。搜索范围为[10^{-6}, 10^{6}]num_ps = makeParamSet(  makeDiscreteParam("C", values = 3),  makeNumericParam("sigma", lower = -6, upper = 6, trafo = function(x) 10^x))#定义网格搜索方法ctrl = makeTuneControlGrid()#应用k折交叉验证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)?

如果这不可能,那么如何定义一个符合所有我要求的新学习器?


回答:

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

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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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