【发布时间】:2012-02-21 06:40:49
【问题描述】:
我知道交叉验证用于选择好的参数。找到它们后,我需要在没有 -v 选项的情况下重新训练整个数据。
但我面临的问题是,在我使用 -v 选项进行训练后,我得到了交叉验证的准确率(例如 85%)。没有模型,我看不到 C 和 gamma 的值。这种情况下我该如何重新训练?
顺便说一句,我应用了 10 折交叉验证。 例如
optimization finished, #iter = 138
nu = 0.612233
obj = -90.291046, rho = -0.367013
nSV = 165, nBSV = 128
Total nSV = 165
Cross Validation Accuracy = 98.1273%
需要一些帮助..
为了获得最好的 C 和 gamma,我使用了 LIBSVM 常见问题解答中提供的这段代码
bestcv = 0;
for log2c = -6:10,
for log2g = -6:3,
cmd = ['-v 5 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
cv = svmtrain(TrainLabel,TrainVec, cmd);
if (cv >= bestcv),
bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
end
fprintf('(best c=%g, g=%g, rate=%g)\n',bestc, bestg, bestcv);
end
end
另一个问题:使用 -v 选项后的交叉验证准确性是否类似于我们在没有 -v 选项的情况下进行训练并使用该模型进行预测时得到的准确性?两者的准确率相似吗?
另一个问题:交叉验证通过避免过度拟合,基本上提高了模型的准确性。因此,在改进之前,它需要有一个模型。我对吗?除此之外,如果我有不同的模型,那么交叉验证的准确性会有所不同吗?我说的对吗?
还有一个问题:在交叉验证准确率中,那么C和gamma的值是多少?
图表是这样的
那么 C 的值为 2 且 gamma = 0.0078125。但是当我用新参数重新训练模型时。该值与 99.63% 不同。有什么理由吗? 提前谢谢...
【问题讨论】:
标签: matlab machine-learning classification svm libsvm