Odhad sm si s dynamickým ukazovákem a savovými komponenami skalární výsup, dvourozm rný vsup a sav simulovaná daa kovarian ní maice savového modelu nasaveny podle simulace dynamický model ukazováka Simulují se daa ze sm si savových komponen a dynamického ukazováka: - komponena i pro i = 1, 2,, n c [ = M i [ y = A i [ 1 + N i [ u1 u 2 + B i [ u1 u 2 [ + F i w1 + w 2 + G i + v kde M i, N i, F i, A i, B i a G i jsou maice savového modelu i-é komponeny - ukazováko n c je po e komponen. P edpoklady: Sci zna ení: c = 1 c = 2 c = n c c 1 = 1 α 1 1 α 2 1 α nc1 c 1 = 2 α 1 2 α 2 2 α nc2 c 1 = n c α 1 nc α 2 nc α ncn c Úloha: Simulace a odhad dynamickým modelem sm si savových komponen - základní kongurace pro odhad sm si se savovými komponenami. Poznámky 1. Dynamické ukazováko umoº uje predikci akivní komponeny, prooºe dává do souvislosi po sob jdoucí akiviy komponen. 2. Vzorec pro váhy komponen, keré p i azují komponenám pravd podobnosi akiviy, se p edchozích ypech sm sí sesával ze í ásí. Jsou o (i) vekor vzdálenosí akuáln zm eného daového vzorku od jednolivých komponen, (ii) model ukazováka a (iii) minulý váhový vekor w 1. Druhá a eí poloºka jsou sejné, jako u sm si spojiých komponen. Vzdálenos zm eného daového vzorku od komponeny se po íá op jako hodnoa daové predikce s ouo komponenou s dosazenými akuálními day a odhadem savu. Tao predikce je f (y x 1 ) = f (y, x x 1 ) dx = f (y x ) f (x x 1 ) dx. x Tuo hodnou pro kaºdou komponenu dosaneme p ímo z Kalmanova lru. x 1
Program Popis programu 1. Simulace hodno ukazováka a podle oho generování da z p íslu²né komponeny. 2. Odhad se provádí podle sandardních vzorc : (a) p epo e Kalmanových lr pro kaºdou komponenu. (b) výpo e vah W a w pro zm ený výsup y. (c) spojení výsledk pro jednolivé komponeny do jednoho modelu. 3. Jako výsledek se ukazují hodnoy odhadovaného ukazováka ve srovnání se simulovaným, simulované a odhadnué daová klasry a vývoj daové predikce. Kód programu // P73MiKF.sce // Mixure esimaion wih sae-space componens // [u,,n=file(); // find working direcory chdir(dirname(n(2))); // se working direcory clear("u","","n") // clear auxiliary daa exec("scinro.sce",-1),mode(0) // inro o sesion nd=150; nc=3; // number of daa // number of componens // ini of simulaiom // componen 1 Sim.Cy(1).M=[.3 -.3;.5.1; Sim.Cy(1).N=[.2 -.3.3.5; Sim.Cy(1).A=[.6.4; Sim.Cy(1).B=[0.3 0.7; Sim.Cy(1).F=[-3-7'; // componen 2 Sim.Cy(2).M=[.05 -.3;.4 -.1; Sim.Cy(2).N=[.2 -.3.3.5; Sim.Cy(2).A=[.4 0.8; Sim.Cy(2).B=[-0.4-0.5; Sim.Cy(2).F=[0 0'; // componen 3 Sim.Cy(3).M=[.6 -.1;.8 -.5; // reg.coef for simulaion 2
Sim.Cy(3).N=[.2 -.3.3.5; Sim.Cy(3).A=[1 -.4; Sim.Cy(3).B=[0.4 0.5; Sim.Cy(3).F=[3.4'; Sim.rv=1e-3; Sim.rw=1e-3; // common coves of oupu model // common coves of sae model c=zeros(1,nd); c(1)=1; // poiner iniial condiion Sim.Cp.h=[1 0 0; 0 1 0; 0 0 1+1; Sim.Cp.h=fnorm(Sim.Cp.h,2); // poiner model parameer nx=max(size(sim.cy(1).m)); [ny,nu=size(sim.cy(1).b); u=rand(nu,nd,'n'); y=zeros(ny,nd); x=zeros(nx,nd); x=zeros(nx,1); // SIMULATION ========================================================== for =2:nd c()=sum(rand(1,1,'u')>cumsum(sim.cp.h(c(-1),:)))+1; j=c(); // index of acive componen u=u(:,); x=sim.cy(j).m*x+sim.cy(j).n*u+sim.cy(j).f+sqr(sim.rw)*rand(nx,1,'n'); y=sim.cy(j).a*x+sim.cy(j).b*u+sqr(sim.rv)*rand(ny,1,'n'); y(:,)=y; x(:,)=x; Sim.x=x; Sim.y=y; Sim.u=u; // ini of esimaion Es.Cp.V=1e-1*ones(nc,nc); Es.Cp.h=fnorm(Es.Cp.V,2); w1=zeros(nc,1); w1(1)=1; sx=zeros(nx,1); rx=1e3*eye(nx,nx); // poiner saisics // poiner parameer // iniial pr.value // iniial sae // iniial covariance marix // of he sae esimae //ESTIMATION =========================================================== prinf(' '), =fix(nd/10); for =(2:nd) if /==fix(/), prinf('.'); 3
for j=1:nc [Es.Cy(j).x,Es.Cy(j).rx,yp,ry=.. // Kalman filer KalmanXY(sx,y(:,),u(:,),Sim.Cy(j).M,Sim.Cy(j).N,.. Sim.Cy(j).A,Sim.Cy(j).B,Sim.Cy(j).F,Sim.rw,Sim.rv,rx); [xxx,lq(j)=gaussn(y(:,),yp,ry); // likelihood Es.Cy(j).yp()=yp; Lqq=Lq-max(Lq); // rough normalizaion q=exp(lqq); // exponen from logarihm Wp=(w1*q').*Es.Cp.h; W=Wp/sum(Wp); wp=sum(w,'r')'; w=wp/sum(wp); // marix weigh for poiner // weighs for componens // updaed componens are merged wih he weighs w sx=0; s1=0; s2=0; // KL approximaion of expecaion sx=sx+w(i)*es.cy(i).x; xe(:,)=sx; // KL approximaion of covariance s1=s1+w(i)*(es.cy(i).x-sx)*(es.cy(i).x-sx)'; s2=s2+w(i)*es.cy(i).rx; rx=s1+s2; Es.Cp.V=Es.Cp.V+W; Es.Cp.h=fnorm(nu,2); w1=w; w(:,)=w; Es.x=xe; Es.w=w; Es.rx=rx; // RESULTS s=15:nd; [xxx ce=max(w,'r'); wr=sum(c(s)~=ce(s)); prinf('\nwrong classificaions %d from %d\n',wr,lengh(s)) se(scf(1),'posiion',[70 70 500 500) plo(1:nd,c,'o',1:nd,ce,'.') ile('simulaed and esimaed poiner values') se(scf(2),'posiion',[700 70 500 500) plo(x(1,s),x(2,s),'bx','markersize',10) plo(xe(1,s),xe(2,s),'ro') ile('simulaed and esimaed clusers') 4
col=['b','r','g','k','m'; se(scf(3),'posiion',[300 270 500 500) ile('oupu predicions') plo(es.cy(i).yp,col(i)) leg('firs','second','hird'); 5