⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 update_ess.m

📁 贝叶斯算法(matlab编写) 安装,添加目录 /home/ai2/murphyk/matlab/FullBNT
💻 M
字号:
function CPD = update_ess(CPD, fmarginal, evidence, ns, cnodes, hidden_bitv)% UPDATE_ESS Update the Expected Sufficient Statistics of a CPD (MLP)% CPD = update_ess(CPD, family_marginal, evidence, node_sizes, cnodes, hidden_bitv)%% fmarginal = overall posterior distribution of self and its parents% fmarginal(i1,i2...,ik,s)=prob(Pa1=i1,...,Pak=ik, self=s| X)% % => 1) prob(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak) with prob(Pa1,...,Pak)=sum{s,fmarginal}%       [self estimation -> CPD.self_vals]% 	  2) prob(Pa1,...,Pak) [SCG weights -> CPD.eso_weights]%% Hidden_bitv is ignored% Written by Pierpaolo Bruttiif ~adjustable_CPD(CPD), return; enddom = fmarginal.domain;                              cdom = myintersect(dom, cnodes);                     assert(~any(isemptycell(evidence(cdom))));           ns(cdom)=1;self = dom(end);                                  ps=dom(1:end-1);                                     dpdom=mysetdiff(ps,cdom);                            dnodes = mysetdiff(1:length(ns), cnodes);            ddom = myintersect(ps, dnodes);                      %if isempty(evidence{self}),                          % if self is hidden in what follow we must     ddom = myintersect(dom, dnodes);                 % consider its dimensionend                                                  % odom = dom(~isemptycell(evidence(dom)));    hdom = dom(isemptycell(evidence(dom)));              % hidden parents in domain dobs = myintersect(ddom, odom);             dvals = cat(1, evidence{dobs});             ens = ns;                                            % effective node sizes              ens(dobs) = 1;                                                                          dpsz=prod(ns(dpdom));S=prod(ens(ddom));subs = ind2subv(ens(ddom), 1:S);mask = find_equiv_posns(dobs, ddom);for i=1:length(mask),    subs(:,mask(i)) = dvals(i);endsupportedQs = subv2ind(ns(ddom), subs);Qarity = prod(ns(ddom));if isempty(ddom),                        Qarity = 1;                         end                                fullm.T = zeros(Qarity, 1);fullm.T(supportedQs) = fmarginal.T(:);% For dynamic (recurrent) net-------------------------------------------------------------% ----------------------------------------------------------------------------------------high=size(evidence,1);                                  % slice heightss_ns=ns(1:high);                                       % single slice nodes sizespos=self;                                               %slice_num=0;                                            %while pos>high,                                         %     slice_num=slice_num+1;                              % find active slice    pos=pos-high;                                       % pos=self posistion into a single sliceend                                                     %last_dim=pos-1;                                         % if isempty(evidence{self}),                             %     last_dim=pos;                                       %end                                                     % last_dim=last reshaping dimension      reg=dom-slice_num*high;dex=myintersect(reg(find(reg>=0)), [1:last_dim]);       %           rs_dim=ss_ns(dex);                                      % reshaping dimensionsif slice_num>0,    act_slice=[]; past_ancest=[];                       %    act_slice=slice_num*high+[1:high];                  % recover the active slice nodes    % past_ancest=mysetdiff(ddom, act_slice);    past_ancest=mysetdiff(ps, act_slice);               % recover ancestors contained into past slices    app=ns(past_ancest);    rs_dim=[app(:)' rs_dim(:)'];                        %end                                                     %if length(rs_dim)==1, rs_dim=[1 rs_dim]; end            %if size(rs_dim,1)~=1, rs_dim=rs_dim';    end            %fullm.T=reshape(fullm.T, rs_dim);                       % reshaping the marginal% ----------------------------------------------------------------------------------------% ----------------------------------------------------------------------------------------% X = cts parent, R = discrete self% 1) observations vector -> CPD.parents_vals -------------------------------------------------x = cat(1, evidence{cdom});% 2) weights vector -> CPD.eso_weights -------------------------------------------------------if isempty(evidence{self}) % R is hidden    sum_over=length(rs_dim);    app=sum(fullm.T, sum_over);        pesi=reshape(app,[dpsz,1]);    clear app;else    pesi=reshape(fullm.T,[dpsz,1]);endassert(approxeq(sum(pesi),1));% 3) estimate (if R is hidden) or recover (if R is obs) self'value----------------------------if isempty(evidence{self})              % R is hidden        app=mk_stochastic(fullm.T);         % P(self|Pa1,...,Pak)=fmarginal/prob(Pa1,...,Pak)    app=reshape(app,[dpsz ns(self)]);   % matrix size: prod{j,ns(Paj)} x ns(self)          r=app;    clear app;else    r = zeros(dpsz,ns(self));    for i=1:dpsz        if pesi(i)~=0, r(i,evidence{self}) = 1; end    endendfor i=1:dpsz    if pesi(i) ~=0, assert(approxeq(sum(r(i,:)),1)); endendCPD.nsamples = CPD.nsamples + 1;            CPD.parent_vals(CPD.nsamples,:) = x(:)';for i=1:dpsz    CPD.eso_weights(CPD.nsamples,:,i)=pesi(i);    CPD.self_vals(CPD.nsamples,:,i) = r(i,:); end

⌨️ 快捷键说明

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