2012-03-29 11 views
1

음성 벡터에서 svm을 실행하여 얻은 정확도가 낮습니다. 데이터가 잘못되지 않았 음을 확인하고 좋은 결과를 얻으려면 naives 베이 분류기를 사용했습니다.SVM + matlab 및 libsvm의 정확도가 매우 낮습니다

먼저 교육 및 테스트를 위해 동일한 파일을 사용하지 않는다는 것을 확인해야합니다.

나는

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) 

그러나 내가 찾아 다음 코드를 사용하여 내가 벡터를 테스트하고있는 모델을 취득 후 교육

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'); 

사용 긍정과 부정 클래스에 대한 데이터 세트를 가지고 정확도는 최대 0 % ~ 최대 13 %입니다.

내가 잘못하고있는 것이 있습니까?

데이터가 정확하다고 가정하면 누군가가 분류 자의 정확성을 향상시킬 수있는 방법을 제안 할 수 있습니까?

+3

당신이 0-13% 정확도를 받고 있다면, 당신의 분류의 의미를 뒤집어 당신은 87-100를 얻을 수 있습니다 %! –

답변

4

매개 변수 선택을해야합니다. 기본 매개 변수 만 사용하고 있습니다. SVM은 매개 변수에 매우 민감합니다. 선형 커널에는 매개 변수가 없지만 여전히 페널티 매개 변수 C가 있습니다.이 매개 변수는 큰 여백과 잘못 분류 된 학습 점 사이에서 교환됩니다. C가 클수록 분류기가 모든 학습 포인트를 올바르게 분류하려고 시도하지만 이것이 일반화되지 않을 수도 있습니다. C가 작 으면 노이즈에 덜 민감한 모델을 제공하기 위해 일부 포인트를 잘못 분류 할 수 있습니다. C의 값은 스케일링과 배분 등에 크게 의존하기 때문에 모든 데이터 세트마다 다릅니다. C의 값이 낮을지라도 데이터 집합이 선형으로 분리되지 않을 수도 있습니다. 따라서 비선형 커널이 더 잘 작동 할 수 있습니다. RBF 커널과 같이 널리 사용됩니다. 그러나 커널에는 매개 변수가 더 많으므로 잘 작동하도록 조정해야합니다.

libsvm의 저자가 작성한 가이드를 읽고 매개 변수 선택 방법에 대해 설명하고 SVM을 분류에 사용하는 데 유용한 다른 팁을 제공합니다.

친 웨이 슈, 친 - 정 장 및 친 - 젠 린에 의해

A Practical Guide to Support Vector Classication

관련 문제