To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Revision:

root / _FullBNT / BNT / general / linear_gaussian_to_cpot.m @ 8:b5b38998ef3b

History | View | Annotate | Download (1.28 KB)

1
function pot = linear_gaussian_to_cpot(mu, Sigma, W, domain, ns, cnodes, evidence)
2
% LINEAR_GAUSSIAN_TO_CPOT Convert a linear Gaussian CPD  to a canonical potential.
3
% pot = linear_gaussian_to_cpot(mu, Sigma, W, domain, ns, cnodes, evidence)
4
%
5
% We include any cts evidence, but ignore any discrete evidence.
6
% (Use gaussian_CPD_params_given_dps to use discrete evidence to select mu, Sigma, W.)
7

    
8
odom = domain(~isemptycell(evidence(domain)));
9
hdom = domain(isemptycell(evidence(domain)));
10
cobs = myintersect(cnodes, odom);
11
chid = myintersect(cnodes, hdom);
12
cvals = cat(1, evidence{cobs});
13

    
14
%[g,h,K] = gaussian_to_canonical(mu, Sigma, W);
15
Sinv = inv(Sigma);
16
g = -0.5*mu'*Sinv*mu + log(normal_coef(Sigma));
17
if isempty(W) | (size(W,2)==0)  % no cts parents
18
  h = Sinv*mu;
19
  K = Sinv;
20
else
21
  h = [-W'*Sinv*mu; Sinv*mu];
22
  K = [W'*Sinv*W  -W'*Sinv';
23
       -Sinv*W     Sinv]; 
24
end
25

    
26
if ~isempty(cvals)
27
  %[g, h, K] = enter_evidence_canonical(g, h, K, chid, cobs, cvals(:), ns);  
28
  [hx, hy, KXX, KXY, KYX, KYY] = partition_matrix_vec(h, K, chid, cobs, ns);
29
  y = cvals(:);
30
  g = g + hy'*y - 0.5*y'*KYY*y;
31
  if length(hx)==0 % isempty(X) % i.e., we have instantiated everything away
32
    h = [];
33
    K = [];
34
  else
35
    h = hx - KXY*y;
36
    K = KXX;
37
  end
38
end
39

    
40
ns(odom) = 0;
41
pot = cpot(domain, ns(domain), g, h, K);
42

    
43