function [out,prob] = svmdecision_ML(Xnew,svm_struct) %SVMDECISION evaluates the SVM decision function alpha = svm_struct.SupportVectors.Alpha; Xsv = svm_struct.SupportVectors.X; Ysv = svm_struct.SupportVectors.Y; bias = svm_struct.Bias; kfun = svm_struct.KernelFunction; kfunargs = svm_struct.KernelFunctionArgs; Xtraining = svm_struct.TrainingData.X; Ytraining = svm_struct.TrainingData.Y; indGroupA = find(Ytraining == min(Ytraining)); indGroupB = find(Ytraining == max(Ytraining)); Ytraining(indGroupA) = 1; Ytraining(indGroupB) = 2; %do a logit regression on teh training data to get a fit for the %probability k = feval(kfun,Xtraining,Xsv,kfunargs); ftraining = k*(alpha.*Ysv) + bias; beta = mnrfit(ftraining, Ytraining); %by equ (13) in http://cs229.stanford.edu/notes/cs229-notes3.pdf k = feval(kfun,Xnew,Xsv,kfunargs); %if Xnew is nxd and sv is mxd, k is nxm f = k*(alpha.*Ysv) + bias; out = double(f>0); prob = mnrval(beta, f); prob = prob(:,2);