MatLab RN Adaline Com Fucao Limiar

4
%% clean-up inicialização close all clear all % clc percentualAmostrasValidacao=50/100; funcaoAvaliacao='limiar'; tempo_treinamento = 10000; % quantidade maxima de épocas de treinamento epoca=1; % treinamento inicia na época 1 %% ler dados de treinamento % % Estou admitindo que as amostras x[i] e o valor desejado d[i], % estão na primeira planilha da pasta excell. % Pode ter tantas variaveis x quanto desejado, ou necessário % a variável header contém o nome das variaveisa de treinamento. [x header]=xlsread('D:\mestrado\matematica\redes neurais\RNA01\dadosTreinamento\Tabela#Seção4.6_RNA.xls','plan1'); [ qtdPontos qtdCaracteristicasX]=size(x); %% monta saidas desejadas - d[i] - vetor coluna % saidas desejadas: ultima coluna dos dados de treinamento d=x( : ,qtdCaracteristicasX); %% cria bias - b[i] - vetor coluna % bias - elemento que indica a direção. % vem do Latim e significa em sua origem: via ou estrada, dai o % ditado: "Todas as vias nos levam a Roma", na época do Imperio % Romano, as vias bem estruturadas foram construidas pelo Romanos % e todas, talvez com poucas excessões de fato levavam a Roma. % % Queres encurtar o caminho: "ab via" - % vá para a via, la a caminhada é mais rapida, e voce pode % 'abreviar' o tempo de caminhada. % % Queres que todo saiba: "ab via" % Todo mundo : vaijantes, comerciantes, andarilhos passam pela % via, logo se estiver "ab via", na via ao lado da via todos vão % ver. Isto aumenta tambem sua chance de vender. % % É obvio que obvio que de "ab via" --> "ob via" --> "obvia" -- obvio % viajem - tempo passado na via % viajante - aquele que andqa na via % % Pensas diferente? Encontrastes uma caminho (via) para fazer: temos % então um novo "viéz" % % A fim de não "enviezar" muito, e para tornar "obvio" o sentido de "bias": % Bias é viéz, direção, linha direcionadora, tendencia. % % Mas o que que tem a ver o "b" de bias e o "v" de via? % Existe um resposta, mas isto é outra conversa

Transcript of MatLab RN Adaline Com Fucao Limiar

Page 1: MatLab RN Adaline Com Fucao Limiar

%% clean-up inicialização close all clear all % clc percentualAmostrasValidacao=50/100; funcaoAvaliacao='limiar'; tempo_treinamento = 10000; % quantidade maxima de épocas de treinamento epoca=1; % treinamento inicia na época 1 %% ler dados de treinamento % % Estou admitindo que as amostras x[i] e o valor desejado d[i], % estão na primeira planilha da pasta excell. % Pode ter tantas variaveis x quanto desejado, ou necessário % a variável header contém o nome das variaveisa de treinamento. [x header]=xlsread('D:\mestrado\matematica\redes neurais\RNA01\dadosTreinamento\Tabela#Seção4.6_RNA.xls','plan1'); [ qtdPontos qtdCaracteristicasX]=size(x); %% monta saidas desejadas - d[i] - vetor coluna % saidas desejadas: ultima coluna dos dados de treinamento d=x( : ,qtdCaracteristicasX); %% cria bias - b[i] - vetor coluna % bias - elemento que indica a direção. % vem do Latim e significa em sua origem: via ou estrada, dai o % ditado: "Todas as vias nos levam a Roma", na época do Imperio % Romano, as vias bem estruturadas foram construidas pelo Romanos % e todas, talvez com poucas excessões de fato levavam a Roma. % % Queres encurtar o caminho: "ab via" - % vá para a via, la a caminhada é mais rapida, e voce pode % 'abreviar' o tempo de caminhada. % % Queres que todo saiba: "ab via" % Todo mundo : vaijantes, comerciantes, andarilhos passam pela % via, logo se estiver "ab via", na via ao lado da via todos vão % ver. Isto aumenta tambem sua chance de vender. % % É obvio que obvio que de "ab via" --> "ob via" --> "obvia" -- obvio % viajem - tempo passado na via % viajante - aquele que andqa na via % % Pensas diferente? Encontrastes uma caminho (via) para fazer: temos % então um novo "viéz" % % A fim de não "enviezar" muito, e para tornar "obvio" o sentido de "bias": % Bias é viéz, direção, linha direcionadora, tendencia. % % Mas o que que tem a ver o "b" de bias e o "v" de via? % Existe um resposta, mas isto é outra conversa

Page 2: MatLab RN Adaline Com Fucao Limiar

