Você está na página 1de 3

UNIVERSIDADE FEDERAL DE VIÇOSA - DEPARTAMENTO DE ENGENHARIA ELÉTRICA

Disciplina: ELT 460 – Inteligência Computacional

LISTA 1
UNIVERSIDADE FEDERAL DE VIÇOSA - DEPARTAMENTO DE ENGENHARIA ELÉTRICA
Disciplina: ELT 460 – Inteligência Computacional

Igor Henrique Beloti Pizetta #56214

EXERCÍCIO 1 de separação entre as saídas, que são


doente ou saudável.
O código fonte do anexo 1 pega três classes de b) Testando novos casos para testar a
pontos distintos em um plano bi-dimensional e os rede, temos como resposta:
separa em classes, utilizando dois perceptrons. a. Saudável para o primeiro caso
Com isso pudemos obter os seguintes b. Doente para o segundo caso
resultados: Vale lembrar que dependendo da reta que a
rede cria, às vezes, o primeiro caso pode se
tornar doente. Isso ocorre, pois seis casos
20
para treinar uma rede é muito pouco, seria
bom se existissem mais entradas para treinar
15
melhor a rede.

10

5
EXERCÍCIO 3

A partir do banco de dados anexado no


0
pvanet, pegamos 80% dos valores da tabela,
exatamente 216 casos e treinamos um perceptron
-5
para saber quais são os sintomas que levam uma
pessoa a ter um problema cardíaco. Mais tarde
-10
0 1 2 3 4 5 6 7 usaremos os outros 20% para testar se nossa rede
apresenta um resultado apresentável.
Figura 1.0 – Distribuição dos pontos e reta de decisão Com o código fonte do anexo 3, pudemos
obter os seguintes resultados :
1
0.6
0.9
0.55
0.8
0.5
0.7
0.45
0.6
0.4
0.5
0.35
0.4
0.3
0.3
0.25
0.2
0.2
0.1
0.15
0
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
0.1
0 0.5 1 1.5 2 2.5 3
Figura 2.0 – Erro quadrático médio por n de iterações 4
x 10

Figura 3.0 – Erro quadrático medio

EXERCÍCIO 2 - Erro de treinamento da rede (relação entre a


saída no treinamento e da saída desejada) =
A partir da tabela com os sintomas e
diagnósticos, treinamos um perceptron para separar 86,11%
os casos: - Erro cometido na validação da rede : 83,33%
a) O Código fonte do anexo 2 pega as - Os pesos obtidos para cada entrada no
entradas da tabela, cria um superplano treinamento da rede :

1
UNIVERSIDADE FEDERAL DE VIÇOSA - DEPARTAMENTO DE ENGENHARIA ELÉTRICA
Disciplina: ELT 460 – Inteligência Computacional

