我正在使用LIBSVM进行分类。 我已经提取了SIFT功能,然后我训练了我的功能的OVRTRAIN和OVRPREDICT。
在此之前,我使用此代码进行了交叉验证:
bestcv = 0;
for log2c = -1:1:3,
for log2g = -4:1:2,
cmd = ['-q -c ', num2str(2^log2c), ' -g ', num2str(2^log2g)];
cv = get_cv_ac(label_Train_sift, Feat_Train, cmd, 3);
if (cv >= bestcv),
bestcv = cv; bestc = 2^log2c; bestg = 2^log2g;
end
fprintf('%g %g %g (best c=%g, g=%g, rate=%g)\n', log2c, log2g, cv, bestc, bestg,
bestcv);
end
end
培训(获得模型和准确性):
bestParam = ['-t 0 -c ', num2str(bestc), ' -g ', num2str(bestg)];
model = ovrtrain(label_Train_sift, Feat_Train, bestParam);
[predict_label, accuracy, prob_values] = ovrpredict(label_Test_sift, Feat_Test, model);
但是我必须训练许多不同的功能和参数。例如,对于第一次训练,我使用SIFT和Hesian方法然后使用DoG方法等等。
当我已经尝试了所有这种方法时,例如我将HESIAN作为最佳方法(在其他方法中提供了良好的准确性),但是当我再次使用Hessian方法训练相同的特征时(随时更改)...准确性变得不同......
怎么可能?
是否因为交叉验证? 但是当我第四次尝试时,我的准确度相同,但第二和第三次不同......
第1次训练,准确度67 2,准确度55 3,准确度45 ???
为什么?