java.lang.Object
riso.distributions.computes_lambda_message.AbstractConditionalDistribution_AbstractDistribution_AbstractDistribution
- All Implemented Interfaces:
- riso.distributions.LambdaMessageHelper, java.io.Serializable
- public class AbstractConditionalDistribution_AbstractDistribution_AbstractDistribution
- extends java.lang.Object
- implements riso.distributions.LambdaMessageHelper
This class implements a lambda message helper for a variable x with
one or more parents u1,...,un. Except for the parent to which
we are sending the lambda message, each parent sends a pi message to
x. Let us suppose that we are sending the lambda message to
parent uk. The lambda message is defined as
p( e \ e_u1(above) | uk )
= \int p( x, e \ e_uk(above) | uk ) dx
= \int p( x, e_x(below) + e_x(above) \ e_uk(above) | uk ) dx
= \int p( e_x(below) | x ) p( x | e_x(above) \ e_uk(above), uk ) p( e_x(above) \ e_uk(above) | uk ) dx
= p( e_x(above) \ e_uk(above) ) \int p( e_x(below) | x )
\int ... \int p( x | u1,...,un ) p( u1,...,un \ uk | e_x(above) \ e_uk(above), uk )
du1 ... du_{k-1} du_{k+1} ... du_n dx
The factor
p( e_x(above) \ e_uk(above) ) doesn't depend on
uk so we can ignore it
(a lambda message need not integrate to anything in particular).
Now note that
p( u1,...,un \ uk | e_x(above) \ e_uk(above), uk ) = \prod_{j \neq k} p( uj | e_uj(above) )
so finally we have
p( e \ e_u1(above) | uk )
= \int p( e_x(below) | x ) \int ... \int p( x | u1,...,un )
\prod_{j \neq k} p( uj | e_uj(above) ) du1 ... du_{k-1} du_{k+1} ... du_n dx
In this last equation the lambda function of
x appears,
p( e_x(below) | x ),
and the pi messages coming to
x from parents other than
uk,
p( uj | e_uj(above) ), j \neq k. The conditional distribution of
x given
all its parents,
p( x | u1,...,un ), links the other pieces together.
Note that this integral is a function of the parent uk.
The message which is sent up the parent is NOT a Gaussian mixture or other approximation;
the message is a direct representation of the integral. The evaluation of the integral is
put off until the posterior or lambda of uk needs to be computed.
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
AbstractConditionalDistribution_AbstractDistribution_AbstractDistribution
public AbstractConditionalDistribution_AbstractDistribution_AbstractDistribution()
description
public static riso.general.SeqTriple[] description()
- Returns a description of the sequences of distributions accepted
by this helper -- namely one AbstractConditionalDistribution
followed by one AbstractDistribution, followed by any number
of AbstractDistribution.
compute_lambda_message
public riso.distributions.Distribution compute_lambda_message(riso.distributions.ConditionalDistribution pxuuu,
riso.distributions.Distribution lambda,
riso.distributions.Distribution[] pi_messages)
throws java.lang.Exception
- Description copied from interface:
riso.distributions.LambdaMessageHelper
- Compute the likelihood message from a variable to a parent.
This is defined as p(``e below''|x) ... NEEDS WORK !!!
- Specified by:
compute_lambda_message in interface riso.distributions.LambdaMessageHelper