我在尝试训练SVM时从Liblinear中得到了以下错误:“错误:C<= 0”。虽然问题很明显,但我无法理解为什么会出现这个问题,因为我通过交叉验证找到的C值是正的。
这是用于寻找C值的交叉验证代码(我已经删除了下半部分)
for log2c = 2:1:6,cmd = ['-s 2 -v 5 -c ', num2str(2^log2c)];cv = train(labels, features, cmd);
我得到的结果是
Cross Validation Accuracy = 91.6772%bestc = 4, cv = 91.6772
然而,当我随后训练SVM时,我得到了
models{i} = train(trainLabel, trainFeats, ['-s 2 -c ', bestc]);Error: C <= 0
如果有人有任何建议,我将不胜感激!
(另外,我的数据大约是2/3负样本和1/3正样本,如果这有帮助的话)
回答:
我认为你应该写:
models{i} = train(trainLabel, trainFeats, ['-s 2 -c ', num2str(bestc)]);
同时确保bestc
的值是正的,即>=0