You are on page 1of 10

Redes Neurais Artificiais

Exerccio Prtico #06



Implementar o neurnio Adaline (funo de ativao linear) no SCILAB e aplic-lo na
regresso linear de dados de uma dimenso:
1 - Criar a funo "yadaline" que calcula a sada do neurnio Adaline.
Declarao: function y = yadaline(X,W,b)
onde:
X = matriz (m x t) de dados com t amostras de m caractersticas (m entradas);
W = vetor linha (1 x m) de pesos das entradas;
b = polarizao do neurnio;
y = valor da sada no neurnio.
//1
function y=yadaline(x, w, b)
y=w*x + b;
endfunction

2 - Gerar um vetor (1 x t) de dados de entrada (uma entrada apenas com t amostras) e um vetor
(1 x t) de dados de sada correspondente, segundo uma reta crescente. Plotar o grfico dos
dados.
x1 = [0:5:100]
y1 = 0.64*x1+1
Plotar o grfico dos dados.
scf(0)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e dados amostrados sem rudos'); //Nomeia o titulo
plot(x1,y1, 'Co')


3 - Criar a funo "treina_adaline" que treina o neurnio Adaline (funo idntica a funo
"treina_perceptron" desenvolvida em exerccio anterior), e use-a com os dados do item 2 para
fazer a regresso linear dos dados. Usar a funo "mistura", implementada em exerccio
anterior, no incio de cada poca de treinamento.
//1
function y=yadaline(x, w, b)
y=w*x + b;
endfunction

//Mistura

