?? bnmsgpasssendlambdamsg.m
字號:
function [nodes, edges] = bnMsgPassSendLambdaMsg(Y, X, nodes, edges, A)
% BNMSGPASSSENDLAMBDAMSG helper function for lungbayesdemo
% Reference: Neapolitan R., "Learning Bayesian Networks", Pearson Prentice Hall,
% Upper Saddle River, New Jersey, 2004.
childrenX = nodes(X).children;
parentsY = nodes(Y).parents;
myx = find(parentsY == X); % dimension associated with X in the probabilities among all the parents of Y
parentsY = setdiff(parentsY, X);
for x = 1:length(nodes(X).values)
t = [];
w = 1;
for k = 1:length(parentsY)
w = kron(edges(parentsY(k),Y).peyeX, w); % assume peyeX is a row
end
s = size(nodes(Y).CPT);
if size(s) > 2
prob = shiftdim(nodes(Y).CPT, length(s)-1); % so that y is in the first dim
else
prob = nodes(Y).CPT;
end
for y = 1:length(nodes(Y).values)
if size(s)> 2 % there are more than 2 dimensions
temp = prob(y,:); % fix for value y
temp = reshape(temp, s(1:end-1)); % reshape as it was before fixing the value y
temp = shiftdim(temp, myx-1); % so that x is in the first dimension
t(y,:) = temp(x,:);
else
t(y,:) = prob(x,y);
end
end
edges(X,Y).lambdaX(x) = sum(nodes(Y).lambda * t * w');
c = 1;
for u = 1:length(childrenX)
c = c * edges(X, childrenX(u)).lambdaX(x);
end
nodes(X).lambda(x) = c;
nodes(X).P(x) = nodes(X).lambda(x) * nodes(X).peye(x); %TODO ALPHA
end
nodes(X).P = nodes(X).P ./ sum(nodes(X).P); % normalize
Z = nodes(X).parents;
Z = setdiff(Z,A);
for z = 1:length(Z)
[nodes, edges] = bnMsgPassSendLambdaMsg(X, Z(z), nodes, edges, A);
end
childrenX = setdiff(childrenX, Y);
for cx = 1: length(childrenX)
[nodes, edges] = bnMsgPassSendPiMsg(X, childrenX(cx), nodes, edges, A);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -