Buscar

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

Continue navegando