支持向量机+的准确度非常低;matlab与libsvm

支持向量机+的准确度非常低;matlab与libsvm,matlab,svm,libsvm,Matlab,Svm,Libsvm,我无法计算在语音向量上运行svm所获得的低精度。我已经交叉验证了数据没有错,甚至对其使用了naives bayes分类器以获得良好的结果 首先,我应该提到,我已经验证了我没有使用相同的文件进行培训和测试 我有一套用于培训的正面和负面课程的数据 pos = ones(size(PositiveTraining,1),1); neg = ones(size(NegativeTraining,1),1)*-1; Training = [ PositiveTraining ; Nega

我无法计算在语音向量上运行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%最大

我做错什么了吗


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

您需要进行参数选择-您只是使用默认参数。支持向量机对其参数非常敏感。线性核没有参数,但仍然有惩罚参数C。该参数在较大的裕度和错误分类的训练点之间进行权衡。较大的C表示分类器将尝试正确分类所有训练点,但这可能不能很好地推广。较小的C将允许对某些点进行错误分类,以提供对噪声不太敏感的模型。每个数据集的C值都不同,因为它在很大程度上取决于缩放和分布等。数据集也可能不是线性可分离的,即使是C值较低的数据集,因此非线性核可能会更好地工作,例如流行的RBF核。但是,请记住,这些内核有更多的参数,必须对它们进行调整才能正常工作

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


徐志伟、张志忠和林志仁

您需要进行参数选择-您只需使用默认参数。支持向量机对其参数非常敏感。线性核没有参数,但仍然有惩罚参数C。该参数在较大的裕度和错误分类的训练点之间进行权衡。较大的C表示分类器将尝试正确分类所有训练点,但这可能不能很好地推广。较小的C将允许对某些点进行错误分类,以提供对噪声不太敏感的模型。每个数据集的C值都不同,因为它在很大程度上取决于缩放和分布等。数据集也可能不是线性可分离的,即使是C值较低的数据集,因此非线性核可能会更好地工作,例如流行的RBF核。但是,请记住,这些内核有更多的参数,必须对它们进行调整才能正常工作

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


许志伟、张志忠、林志仁

如果你的分类准确率为0-13%,只要把分类的意义翻过来,你就可以得到87-100%!如果你得到了0-13%的准确率,只要把分类的意义翻过来,你就会得到87-100%!