SVM + matlab和libsvm的准确度非常低

时间:2012-03-29 19:03:24

标签: matlab svm libsvm

我无法计算在语音向量上运行svm所获得的低精度。我已经交叉验证数据没有错,甚至在它上面使用了一个naives bayes分类器来获得好的结果。

首先,我要提一下,我已经确认我没有使用相同的文件进行培训和测试。

我有一组用于训练的正面和负面类数据

  pos = ones(size(PositiveTraining,1),1);
  neg = ones(size(NegativeTraining,1),1)*-1;



  Training = [ PositiveTraining ; NegativeTraining ];
  TrainingLabels = [pos;neg];

  model = svmtrain( TrainingLabels , Training, '-t 0' );

获得模型后,我使用以下代码测试向量

testing_label_vector = ones(size(mfcc,1),1); % where mfcc is my testing matrix
[predicted_label, a, b ] = svmpredict(testing_label_vector, File.mfcc, model );
edges = [-1,1];
hist = histc( predicted_label , edges )

然而,我发现准确度最高为0%至13%。

我做错了什么事吗?

假设数据是正确的,有人可以建议我如何提高分类器的准确度吗?

1 个答案:

答案 0 :(得分:4)

您需要进行参数选择 - 您只需使用默认参数。 SVM对其参数非常敏感。线性内核没有参数,但您仍然有惩罚参数C.此参数在较大的边距和错误分类的训练点之间进行折衷。较大的C意味着分类器将尝试正确地对所有训练点进行分类,但这可能不会很好地概括。较小的C将允许某些点被错误分类以提供对噪声不太敏感的模型。 C的值对于每个数据集都是不同的,因为它在很大程度上取决于缩放和分布等。您的数据集也可能不是线性可分的,即使对于较低的C值,所以非线性内核可能会更好地工作比如RBF内核,这很受欢迎。但是,请记住,这些内核有更多参数,必须调整它们才能正常工作。

阅读libsvm作者撰写的指南,它讨论了如何进行参数选择,并提供了使用SVM进行分类的其他实用技巧。

徐志伟,张志忠和林志仁的

A Practical Guide to Support Vector Classication