Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clc
- clear all;
- close all;
- I = 1000; % ilość klas
- n = 2 ; % ilośc atrybutów
- eta = 0.5 ;
- W = zeros(1,n+1) ; % ilośc wag
- k = 0 ;
- % wektro X zawierający macierz
- % gdzie 1 kol = rand 0-1 czyli X
- % 2 kol do 500 ma max 0.4 a od 501 ma od 0.6 do 1 czyli Y na plocie
- X=rand(I,1);
- X(:,2)=rand(I,1);
- X(1:I/2,2)=X(1:I/2,2).*0.4;
- X(I/2+1:I,2)=X(I/2+1:I,2).*0.4+0.6;
- % wektor X z wektorem jedynek
- X=[ones(I,1),X];
- Y=[ones(I/2,1)*(-1);ones(I/2,1)];
- A=[1 2 3];
- k=0;
- while isempty(A)~=1
- A=[];
- for i=1:1:I
- s=X(i,:)*W';
- y=-1;
- if s==0 || s>0
- y=1;
- end
- if y~=Y(i)
- A=[A;i];
- end
- end
- k=k+1;
- if isempty(A)
- break
- end
- idx=randi(length(A));
- W=W+eta*Y(A(idx))*X(A(idx),:);
- %% to można dać za display k
- %rysowanie zbioru punktów
- clf % czysci plota
- plot(X(1:I/2,2),X(1:I/2,3),'x')
- hold on
- plot(X(I/2+1:I,2),X(I/2+1:I,3),'o')
- %rysowanie prostej
- X1 = 0:0.05:1;
- X2 = -(W(1)+W(2)*X1)/W(3) ;
- hold on
- plot(X1,X2,'r');
- pause(0.2);
- %%
- end
- display(k);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement