【问题标题】:How to increase accuracy in SVM training and classification in Matlab?如何在 Matlab 中提高 SVM 训练和分类的准确性?
【发布时间】:2017-11-16 08:43:24
【问题描述】:

我正在使用多张图像进行 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);供测试用。

【问题讨论】:

  • 请展示您如何训练您的 SVM。也许您应该尝试对超参数进行网格搜索?
  • 我已经编辑了我的问题,但我不知道我是否回答了你的问题。我用过 svmtrain 和 svmclassify。
  • 你看过输入特征的规模吗? SVM 可以从标准化中显着受益content.iospress.com/articles/intelligent-data-analysis/ida730

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


【解决方案1】:

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

如果你不尝试不同的超参数配置,恐怕你不能指望 svm 工作。

【讨论】:

  • 感谢您的回答。你是如何决定 BoxConstraint 的值的?因为我收到此错误'错误使用 svmtrain(第 460 行)框约束必须是正数值标量,或长度等于 TRAINING 中的行数的正数向量。 main2 中的错误(第 62 行) svmModel = svmtrain(train_data, train_label,'BoxConstraint',[0.01, 0.1, 1, 10]);
  • 我的意思是你必须做不同的运行: svmtrain(train_data, train_label,'BoxConstraint', 0.01, 'kernel_function', 'rbf'); svmtrain(train_data, train_label,'BoxConstraint', 0.1, 'kernel_function', 'rbf'); svmtrain(train_data, train_label,'BoxConstraint', 1, 'kernel_function', 'rbf'); ...
  • @J63 也可以使用bayesopt 自动寻找最优超参数:ch.mathworks.com/help/stats/…
  • 这很有趣,没有任何变化。它总是在 48 到 53 之间。即使我输入 0.01 或 100 或 0,1 也没有太大变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 2018-12-26
  • 2019-01-30
  • 2017-10-09
  • 2014-08-05
  • 2012-01-23
  • 2016-12-24
相关资源
最近更新 更多