提高SVM的准确性

时间:2014-06-16 02:07:24

标签: matlab image-processing svm feature-extraction

我正在研究使用两种不同功能HOG和LBP进行检测的人。我使用SVM来训练正面和负面样本。在这里,我想问一下如何提高SVM本身的准确性?因为,每当我添加更多正面和负面样本时,准确性总是在下降。目前我的阳性样本为1500,阴性样本为700.

%extract features
[fpos,fneg] = features(pathPos, pathNeg);  
%train SVM
HOG_featV = loadingV(fpos,fneg);   % loading and labeling each training example
fprintf('Training SVM..\n');
%L = ones(length(SV),1);
T = cell2mat(HOG_featV(2,:));
HOGtP = HOG_featV(3,:)';
C = cell2mat(HOGtP); % each row of P correspond to a training example 


%extract features from LBP
[LBPpos,LBPneg] = LBPfeatures(pathPos, pathNeg);
LBP_featV = loadingV(LBPpos, LBPneg);
LBPlabel = cell2mat(LBP_featV(2,:));
LBPtP = LBP_featV(3,:);
M = cell2mat(LBPtP)'; % each row of P correspond to a training example

featureVector = [C M];
model = svmlearn(featureVector, T','-t 2 -g 0.3 -c 0.5');

任何人都知道如何找到最佳C和Gamma值以提高SVM准确度?

谢谢,

2 个答案:

答案 0 :(得分:1)

要查找最佳C和Gamma值以提高SVM准确度,通常需要执行交叉验证。总之,您可以留下一个(1个样本)并使用不同的参数测试该样本的VBM(2个参数定义2d网格)。通常,您会测试某个范围内每个十年的参数。例如:C = [0.01,0.1,1,...,10 ^ 9]; G = [1 ^ -5,1 ^ -4,...,1000]。这还应该通过优化超参数来提高SVM的准确性。

通过再次查看您的问题,您似乎正在使用Matlab的机器学习工具箱(统计工具箱)的svmlearn。因此,您已经具有用于交叉验证的内置函数。看看:http://www.mathworks.co.uk/help/stats/support-vector-machines-svm.html

答案 1 :(得分:0)

我遵循ASantosRibeiro的方法来优化参数,并且效果很好。 此外,您可以尝试添加更多负片样本,直到负片段和正片段的比例 2:1 。原因是,当您实施实时应用程序时,您应该逐步扫描整个图像,通常负面提取的样本将远远超过人员包含的样本。 因此,添加更多负面训练样本是一种非常简单但有效的方法来提高整体准确性(假阳性和真阳性)。