Full SVM implementation
Today I'm going to present you how to implement a simple Support Vector Machine for 'XOR' Gate in basic. Actually there is a built-in command for SVM in Matlab. but you can't find a clear understanding about SVM through it.% SVM - XOR
%
% kernel function :- k(x,y) = (1+x.y)^2
% X1 X2 Y
% 0 0 1
% 0 1 -1
% 1 0 -1
% 1 1 1
%
% t1=1, t2=-1, t3=-1, t4=1 and x1=[0,0] , x2=[0,1] , x3=[1,0] , x4=[1,1]
%
% alpha = al
% al1,al2,al3,al4
%
%kfun=(1+x*y)^2;
clc;
t(1)=1;
t(2)=-1;
t(3)=-1;
t(4)=1;
X1 =[0;0];
X2 =[0;1];
X3 =[1;0];
X4 =[1;1];
C=cell(1,4);
C{1,1}=X1;
C{1,2}=X2;
C{1,3}=X3;
C{1,4}=X4;
Val1=cell(4,1);
Val2=cell(4,1);
%simplifying calculation to obtain kernel function
for num=1:4
s1=C{1,num}(1,1)^2;
s2=sqrt(2)*C{1,num}(1,1)*C{1,num}(2,1);
s3=C{1,num}(2,1)^2;
s4=sqrt(2)*C{1,num}(1,1);
s5=sqrt(2)*C{1,num}(2,1);
Val1{num,1}=[1;s1;s2;s3;s4;s5];
Val2{num,1}=Val1{num,1};
end
%values of kernel function
for i=1:4
for j=1:4
multi=0;
targe{i,j}= t(i)*t(j);
for num=1:6
multi=double( Val1{i,1}(num,1)*Val1{j,1}(num,1)+multi);
end
K{i,j}= multi;
end
end
t=cell2mat(targe)
Kval=cell2mat(K)
Hessian= Kval.*t
% Making appropriate matices to perform quadprog
f = [-1; -1; -1;-1];
%constraints with equality
Aeq=[1 -1 -1 1];
Beq=[0];
%lower bound for alphas
lb = zeros(4,1);
% solving quadratic programming problem
[x,fval,exitflag,output,lambda] = quadprog(Hessian,f,[],[],Aeq,Beq,lb);
% solutions for alphas
al=x
count=0;
for i=1:4
if isempty(al(i))
else
count=count+1;
end
end
disp( sprintf( 'Number of support vector machines Ns= %d', count ) );
sum=0;
%Calculating Weight
for i=1:4
sum=al(i)*t(i)*Val1{i,1}+sum ;
end
disp( sprintf( 'Weight of support vector machine' ) );
Weight=sum
%Calculating Bias
calc=0;
fin=0;
for i=1:4
for j=1:4
calc=al(j)*t(j)*Kval(i,j)+calc;
end
fin=t(i)-calc+fin;
calc=0;
end
disp( sprintf( 'Bias of support vector machine' ) );
bias=fin/4
%testing svm
out1=transpose(Weight)*Val1{1,1}+bias;
out2=transpose(Weight)*Val1{2,1}+bias;
out3=transpose(Weight)*Val1{3,1}+bias;
out4=transpose(Weight)*Val1{4,1}+bias;
%printing resutls
disp( sprintf( 'Output resuts of svms') );
disp( sprintf( 'Input X1= %d', out1 ) );
disp( sprintf( 'Input X2= %d', out2 ) );
disp( sprintf( 'Input X3= %d', out3 ) );
disp( sprintf( 'Input X4= %d', out4 ) );
Download Project Files
Multiple SVM Classification (One Vs All)
3 Classes classification
for i=1:3
svmStruct(i) = svmtrain(RBFoutput,group{i,1},'showplot',true);
end
for j=1:size(RBFoutput)
for k=1:3
if(svmclassify(svmStruct(k),RBFoutput(j,:)))
break;
end
end
result(j) = k;
end
Thanks for the code. but multiple svm classification code is not clear.
ReplyDeleteAndrew,
DeleteIn multiple svm classification I train my each model separately. then I classify them. you can see it in for loops
These codes are matlab built in codes