使用svm.tune e1071包调整SVM参数

时间:2013-01-29 02:43:39

标签: r svm libsvm

我正在尝试使用e1071软件包在R中使用支持向量机进行分类。使用以下代码,并指定成本和gamma参数,我可以成功训练模型。

svm_models <- lapply(training_data,
                function(data)
                {
                  svm(label~., data=data,
                      method="C-classification", kernel="radial",
                      cost=10, gamma=0.1)
                })

但如果我在上述函数中执行参数调整,如下面的代码,

svmmodels <- lapply(trainingdata,
                function(data)
                {
                  params <- tune.svm(label~., data=data,
                                    gamma=10^(-6:-2), cost=10^(1:2))
                  svm(label~., data=data,
                      method="C-classification", kernel="radial",
                      cost=params$best.parameter[[2]], gamma=params$best.parameter[[1]])
                })

然后我收到以下错误:

Error in predict.svm(ret, xhold, decision.values = TRUE) (from #4) : 
Model is empty!

这个问题的可能原因是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

根据?tune,它应该是best.parameters,而不是best.parameter。尝试在代码中的两个实例的末尾添加“s”,看看它是否有效。

答案 1 :(得分:0)

很难说没有测试数据(甚至是数据描述)的确定性。但是,可以说svm之后的调用tune.svme1071::tune帮助页面中的示例不一致。此外,“成本”和“价格”参数应作为列表元素给出的形式参数是“范围”。您不需要在输出上运行svm。