1

I am using $\chi^{2}$ kernel for non-linear SVM (using libSVM) for classifying MNIST digits. I am getting very bad performance (worse than random guessing). The $\chi^{2}$ kernel code (in MATLAB) is as follows:

function D = chi2_kernel(X,Y)
%Computes the chi2 kernel for two Matrices X and Y

 D = zeros(size(X,1),size(Y,1));

for i = 1:size(Y,1)

    d = bsxfun(@minus,X, Y(i,:));
    s = bsxfun(@plus,X,Y(i,:));
    D(:,i) = sum(d.^2 ./ (s/2),2);
end

D = exp(-0.0001.*(1-D));

end

Using this I computed the kernel matrix as follows :

% Gram matrix for chi2 kernel
 dist = chi2_kernel(X_train2,X_train2);
dist1 = chi2_kernel(X_test,X_train2);

% Gram matrix for training set to training set


KTrT = [(1:numTrain/50)', dist];

% Gram matrix for training to test set 

KTT = [(1:numTest)', dist1];


model = svmtrain(Y_train2, KTrT,'-t 4');

predClass = svmpredict(Y_test, KTT,model);

Does anyone have suggestions for how to better optimize this code, or an explanation for why I'm observing such poor performance?

Kyle.
  • 1,483
  • 1
  • 16
  • 32
SHASHANK GUPTA
  • 3,745
  • 4
  • 18
  • 26

0 Answers0