2016-11-17 1 views
-1

J'essaie de mettre en œuvre SVM pour la classification. L'objectif est de sortir la grille d'origine correcte d'un signal d'alimentation (fichier .wav). Les grilles sont intitulées A-I et il y a 93 signaux au total pour l'ensemble d'entraînement et 49 signaux d'entraînement. J'ai une matrice 93x10x36 de vecteurs de caractéristiques. Est-ce que quelqu'un sait pourquoi je reçois les erreurs montrées? TrainCorrectGrid et Training_Cepstrum1 ont tous deux 93 lignes donc je ne comprends pas quel est le problème. Toute aide est grandement appréciée.Exemple Matlab SVM

Mon code est montré ici:

clc; clear; close all; 

load('avg_fft_feature (4).mat'); %training feature vectors 
load('practice_fft_Mag_all (2).mat'); %practice feauture vectors 
load('practice_GridOrigin.mat'); %correct grids of origin for practice data 
load PracticeCorrectGrid.mat; 
load Training_Cepstrum1; 
load Practice_Cepstrum1a; 
load fSet1.mat %load in correct practice grids 

TrainCorrectGrid=['A';'A';'A';'A';'A';'A';'A';'A';'A';'B';'B';'B';'B';'B';'B';'B';'B';'B';'B';'C';'C';'C';'C';'C';'C';'C';'C';'C';'C';'C';'D';'D';'D';'D';'D';'D';'D';'D';'D';'D';'D';'E';'E';'E';'E';'E';'E';'E';'E';'E';'E';'E';'F';'F';'F';'F';'F';'F';'F';'F';'G';'G';'G';'G';'G';'G';'G';'G';'G';'G';'G';'H';'H';'H';'H';'H';'H';'H';'H';'H';'H';'H';'I';'I';'I';'I';'I';'I';'I';'I';'I';'I';'I']; 
%[results,u] = multisvm(avg_fft_feature, TrainCorrectGrid, avg_fft_feature_practice);%avg_fft_feature); 
[results,u] = multisvm(Training_Cepstrum1(93,:,1), TrainCorrectGrid, Practice_Cepstrum1a(49,:,1)); 
disp('Grids of Origin (SVM)'); 

%Display SVM Results 
for i = 1:numel(u) 
    str = sprintf('%d: %s', i, u(i)); 
    disp(str); 
end 

%Display Percent Correct 
numCorrect = 0; 
for i = 1:numel(u) 
    %if (strcmp(TrainCorrectGrid(i,1), u(i))==1); %compare training to 
    %training 
    if (strcmp(PracticeCorrectGrid(i,1), u(i))==1); %compare practice data to training 
     numCorrect = numCorrect + 1; 
    end 
end 
numberOfElements = numel(u); 
percentCorrect = numCorrect/numberOfElements * 100; 
% percentCorrect = round(percentCorrect, 2); 
dispPercent = sprintf('Percent Correct = %0.3f%%', percentCorrect); 
disp(dispPercent); 

error shown here

La fonction multisvm est montré ici:

function [result, u] = multisvm(TrainingSet,GroupTrain,TestSet) 
%Models a given training set with a corresponding group vector and 
%classifies a given test set using an SVM classifier according to a 
%one vs. all relation. 
% 
%This code was written by Cody Neuburger [email protected] 
%Florida Atlantic University, Florida USA and slightly modified by Renny Varghese 
%This code was adapted and cleaned from Anand Mishra's multisvm function 
%found at http://www.mathworks.com/matlabcentral/fileexchange/33170-multi-class-support-vector-machine/ 

u=unique(GroupTrain); 
numClasses=length(u); 
result = zeros(length(TestSet(:,1)),1); 

%build models 
for k=1:numClasses 
    %Vectorized statement that binarizes Group 
    %where 1 is the current class and 0 is all other classes 
    G1vAll=(GroupTrain==u(k)); 
    models(k) = svmtrain(TrainingSet,G1vAll); 
end 

%classify test cases 
for j=1:size(TestSet,1) 
    for k=1:numClasses 
     if(svmclassify(models(k),TestSet(j,:))) 
      break; 
     end 
    end 
    result(j) = k; 
end 

mapValues = 'ABCDEFGHI'; 
u = mapValues(result); 
+0

Il sera plus facile de répondre si vous placez le code et le message d'erreur dans le texte de la question plutôt que comme des liens vers des images. – doctorlove

Répondre

0

Vous dites que Training_Cepstrum1 a une taille [93,10,36]. Mais quand vous appelez multisvm, vous ne faites que passer en Training_Cepstrum1(93,:,1) qui a la taille [1,10]. Puisque TrainCorrectGrid a la taille [93,1], il y a une discordance dans le nombre de rangées.

Il semble que vous faites la même erreur lors du passage en Practice_Cepstrum1a.

Essayez de remplacer votre appel à multisvm avec

[results,u] = multisvm(Training_Cepstrum1(:,:,1), TrainCorrectGrid, Practice_Cepstrum1a(:,:,1)); 

De cette façon Training_Cepstrum1(:,:,1) a une taille [93,10], le même nombre de lignes que TrainCorrectGrid.

+0

Merci beaucoup. Ça a marché. – user6132277

+0

savez-vous comment multisvm prend des décisions? Je n'arrive pas à comprendre comment fonctionne l'algorithme multisvm dans les coulisses – user6132277