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
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