Академический Документы
Профессиональный Документы
Культура Документы
max
i 12 y i y j K ( x i x j)i j
i=1
i=1 j =1
Sujeito a:
0iC
n
y i i=0
i=1
onde x(n) e y(n) representam vetores coluna com as coordenadas dos pontos que
caracterizam as duas espirais.
- T=[d] vetor de sadas desejadas;
onde di=1 se o ponto pertencer espiral 1; e di=-1 se o ponto pertencer espiral 2.
- A funo kernel escolhida para o treinamento foi a 'rbf'. Esta funo foi escolhida dada
as caractersticas de distribuio dos pontos e por ter apresentado a melhor curva de
separao com relao aos outros tipos de funo kernel disponveis (linear, quadrtica,
polinomial e 'mlp'). Atribuiu-se um valor de 0.25 ao parmetro sigma associado a essa
funo. Tal valor foi escolhido por tentativa e erro, at encontrar um valor que produziu
uma curva de separao satisfatria.
- O mtodo de treinamento utilizado para encontrar a curva de separao foi o dos
mnimos quadrados (LS). Esse mtodo foi escolhido pois apresentou resultados
similares ao da programao quadrtica e em menor tempo.
Na figura abaixo encontra-se representada a curva de separao obtida com a
funo svmtrain.
c= ai k (s i , x )+ b
i
Onde
funo kernel:
k (si , x)=exp(six2 )
Se c0, ento x classificado como um membro do grupo espiral 1, caso contrrio,
classificado como um membro do grupo espiral 2. Os resultados podem ser visualizados
na figura abaixo.
x (n)=v ( n)+ v (n1) v(n2), com mdia zero e varincia dada por
Projetou-se uma rede neural NARX para estimar a srie temporal usando como
entrada os seis ltimos valores da srie. Para isso, utilizamos a funo narxnet do
Matlab, por meio da qual tambm foi possvel ajustar os atrasos de entrada (1:6,
determinado pela questo) e da realimentao (1:2, escolhido livremente). A quantidade
de neurnios foi ajustada para 100 para que a rede neural possa fornecer uma predio
mais prxima da srie temporal.
Na figura a seguir pode-se visualizar a rede neural criada.
x =1.12; xp=1.11
Para efeito de comparao, foi testada uma segunda rede neural dinmica que
leva em considerao somente as entradas passadas. A funo timedelaynet foi usada
para isso. Por meio dessa funo foram ajustados o valor dos atrasos na entrada (1:6) e a
quantidade de neurnios (100).
Na figura a seguir pode-se visualizar a rede neural criada.
Anexo
Questo 1 cdigo Matlab
%% Questo 1
% P={[0;0;0] [1;0;0] [1;0;1] [1;1;0] [0;0;1] [0;1;1] [0;1;0] [1;1;1]};
exemplos para treinamento sequencial
P2=[0 1 1 1 0 0 0 1;0 0 0 1 0 1 1 1;0 0 1 0 1 1 0 1];
%exemplos para
treinamento por lotes usando o peceptron
P3=[0 0 0;1 0 0;1 0 1;1 1 0;0 0 1;0 1 1;0 1 0;1 1 1];
%exemplos para
treinamento usando svm
% T={1 1 1 1 -1 -1 -1 -1};
%saidas desejadas para treinamento
sequencial
T2=[1 1 1 1 -1 -1 -1 -1];
%sadas desejadas para treinamento por
lotes usando o perceptron
T3=[1;1;1;1;-1;-1;-1;-1];
%sadas desejadas para treinamento usando
svm
net1=linearlayer;
%criao de uma rede linear de um unico neuronio
net1.layers{1}.transferFcn='tansig';
%funo de ativao tangente
sigmide
net1=configure(net1,P2,T2);
%ajuste autmomtico das dimenses das
matrizes de pesos e bias
net1.inputWeights{1}.learnParam.lr=0.5; %fator de aprendizagem para
ajuste dos pesos igual a 0.5
net1.biases{1}.learnParam.lr=0.5;
%fator de aprendizagem para ajuste
do peso do bias igual a 0.5
net1.trainParam.epochs=10;
%definio de uma quantidade de 100
epocas para treinamento do neuronio
net1.IW{1}=[0 0 0];
%definio dos pesos iniciais
net1.b{1}=0;
%definio do peso de bias inicial
[net1,tr1]=train(net1,P2,T2);
%treinamento do neuronio por lotes
usando 100 pocas
W(1:3)=net1.IW{1}(1:3);
%pesos das entradas aps o treinamento
b=net1.b{1};
%peso do bias aps o treinamento
X1=P2(1,1:4);X2=P2(1,5:8); %coordenadas no eixo-x
Y1=P2(2,1:4);Y2=P2(2,5:8); %coordenadas no eixo-y
Z1=P2(3,1:4);Z2=P2(3,5:8); %coordenadas no eixo-z
fz=@(x,y) (-W(1)*x -W(2)*y -b)/W(3);
%superfcie de separao
figure(1)
%Apresentao grfica das classes
stem3(X1,Y1,Z1,'LineStyle','none','Marker','*','MarkerEdgeColor','b')
hold on
stem3(X2,Y2,Z2,'LineStyle','none','Marker','*','MarkerEdgeColor','r')
hold off
figure(2)
%Apresentao das classes com a superfcie de separao
ezmesh(fz,40)
colormap([0 1 1])
hold on
stem3(X1,Y1,Z1,'LineStyle','none','Marker','*','MarkerEdgeColor','b')
stem3(X2,Y2,Z2,'LineStyle','none','Marker','*','MarkerEdgeColor','r')
hold off
figure(3)
plotperform(tr1)
%evoluo do erro mdio a cada poca de
treinamento
svmstruct=svmtrain(P3,T3); %treinamento do SVM
svm_3d_plot(svmstruct,P3); %funo usada para plotar o hiperplano de
separao
function[]=svm_3d_plot(svmstruct,Xdata)
sv=svmstruct.SupportVectors;
%vetores de suporte
alphahat=svmstruct.Alpha;
%alfas
bias=svmstruct.Bias;
%bias
kfun=svmstruct.KernelFunction; %funo kernel
kfunargs=svmstruct.KernelFunctionArgs; %argumentos da funo kernel
sh=svmstruct.ScaleData.shift;
%fator de escala para os dados de
entrada - deslocamento
scalef=svmstruct.ScaleData.scaleFactor; %fator de escala para os dados
de entrada - ganho
Xdata1=repmat(scalef,size(Xdata,1),1).*(Xdata+repmat(sh,size(Xdata,1),
1)); %dados de entrada escalonados
k=10;
%parametro para definir tamanho do grid
cubeXmin=min(Xdata1(:,1)); %limites mnimo e mximo dos eixos
cubeYmin=min(Xdata1(:,2)); %-cubeZmin=min(Xdata1(:,3)); %-cubeXmax=max(Xdata1(:,1)); %-cubeYmax=max(Xdata1(:,2)); %-cubeZmax=max(Xdata1(:,3)); %-stepx=(cubeXmax-cubeXmin)/(k-1);
%passo de cada ponto em x
stepy=(cubeYmax-cubeYmin)/(k-1);
%passo de cada ponto em y
stepz=(cubeZmax-cubeZmin)/(k-1);
%passo de cada ponto em z
[x,y,z]=meshgrid(cubeXmin:stepx:cubeXmax,cubeYmin:stepy:cubeYmax,cubeZ
min:stepz:cubeZmax); %gerao dos pontos formando um slido
mm=size(x); %parametro usado para recuperar as dimenses iniciais do
slido
x=x(:); %alinha os pontos x num vetor coluna
y=y(:); %idem anterior
z=z(:); %idem anterior
f=(feval(kfun,sv,[x y z],kfunargs{:})'*alphahat(:))+bias;
%utiliza
os pontos gerados para gerar a funo linear de separao
t=size(Xdata1,1)/2; %paramentro usado para plotar as classes
separadamente
Xdata1=(Xdata1./repmat(scalef,size(Xdata,1),1))repmat(sh,size(Xdata,1),1); %dados de entrada no formato original(sem
escalonamento)
x=(x./repmat(scalef(1),size(x,1),1))-repmat(sh(1),size(x,1),1);
%pontos x no formato original
y=(y./repmat(scalef(2),size(y,1),1))-repmat(sh(2),size(y,1),1);
%pontos y no formato original
z=(z./repmat(scalef(3),size(z,1),1))-repmat(sh(3),size(z,1),1);
%pontos z no formato original
figure()
plot3(Xdata1(1:t,1),Xdata1(1:t,2),Xdata1(1:t,3),'b*')
%plot da
primeira classe
hold on
plot3(Xdata1(t+1:size(Xdata1,1),1),Xdata1(t+1:size(Xdata1,1),2),Xdata1
(t+1:size(Xdata1,1),3),'r*') %plot da segunda classe
hold on
sv=svmstruct.SupportVectorIndices; %indices da matriz do vetor de
suporte
sv=Xdata1(sv,:);
%pontos que fazem parte do vetor de suporte
plot3(sv(:,1),sv(:,2),sv(:,3),'go');
%marcao dos pontos que so
vetores de suporte
legend('classe1','classe2','vetores de suporte')
x0=reshape(x,mm);
%reajuste das dimenses para a gerao da figura
usando isosurface
y0=reshape(y,mm);
%idem anterior
z0=reshape(z,mm);
%idem anterior
v0=reshape(f,mm);
%reajuste das dimenses da funo
figure(6)
%comparao entre as curvas
plot3(x1,x2,y,'-b')
hold on
plot3(x1,x2,yhat2,'-.r')
grid on
p=p+1;
else
C2hat(q,:)=V(i,:);
q=q+1;
end
end
figure(3)
stem(C1hat(1:p-1,1),C1hat(1:p1,2),'LineStyle','none','Color','b','Marker','.')
hold on
stem(C2hat(1:q-1,1),C2hat(1:q1,2),'LineStyle','none','Color','r','Marker','.')
legend('Classe 1','Classe 2')