04.03.2015 Views

Algoritmo das Projeções Sucessivas Para Seleção de ... - PPGQ

Algoritmo das Projeções Sucessivas Para Seleção de ... - PPGQ

Algoritmo das Projeções Sucessivas Para Seleção de ... - PPGQ

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Anexos<br />

clc<br />

disp('- <strong>Seleção</strong> <strong>de</strong> variáveis para classificação via APS -')<br />

disp(' ')<br />

disp('Escolha uma opção e tecle ')<br />

disp('1 - Gerar ca<strong>de</strong>ias <strong>de</strong> variáveis via APS')<br />

disp('2 - Carregar ca<strong>de</strong>ias <strong>de</strong> variaveis previamente gera<strong>das</strong>')<br />

opcao = input('Opção: ');<br />

if (opcao == 1) % Gerar<br />

disp(' ')<br />

disp('O APS sera utilizado para gerar ca<strong>de</strong>ias <strong>de</strong> variáveis.')<br />

disp(' ')<br />

disp('Entre com o nome <strong>de</strong> um arquivo para salvar as ca<strong>de</strong>ias')<br />

filename = input('(entre apóstrofos e sem extensão): ');<br />

% No MATLAB, a inicializacao previa <strong>de</strong> vetores torna a execução mais rápida<br />

L = zeros(N2,Nlamb<strong>das</strong>);<br />

Xcaln = zeros(Ntrain,Nlamb<strong>das</strong>);<br />

X = zeros(Ntrain,Nlamb<strong>das</strong>);<br />

% Auto-Escalonamento <strong>das</strong> colunas <strong>de</strong> Xpooled<br />

opcao = input('Deseja fazer auto-escalonamento para fins <strong>de</strong> selecao ? (Sim: 1 - Nao: 0)');<br />

if (opcao == 1)<br />

disp('Sera feito auto-escalonamento!')<br />

for i=1:Nlamb<strong>das</strong><br />

x = Xpooled(:,i);<br />

Xcaln(:,i)=x/std(x);<br />

end<br />

else<br />

disp('Nao sera feito auto-escalonamento!')<br />

Xcaln = Xpooled;<br />

end<br />

espera = input('Tecle algo para continuar...');<br />

% Aplicacao do APS<br />

clc<br />

normas = sum(Xcaln.^2); % Norma ao quadrado <strong>de</strong> cada coluna <strong>de</strong> Xcaln<br />

normamax = max(normas); % Maior norma<br />

t0 = clock; % Comando usado para estimar quanto tempo levará a otimização<br />

for i=1:Nlamb<strong>das</strong><br />

X = Xcaln;<br />

X(:,i) = X(:,i)*2*normamax/normas(i); % forca o qr a comecar pela i-esima coluna <strong>de</strong> Xcaln<br />

[dummy1,dummy2,or<strong>de</strong>m] = qr(X,0); % or<strong>de</strong>m contem os comprimentos <strong>de</strong> onda selecionados a<br />

partir do i-esimo<br />

L(:,i) = or<strong>de</strong>m(1:N2)'; % Guarda apenas N2 comprimentos <strong>de</strong> onda<br />

% Apresenta na Tela uma estimativa do tempo restante para o fim da otimização<br />

if (rem(i,10) == 0)<br />

tempo = etime(clock,t0);<br />

home<br />

disp(['Aplicando SPA. Tempo restante = ',num2str(round((Nlamb<strong>das</strong>i)*tempo/10)),'s',blanks(10)]);<br />

t0 = clock;<br />

end<br />

118

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!