如何提高Matlab中SVM训练和分类的准确性?

时间:2017-06-14 09:24:57

标签: matlab image-processing machine-learning classification svm

我正在接受几张图片的svm培训。这是我的第一个SVM项目。我正在使用HOG特征提取来提取特征。训练功能并在地平线上标记其位置1,如果在背景上则标记0。我有74张用于训练的图像和7张用于测试的图像。不幸的是,我不能超过50%的准确率。我已经改变了图像大小,我在特征提取中玩过单元格大小。它没有那么大的变化。我该怎么办?什么是理想的数据集编号,培训和测试的图像数量是多少?例如,在一个图像中,它预测下一个图像中的所有正确都是错误的。

这就是我计算准确性的方法;

%%%%% Evaluation
% Testing Data
hfsTest = vertcat(dataset.HorizonFeatsTest{:});
bfsTest = vertcat(dataset.BgFeatsTest{:});
test_data = [hfsTest;bfsTest];
% Labels
hlabelTest = ones(size(hfsTest,1),1);
blabelTest = zeros(size(bfsTest,1),1);
test_label = [hlabelTest;blabelTest];

Predict_label = vertcat(results.predicted_label{:});

acc = numel(find(Predict_label==test_label))/length(test_label);
disp(['Accuracy ', num2str(acc)]);
%done

% Training Data
hfs = vertcat(dataset.HorizonFeats{:});
bfs = vertcat(dataset.BgFeats{:});
train_data = [hfs;bfs];
% Labels
hlabel = ones(size(hfs,1),1);
blabel = zeros(size(bfs,1),1);
train_label = [hlabel;blabel];

%%%
% do training ...
svmModel = svmtrain(train_data, train_label,'BoxConstraint',2e-1);

我使用了Predict_label_image = svmclassify(svmModel,image_feats);用于检测。

1 个答案:

答案 0 :(得分:0)

你需要做很多调整。在documentation中,您可以使用所有超参数。我将从一个rbf内核开始,为BoxConstraint尝试[0.01,0.1,1,10]。

如果你不尝试不同的超参数配置,我担心你不能期望svm工作。