%% bias= 1 * ones(size(d)); %% montar padrões de entrada: bias e x[i] x=[bias x(:,1:qtdCaracteristicasX-1)]'; % entra a coluna de bias e % sai a coluna saidas desejadas - d[i] %% Gerar vetor de pesos aleatorios - w[i] % 0 < w[i] < 1 - valores aleatorios com distribuição uniforme % w_inicial é o w[i] na época zero % w[i] - vetor linha w_inicial=rand(1,qtdCaracteristicasX); %% clean-up pre-treinamento % distribui universo de amostras entre valicação e treinamento qtdAmostrasValidacao = floor(qtdPontos*percentualAmostrasValidacao); qtdAmostrasDeTreinamento = qtdPontos-qtdAmostrasValidacao; % % arbitra um taxa de aprendizagem maxima_energia_erro_toleravel=1/2; w=w_inicial; % inicializa vetor de pesos rede_esta_treinada= false; % inicializa condição sinalizadora de que a rede está treinada Acabou_periodo_treinamento = false; % inicializa condição de time-out %% treinamento % executa processo de treinamento até que a rede esteja treinada ou % que se encerre o periodo de tempo reservado para o treinamento %% Uma especie de redução ao absurdo: % admitimos, como premissa inicial, que a condição % "rede_esta_treinada" é verdadeira. Se concluirmos que a % condição é falsa temos um absurdo, pois pelo Principio do % Terceiro Excluído - que rege a Lógica Booleana, uma condição % não pode ser verdadeira e falsa ao mesmo tempo. % % Este absurdo nos leva a concluir que a premissa inicial % "rede_esta_treinada" admitimos ser verdadeira, não o era, sendo % portanto falsa. E dado que a condição "rede_esta_treinada" é % falsa deve-se iniciar um novo ciclo de treinamento. %% while ~(rede_esta_treinada || Acabou_periodo_treinamento) eta=1/(epoca*2+1); energia_acumulada_erros=0; erro_acumulado=0; for i=1:qtdAmostrasDeTreinamento %% processo: calcula neuronio % calcula o "campo local induzido - v" pela entrada v=w*x(:,i); % calcula a saida da rede utilizando função de ativação do tipo

Page 3: MatLab RN Adaline Com Fucao Limiar

% limiar de ativação y=feval(funcaoAvaliacao,v,0,-1,1); %% Processo: Treina do neuronio: Modelo de treinamento: Perceptron - regra delta % Se a saida obtida (y) for diferente da desejada (d) % 1 - Concluimos que rede não está treinada e indicamos esta condição % 2 - ajusta os pesos if y~=d(i) % calcula erro erro = d(i) - v; erro_acumulado=erro_acumulado+erro; energia_erro = erro*erro/2; energia_acumulada_erros = energia_acumulada_erros + energia_erro; % Ajusta pesos w = w + eta*erro_acumulado*x(:,i)'; end end disp ( sprintf('erro.........: %5.0f', erro)); disp ( sprintf(' energia_erro..%5.0f', energia_erro) ); rede_esta_treinada = ((energia_acumulada_erros/qtdAmostrasDeTreinamento)<maxima_energia_erro_toleravel); epoca=epoca+1; Acabou_periodo_treinamento=(epoca>tempo_treinamento); end %% avaliar resultado do treinamento acertos=0; erros=0; for i=(qtdPontos-qtdAmostrasValidacao+1):qtdPontos %% processo: neuronio % calcula o campo local induzido amostras(u) e o bias(b) por esta amostra v=w*x(:,i); % calcula a saida da rede utilizando função de ativação do tipo limiar de ativação y=feval(funcaoAvaliacao,v,0,-1,1); %% Processo: Treinamento do neuronio: Modelo de treinamento: Perceptron % Se a saida obtida (y) for igual a desejada incrementa acertos % senão incrementa erros if y == d(i) acertos=acertos+1; else erros=erros+1; end end %% Estatisticas do treinamento

Page 4: MatLab RN Adaline Com Fucao Limiar

disp ('-----Rede Perceptrom - Pesos Iniciais: "Randomicos"-----'); disp ( sprintf('Qtd. Amostras..................: %5.0f', qtdPontos) ); disp ( sprintf('Qtd. AmostrasValidacao.........: %5.0f', qtdAmostrasValidacao ) ); disp ( sprintf('Qtd. Amostras de Treinamento...: %5.0f', qtdAmostrasDeTreinamento ) ); disp ( sprintf('Convergencia em................: %5.0f épocas\n', epoca ) ); disp ('pesos iniciais:'); disp (w_inicial); disp ('pesos finais:'); disp (w); disp (sprintf('Acertos: %3.2f \nErros: %3.2f \nPercentual de Acertos: %3.2f%%\n\n', acertos,erros, 100*acertos/(acertos+erros) ));