spatialdependence.m

来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· M 代码 · 共 103 行

M
103
字号
Example.Network={'GSN'};
Example.Stations={'Example.stn'}; 
Example.Variable={'Precip'};
date={'1-Jan-1990','31-Dec-1998'};

[data,Example]=loadStations(Example,'dates',date,'ascfile',1);

%los discretizamos
umbrales=[000,005,20,40;... 
      005,20,40,Inf];
dato=[];
dato=ones(size(data))*NaN;
for k=1:size(umbrales,2)
   dato(find( data>=umbrales(1,k) & data<umbrales(2,k)))=k;
end
%aprendemos la estructura del dag
novar=size(dato,2); %numero de nodos
order=1:novar; %orden de eleccion para los padres
ns = size(umbrales,2)*ones(1,novar); %tama駉 que toman cada uno de los nodos 
dag= learn_struct_K2(dato', ns, order, 'max_fan_in',novar,'verbose','yes');
%dato(i,m) es el dato m-esimo de la estacion i
%max_fan_in, numero maximo de padres, en este caso el maximo 6 

%dibujamos el grafo que hemos obtenido
drawdag(dag,Example.Info.Location)

%aprendemos los parametros
bnet = mk_bnet(dag, ns); %creamos la red
for i=1:novar
   bnet.CPD{i} = tabular_CPD(bnet, i); %definimos el tipo de cada uno de sus nodos, en este caso todos tabulares
end 
bnet = learn_params(bnet, dato');%aprendemos los parametros a partir de los datos, para la red definida

%propagamos evidencia
%engine=jtree_inf_engine(bnet);%se crea el motor de inferencia
%evidence = cell(1,novar);%definimos la evidencia como una celda vacia, de tama駉 el numero de nodos
%evidence{3}=4;%damos evidencia a tantos nodos como queramos, en este caso solo al tercero
%engine=enter_evidence(engine, evidence);%propagamos la evidencia
%obtenemos las tablas de probabilidad para cada uno de los nodos
%el nodo al que hemos dado evidencia no tiene tabla, se le asigna un uno

%nota, se pueden calcular las probabilidades a priori de cada uno de los nodos, propagando la evidencia
%vac韆 evidence = cell(1,novar);

%generamos una muestra a partir de la estructura y los parametros de la red
for i=1:size(dato,1), 
   sample(:,i) = sample_bnet(bnet); 
end

figure
subplot(2,1,1)
plot([sample{15,:}])
subplot(2,1,2)
plot(dato(:,15),'r')

%%%%%%%%%%%%%%%%%%%%%%%%
%muestras con evidencia s髄o funciona con la BNT2002
%genera una muestra de tama駉 2000, utilizando la estructura y los parametros aprendidos, 
%teniendo en cuenta la evidencia que hemos dado
NodEv=[1 5];%
evidence = cell(1,novar);
for i=1:size(NodEv,2), evidence{NodEv(i)}=2; end 
for i=1:2000, 
   sample2(:,i) = sample_bnet(bnet,'evidence',evidence); 
end

NodEv=[1];
evidence = cell(1,novar);
for i=1:size(NodEv,2), evidence{NodEv(i)}=4; end 
for i=1:2000, 
   sample3(:,i) = sample_bnet(bnet,'evidence',evidence); 
end

figure
subplot(4,1,1)
plot([sample{2,:}])
subplot(4,1,2)
plot([sample{3,:}])
subplot(4,1,3)
plot([sample{4,:}])
subplot(4,1,4)
plot([sample{6,:}])

figure
subplot(4,1,1)
plot([sample2{2,:}])
subplot(4,1,2)
plot([sample2{3,:}])
subplot(4,1,3)
plot([sample2{3,:}])
subplot(4,1,4)
plot([sample2{6,:}])

figure
subplot(4,1,3)
plot([sample3{2,:}])
subplot(4,1,2)
plot([sample3{3,:}])
subplot(4,1,1)
plot([sample3{4,:}])
subplot(4,1,4)
plot([sample3{6,:}])

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?