%Algorithme LVQ appliqué aux données Iris function lvq_iris fid=fopen('iris.data', 'rt'); for i=1:150 car(i,1)=fscanf(fid, '%f', 1); txt=fscanf(fid, '%c', 1); car(i,2)=fscanf(fid, '%f', 1); txt=fscanf(fid, '%c', 1); car(i,3)=fscanf(fid, '%f', 1); txt=fscanf(fid, '%c', 1); car(i,4)=fscanf(fid, '%f', 1); txt=fscanf(fid, '%c', 1); nom=fscanf(fid, '%s', 1); end fclose(fid); %Création d'un tableau d'indices for i=1:50 Tc(i)=1; Tc(i+50)=2; Tc(i+100)=3; end; Tc T=ind2vec(Tc) cible=full(T) net=newlvq(minmax(car'),3,[1/3 1/3 1/3], 0.1); for i=1:4 %initialisation des 3 vecteurs poids à la moyenne de 4 exemples, pour chaque classe w(1,i)=(car(1, i)+car(2, i)+car(3, i)+car(4, i))/4; w(2,i)=(car(50+1, i)+car(50+2, i)+car(50+3, i)+car(50+4, i))/4; w(3,i)=(car(100+1, i)+car(100+2, i)+car(100+3, i)+car(100+4, i))/4; end net.IW{1}=w; net.trainParam.epochs=1000; net=train(net,car',T); W=net.IW{1,1}; Y=sim(net,car') %Statistiques classification (taux d'erreurs) sum(sum(abs(Y-cible))/2)/150*100 %Affichage de Sammon w=net.IW{1,1} for i=1:4 %on rajoute un point par classe car(151, i)=w(1,i); %qui servira à visualiser les vecteurs car(152, i)=w(2,i); %poids des neurones(=représentants des car(153, i)=w(3,i); %classes end S = som_sammon(car,2,0.1,'errlimit'); clf %effacement figure plot(S(1:50,1), S(1:50,2), '+'); %affichage des 50 premières données hold on plot(S(51:100,1), S(51:100,2), 'o'); %affichage des 50 suivantes hold on plot(S(101:150,1), S(101:150,2), 'x'); %etc plot(S(151,1), S(151,2), '+r'); %affichage des vecteurs poids hold on plot(S(152,1), S(152,2), 'or'); hold on plot(S(153,1), S(153,2), 'xr'); hold off