我正在尝试使用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!
这个问题的可能原因是什么?
感谢。
答案 0 :(得分:1)
根据?tune
,它应该是best.parameters
,而不是best.parameter
。尝试在代码中的两个实例的末尾添加“s”,看看它是否有效。
答案 1 :(得分:0)
很难说没有测试数据(甚至是数据描述)的确定性。但是,可以说svm
之后的调用tune.svm
与e1071::tune
帮助页面中的示例不一致。此外,“成本”和“价格”参数应作为列表元素给出的形式参数是“范围”。您不需要在输出上运行svm。