o -0.1343 if e(i,1) ~= 0
o +0.5253 w1 = w1 +
o +1.1241 e(i,1)*eta.*x(i,:);
b1 = b1 - e(i,1)*eta;
o +0.1195
erro = 1;
o +0.0014 end
o -0.0857 if e(i,2) ~= 0
o +0.4045 w2 = w2 +
o -0.2302 e(i,2)*eta.*x(i,:);
o +0.4689 b2 = b2 - e(i,2)*eta;
o +0.9840 erro = 1;
end
o +0.3572
for j = 1:max(size(x(:,2)))
o +1.3083 if j <= max(size(x(:,2)))/3
o +2.4179
o -0.0117 plot(x(j,1),x(j,2),'r*');
hold on;
Com os dados apresentados, vemos que elseif j <=
nossa rede foi bem treinada e apresenta um 2*(max(size(x(:,2)))/3)
resultado considerável.
plot(x(j,1),x(j,2),'k*');
else
ANEXO 1
plot(x(j,1),x(j,2),'g*');
%Declaração end
end
num = num/3; eq(n) = eq(n) + e(i,1)^2 +
eta = 0.1; e(i,2)^2;
w1 = [1 2]; i = i+1;
w2 = [2 1]; end;
b1 = 1.5; eq(n) = eq(n)/(i-1);
b2 = 2; n = n + 1;
x1 = 1 + rand(2,num); if n == 20
x2 = 2 + randn(1,num); display ('Número de iterações
x22 = 8 + 0.15*randn(1,num); chegou ao máximo!');
x222 = [x2; x22]; erro = 0;
x3 = 5 + 0.25*randn(2,num); end
x = [x1'; x222'; x3';]; if erro == 1
s0 = zeros(1,num); i = 1;
s1 = ones(1,num); end
s = [s0 s0 s1; s0 s1 s0]'; x11 = 0:0.01:7;
x21 = b1/w1(2) - (w1(1)/w1(2))*x11;
%Considerações para o while plot(x11,x21);
erro = 1;
i = 1; x12 = 0:0.01:7;
n = 1; x22 = b2/w2(2) - (w2(1)/w2(2))*x12;
y = zeros(max(size(x)),2); plot(x12,x22);
eq = zeros(max(size(x)),1);
pause(0.05);
while erro == 1 hold off;
erro = 0; end
while i <= max(size(x)) figure();
for k = 1:n
aux1 = x(i,1)*w1(1) + plot(k,eq(k), 'ro');
x(i,2)*w1(2) - b1; hold on;
aux2 = x(i,1)*w2(1) + end
x(i,2)*w2(2) - b2;
y(i,1) = hardlim(aux1);
y(i,2) = hardlim(aux2);
e(i,:) = s(i,:) - y(i,:);

2
UNIVERSIDADE FEDERAL DE VIÇOSA - DEPARTAMENTO DE ENGENHARIA ELÉTRICA
Disciplina: ELT 460 – Inteligência Computacional

ANEXO 2 ANEXO 3

%% Declaração %% Declaração
v.febre = [1 0 1 1 1 0]; database =
v.enjoo = [1 0 1 0 0 0]; load('C:\Users\Budefora_2\Desktop\Elt
v.manchas = [0 1 0 1 0 1]; 460\Lista 1\heart.m');
v.dores = [1 0 0 1 1 1]; Xin = [database(1:216,1)
v.diagnostico = [1 0 0 1 0 1]; database(1:216,2) database(1:216,3)
database(1:216,4) database(1:216,5)
Xin = [v.febre; v.enjoo; v.manchas; database(1:216,6) database(1:216,7)
v.dores]; database(1:216,8) database(1:216,9)
Xout = [v.diagnostico]; database(1:216,10) database(1:216,11)
[i,j] = size(Xin); database(1:216,12) database(1:216,13)];
W = randn(1,4); %Vetor de pesos do Xout = [database(1:216,14) -
treinamento ones(1:126,1)];
b = randn; Xteste = [h(217:270,1:13),-ones(54,1)];
Yteste = h(217:270,14)-ones(54,1);
tx.apr = 0.3; [it,jt] = size(Xteste);
v.int = 100; %numero de interacoes W = randn(1,j); %Vetor de pesos
contador = 0; tx.apr = 3;
int = 30000; %numero de interacoes
%% Treinamento Yt = zeros(1,i);
for l=1:v.int Yv = zeros(1,it);
for k=1:j %% Treinamento
Y(k) = Yt = hardlim(Xin*W');
hardlim(Xin(1,k)*W(1)+Xin(2,k)*W(2)+Xin e = Yd - Yt;
(3,k)*W(3)+Xin(4,k)*W(4)-b); l=1;
e = Xout(k) - Y(k); Verro = [];
while ( e ~= 0 ) VerroT = [];
if contador == v.int while ( l<(n.int+1) )
disp(['Numero maximo de W = W + (tx.apr*e'*Xin);
interacoes atingida: ', num2str(n.int), Yt = hardlim(Xin*W');
' interacoes']) e = Yd-Yt;
break; erro = mean(e.^2);
end Verro(l) = erro;
W = W + tx.apr*e*Xin(:,k)'; W1(l,:) = W;
b = b - tx.apr*e; [mine, minp] = min(Verro);
disp(['Pesos: ', num2str(W)]); disp(['Numero de interacoes: ',
Y(k) = num2str(l)]);
hardlim(Xin(1,k)*W(1)+Xin(2,k)*W(2)+Xin %%Validacao
(3,k)*W(3)+Xin(4,k)*W(4)-b); Yv = hardlim(Xteste*W');
e = Xout(k) - Y(k); eV = Yteste-Yv;
erroT = mean(eV.^2);
VerroT(l) = erroT;
disp(['Saída: ', num2str(Y)]); [mineT, minpT] = min(VerroT);
contador = contador+1; BPesos = W1(minpT,:);
end l=l+1;
end end
end clc
disp(['No total foram ', disp(['Menor erro encontrado no
num2str(contador), ' interacoes!']); treinamento da rede: ',
num2str(mine)]);
disp(['Menor erro quadratico medio da
validacao: ', num2str(mineT)]);
disp('Pesos utilizado para validacao');
disp('Pesos: '); BPesos(1:13)

plot(1:l-1,Verro(1:l-1),'b',1:l-
1,VerroT(1:l-1),'r')

Você também pode gostar