%VQ avec données Iris function vq_iris() fid=fopen('iris.don', 'rt'); nb_cl=3; nb_vec=150; for i=1:nb_vec 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); %inutilisé end fclose(fid); %Apprentissage compétitif non supervisé 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=newc([0 1;0 1;0 1;0 1], nb_cl); %création d'un réseau de 'nb_cl' neurones net.trainParam.epochs=1000; net.IW{1}=w; %net.inputWeights{1,1}.initFcn='rands'; net=train(net,car'); %apprentissage %Test par ré-application de la même base d'exemples for j=1:nb_cl %taux de reconnaissance pour chaque classe for i=1:nb_cl compt(i)=0; end for i=1:nb_vec ex=car(i,:); a=vec2ind(sim(net, ex')); if a==j compt(a)=compt(a)+1; end end for i=1:nb_cl compt(i) end end %Affichage de Sammon w=net.IW{1} for i=1:4 %on ajoute les poids des neurones aux vecteurs de données car(151, i)=w(1,i); car(152, i)=w(2,i); car(153, i)=w(3,i); end S = som_sammon(car,2,0.1,'errlimit'); clf %effacement figure plot(S(151,1), S(151,2), '+r'); hold on plot(S(152,1), S(152,2), 'or'); hold on plot(S(153,1), S(153,2), 'xr'); hold on; 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'); hold off