function [xp, cp]=mistura(x, c)
xp = x;
cp = c;
indiceMisturado = grand(1,'prm',[1:size(x,2)]');
i = [1:size(x,2)];
xp(:,i) = x(:,indiceMisturado);
cp(i) = c(indiceMisturado);
endfunction

//3 - Criar a funo "treina_adaline" que treina o neurnio Adaline...

function [w, b, erroepocas]=treina_adaline(w, b, x1, y1, alfa, maxepocas, tol)
it = 1;
somaErrosAoQuadrado = 1000; // Soma dos erros quadrticos da ltima poca
erroepocas=[]; // Soma dos erros quadrticos das pocas
while (it <= maxepocas & somaErrosAoQuadrado > tol)
somaErrosAoQuadrado = 0;
[xin,yin]=mistura(x1,y1);
for i=1:size(xin,2) // indo at o numero de amostras de X
y = yadaline(xin(:,i),w,b)
erro = yin(i) - y;
somaErrosAoQuadrado = somaErrosAoQuadrado + (erro*erro)

w = w + alfa * erro * xin(:,i)'
b = b + alfa * erro;
end
erroepocas = [erroepocas somaErrosAoQuadrado];
it = it + 1;
end
endfunction


4 - Plotar o grfico com os dados gerados e a reta encontrada pelo Adaline treinado.
//4 - Plotar o grfico com os dados gerados e a reta encontrada pelo Adaline treinado.

x1 = [0:5:100]
y1 = 0.64*x1+1

scf(0)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e dados amostrados sem rudos'); //Nomeia o titulo
plot(x1,y1, 'Co')

w = rand();
b = rand();
alfa = 10^-5;
maxepocas = 50;
tol = 0.001;
[w1,b1,erroepoca]=treina_adaline(w,b,x1,y1,alfa,maxepocas,tol);
dados = [0:5:100];
y=yadaline(dados,w1,b1);

//4 - Plotar o grfico com os dados gerados e a reta encontrada pelo Adaline treinado.

scf(1)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo
plot(x1,y1,'Co')
plot(dados,y,'r')
legend('reta dos dados gerados','reta do adaline');

5 - Plotar a evoluo do erro quadrtico de treinamento do Adaline em funo da poca.
//5 - Plotar a evoluo do erro quadrtico de treinamento do Adaline em funo da poca.
scf(2)
xlabel ('Epoca'); //Nomeia a abscissa
ylabel ('Erro'); //Nomeia a ordenada
title ('Erro X Epoca'); //Nomeia o titulo
plot(erroepoca);





6 - Acrescentar rudo aos dados de sada (utilize a funo "rand" do SCILAB), e repetir os itens
anteriores.


variancia = 0.45;
x1 = [0:5:100];
y_ruido= y1 +(2*rand(1,21,'normal'))*variancia ;
scf(3);
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e dados amostrados com rudos'); //Nomeia o titulo
plot(x1,y_ruido, 'ob');







//Plotar o grfico com os dados com rudo gerados e a reta encontrada pelo Adaline treinado

scf(4)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo

plot(x1,y_ruido,'ob')
plot(dados,y,'r')
legend('amostra com ruidos','reta do adaline');



//Plota a evoluo do erro quadrtico de treinamento do Adaline em funo da poca
scf(6)
xlabel ('Epoca'); //Nomeia a abscissa
ylabel ('Erro'); //Nomeia a ordenada
title ('Erro quadrtico X Epoca');
plot(erroepoca1);




scf(5)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo
plot(x1,y1,'b')
plot(x1,y2,'r')
legend('reta original','reta do adaline');


























//Script completo
//Programa de Treinamento do Perceptron
// Implementar o neurnio Adaline (funo de ativao linear) no SCILAB e aplic-lo na
regresso linear de dados de uma dimenso...

//1

function y=yadaline(x, w, b)
y=w*x + b;
endfunction

//Mistura

function [xp, cp]=mistura(x, c)
xp = x;
cp = c;
indiceMisturado = grand(1,'prm',[1:size(x,2)]');
i = [1:size(x,2)];
xp(:,i) = x(:,indiceMisturado);
cp(i) = c(indiceMisturado);
endfunction

//3 - Criar a funo "treina_adaline" que treina o neurnio Adaline...

function [w, b, erroepocas]=treina_adaline(w, b, x1, y1, alfa, maxepocas, tol)
it = 1;
somaErrosAoQuadrado = 1000; // Soma dos erros quadrticos da ltima
poca
erroepocas=[]; // Soma dos erros quadraticos das epocas
while (it <= maxepocas & somaErrosAoQuadrado > tol)
somaErrosAoQuadrado = 0;
[xin,yin]=mistura(x1,y1);
for i=1:size(xin,2) // indo at o numero de amostras de X
y = yadaline(xin(:,i),w,b)
erro = yin(i) - y;
somaErrosAoQuadrado = somaErrosAoQuadrado + (erro*erro)

w = w + alfa * erro * xin(:,i)'
b = b + alfa * erro;
end
erroepocas = [erroepocas somaErrosAoQuadrado];
it = it + 1;
end
endfunction

//2



x1 = [0:5:100]
y1 = 0.64*x1+1
scf(0)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e dados amostrados sem rudos'); //Nomeia o titulo
plot(x1,y1, 'Co')

w = rand();
b = rand();
alfa = 10^-5;
maxepocas = 50;
tol = 0.001;
[w1,b1,erroepoca]=treina_adaline(w,b,x1,y1,alfa,maxepocas,tol);
dados = [0:5:100];
y=yadaline(dados,w1,b1);


//4 - Plotar o grfico com os dados gerados e a reta encontrada pelo Adaline treinado.

scf(1)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo
plot(x1,y1,'Co')
plot(dados,y,'r')
legend('reta dos dados gerados','reta do adaline');

//5 - Plotar a evoluo do erro quadrtico de treinamento do Adaline em funo da poca.

scf(2)
xlabel ('Epoca'); //Nomeia a abscissa
ylabel ('Erro'); //Nomeia a ordenada
title ('Erro X Epoca'); //Nomeia o titulo
plot(erroepoca);

//Gerando dados e acrescentando rudo

variancia = 0.45;
x1 = [0:5:100];
y_ruido= y1 +(2*rand(1,21,'normal'))*variancia ;

scf(3);
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e dados amostrados com rudos'); //Nomeia o titulo
plot(x1,y_ruido, 'ob');

[w2,b2,erroepoca1]=treina_adaline(w,b,x1,y_ruido,alfa,maxepocas,tol);

dados = [0:5:100];

y2=yadaline(dados,w2,b2);

//Plotar o grfico com os dados com ruido gerados e a reta encontrada pelo Adaline treinado

scf(4)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo

plot(x1,y_ruido,'ob')
plot(dados,y,'r')
legend('amostra com ruidos','reta do adaline');

//Plota a evoluo do erro quadrtico de treinamento do Adaline em funo da poca

scf(5)
xlabel ('X'); //Nomeia a abscissa
ylabel ('Y desejado'); //Nomeia a ordenada
title ('Reta original e obtida com o adaline'); //Nomeia o titulo
plot(x1,y1,'b')
plot(x1,y2,'r')
legend('reta original','reta do adaline');

scf(6)
xlabel ('Epoca'); //Nomeia a abscissa
ylabel ('Erro'); //Nomeia a ordenada
title ('Erro quadrtico X Epoca');
plot(erroepoca1);

You might also like