1. Să se implementeze algoritmul perceptron pentru clasificarea datelor provenite din două clase şi să se realizeze un studiu comparativ privind performanţele de recunoaştere cu algoritmul de clasificare kmeans. Să se pună în evidenţă (grafic) procentele de corect clasificare obţinute atât pentru perceptron cât şi pentru kmeans în cazurile în care datele au o repartiţie normală şi, respectiv, uniformă.
%perceptron 1-neuron
%2D input
clf;
%initializarea si antrenarea perceptronului
P = [0.0 1.0 -0.5 0.0 ;1.0 0.3 -0.5 -1.0];
T = [1 1 0 0];
subplot(1,4,1);
[W,b] = initp(P,T);
[W,b,epochs,errors] = trainp(W,b,P,T,-1);
plotpv(P,T);
plotpc(W,b);
%vectorii erorilor CPerceptron CKmeans
CP=[];
CK=[];
for k=10:50:210
%data rapartizare uniform
X=rand(1,k)-0.5;
Y=rand(1,k)-0.5;
%data rapartizare normal
%X=randn(1,k)-0.5;
%Y=randn(1,k)-0.5;
%matricea cu date de test
testData=[X;Y];
%simulare perceptron
a = simup(testData,W,b)
plotpv(testData,a);
plotpc(W,b);
%vectorul repartizarilor corect in clase
corect=[];
for i=1:1:size(X,2)
if((X(1,i)+Y(1,i))>0) corect=[corect; 1]
else corect=[corect; 0]
end
end
td=testData';
subplot(1,4,2);
plot(td(corect==0,1),td(corect==0,2),'r.', td(corect==1,1),td(corect==1,2),'b.');
a = simup(testData,W,b);
subplot(1,4,3);
plotpv(testData,a);
plotpc(W,b);
%calcul erori perceptron
cp=0;
for i=1:1:size(a,2)
if(double(a(1,i))~=corect(i,1)) cp=cp+1;
end
end
disp(cp);
CP=[CP cp];
%antrenare algoritm kmeans
[cidx, ctrs] = kmeans(td, 2,'Start',[0.0 -1.0;1.0 0.3]);
subplot(1,4,4);
plot(td(cidx==1,1),td(cidx==1,2),'r.', td(cidx==2,1),td(cidx==2,2),'b.', ctrs(:,1),ctrs(:,2),'kx');
%calcul erori kmeans
ck=0;
for i=1:1:size(cidx,1)
if(cidx(i,1)~=(corect(i,1)+1)) ck=ck+1;
end
end
disp(ck);
CK=[CK ck];
end
bar([CP;CK],'group');
Pentru a descărca acest document,
trebuie să te autentifici in contul tău.