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

Posted

技术标签:

【中文标题】如何在 Matlab 中提高 SVM 训练和分类的准确性?【英文标题】:How to increase accuracy in SVM training and classification in Matlab? 【发布时间】: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 【参考方案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 也没有太大变化。

以上是关于如何在 Matlab 中提高 SVM 训练和分类的准确性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MATLAB 上开始 SVM 训练

使用在 Matlab 中训练的 SVM 模型在 python 中进行分类

基于MATLAB的SVM支持向量机的数据分类仿真,包括训练和测试

如何缩放 SVM 分类的输入特征?

请问在matlab中如何实现支持向量机(SVM)算法?

如何提高 SVM 的性能?