Prévia do material em texto
Universidade Federal do Ceará Centro de Tecnologia Departamento de Engenharia Elétrica Disciplina: Inteligência Computacional Aplicada Enviar para: ica@dee.ufc.br Geraldo Henrique Costa 398276 Criei valores aleatórios para os W usando gerador aleatório do google Treinamento Wo W1 W2 W3 W0 W1 W2 W3 Epocas 1 0,4533 0,8493 0,1270 0,9706 -3,0653 1,5526 2,4733 -0,7324 445 2 0,3319 0,4419 0,1419 0,0419 -2,9276 1,4230 2,4752 -0,7287 667 3 0,6474 0,2211 0,0313 0,5833 -3,0225 1,5410 2,4698 -0,7339 689 4 0,4594 0,9981 0,9321 0,1255 -3,1028 1,5372 2,4737 -0,7346 563 5 0,1603 0,7780 0,5390 0,976 -3,0582 1,5270 2,4735 -0,7326 478 Com o Perceptron treinado, ele foi colocado em operação, sendo aplicado na classificação automática das amostras de óleo da Tabela 2, indicando nesta tabela os resultados das saídas referentes aos cinco processos de treinamento realizados. Matriz final -0,7508 0,1067 4,0341 -1 -1,4192 0,8896 6,7605 -1 3,085 0,6746 11,071 -1 0,2326 1,1476 7,7985 1 0,6418 1,0434 7,0427 1 0,2549 0,673 7,3265 -1 0,9155 0,6343 7,4446 1 0,0914 0,3399 7,0677 -1 0,0121 0,5256 4,6316 1 -0,0429 0,466 5,4323 1 0,434 0,687 8,2287 -1 0,2735 1,0287 7,1934 1 0,4839 0,4851 7,485 -1 0,4089 -0,1267 5,5019 -1 1,4391 0,1614 8,5843 -1 -0,9115 -0,1973 2,1678 -1 0,3654 1,0475 7,4858 1 0,2144 0,7678 7,1699 1 0,2013 1,0014 6,5489 1 0,6483 0,2183 5,8991 1 -0,1147 0,2223 7,2435 -1 -0,797 0,8795 3,8462 1 -1 ,0625 0,6366 2,4707 1 0,5307 0,1285 5,6883 1 -1,22 0,7612 1,7252 1 0,3957 0,1076 5,6623 -1 -0,1013 0,5923 7,1812 -1 2,1232 0,9455 9,2095 1 2,0149 0,6562 10,5663 -1 0,2312 0,2611 5,4631 1 4) Explique por que o número de épocas de treinamento, em relação a esta aplicação, varia a cada vez que executamos o treinamento do Perceptron. R: Como os valores e pesos inicias variam aleatoriamente nesse exemplo, o tempo de convergência depende desses valores. Se por acidente enviassem números aleatórios perfeitos, poderia convergir quase instantaneamente. 5) Para a aplicação em questão, discorra se é possível afirmar se as suas classes são linearmente separáveis. R: Como a rede conseguiu classificar as duas classes podemos afirmar que ela é linearmente separável. CODIGO FONTE: Consegui na internet um exemplo no MATHLAB então somente adaptei clear all; close all; clc; load('dados_geraldo.txt' ); xin = [ -ones(1,length(dados_geraldo)); dados_geraldo (:,1)'; %Variável x1 dados_geraldo (:,2)'; %Variável x2 dados_geraldo (:,3)']; %Variável x3 n = 0.01; %Taxa de aprendizado num_max = 500; %Número máximo de iterações d = dados_geraldo (:,4)'; %Saída desejada [l,c] = size(xin); %Tamanho dos dados eee = 0; for t = 1:5 figure(t); w = rand(l,1); %Vetor inicial de pesos w_inicial = w; %Vetor inicial de pesos (para salvar) erro = 1; %Erro existe (Chute inicial) i = 0; %Epóca 0 while (i<=num_max && erro~=0) erro = 0; %Erro não existe for k = 1:length(xin) u = w'*xin(:,k); %Potencial de ativação y = sign(u); %Sinal de saída if(y~=d(k)) w = w + n*(d(k) - y)*xin(:,k); %Cálculo dos novos pesos erro = 1; %Erro existe eee(i+1) = (d(k) - y); end end plot(eee); hold on; grid on; i=i+1; %Conta mais uma época end Matriz_w_inicial(:,t) = w_inicial; Matriz_w(:,t) = w; Matriz_epoca(:,t) = i; end save ('resultado_treino.txt' ,'Matriz_w_inicial' ,'Matriz_w','Matriz_epoca' , '-ascii'); ALGORITIMO DE OPERAÇÃO clear all; close all; clc; load('dados_operacao.txt' ); load('resultado_treino.txt' ); xin = [ -ones(1,length(dados_operacao)); %Bias (b) dados_operacao(:,1)'; %Variável x1 dados_operacao(:,2)'; %Variável x2 dados_operacao(:,3)']; %Variável x3 w_inicial = resultado_treino(1:4,:); w = resultado_treino(5:8,:); epoca = resultado_treino(9,:); disp('Resultados:') disp(' '); disp(' '); for o = 1:5 u = w(:,o)'*xin; %Potencial de ativação y(o,:) = sign(u); %Sinal de saída [classe_a,classe_b,na,nb] = separaclasse(u,w(:,o),xin); disp(['DADOS DE OPERAÇÃO PARA O ' ,num2str(o),'° TREINAMENTO:']); disp(' '); disp(['Os dados classificados na classe A são:' ]); classe_a disp(['Os dados classificados na classe B são:' ]); classe_b disp(['O número de elementos classificados na classe A é igual a: ',num2str(na)]); disp(['O número de elementos classificados na classe B é igual a: ',num2str(nb)]); disp(' '); disp(' '); end Função para separação de classes. function [classe_a,classe_b,na,nb]=separaclasse(u,w,xin) %Separação de Classes u = w'*xin; %Potencial de ativação y = sign(u); xn = xin(2:end,:); 13 a = 1; b = 1; for i = 1:length(y) if(y(i)==-1) classe_a(:,a) = xn(:,i); a = a + 1; elseif(y(i)==1) classe_b(:,b) = xn(:,i); b = b + 1; end end na = length(classe_a); nb= length(classe_b); end function [classe_a,classe_b,na,nb]=separaclasse(u,w,xin) %Separação de Classes u = w'*xin; %Potencial de ativação y = sign(u); xn = xin(2:end,:); 13 a = 1; b = 1; for i = 1:length(y) if(y(i)==-1) classe_a(:,a) = xn(:,i); a = a + 1; elseif(y(i)==1) classe_b(:,b) = xn(:,i); b = b + 1; end end na = length(classe_a); nb= length(classe_b); end