Public Types | Public Member Functions | Static Public Attributes | Private Attributes | List of all members
vpdl_mixture_of< dist_t > Class Template Referenceabstract

A mixture of a fixed type of distributions. More...

#include <vpdl_mixture_of.h>

Inheritance diagram for vpdl_mixture_of< dist_t >:
Inheritance graph
[legend]

Public Types

typedef dist_t::field_type field_type
 the data type to represent a point in the field. More...
 
typedef dist_t component_type
 define the component type. More...
 
typedef dist_t::field_type F
 the data type to represent a point in the field. More...
 
typedef vpdt_field_traits< field_type >::scalar_type T
 define the scalar type (normally specified by template parameter T). More...
 
typedef vpdt_field_traits< field_type >::vector_type vector
 define the vector type. More...
 
typedef vpdt_field_traits< field_type >::matrix_type matrix
 the data type used for matrices. More...
 

Public Member Functions

 vpdl_mixture_of ()
 
virtual ~vpdl_mixture_of ()
 
virtual vpdl_distribution< T, n > * clone () const
 Create a copy on the heap and return base class pointer. More...
 
virtual unsigned int dimension () const
 Return the run time dimension. More...
 
unsigned int num_components () const
 Return the number of components in the mixture. More...
 
const dist_t & distribution (unsigned int index) const
 Access (const) a component distribution of the mixture. More...
 
dist_t & distribution (unsigned int index)
 Access a component distribution of the mixture. More...
 
T weight (unsigned int index) const
 Return the weight of a component in the mixture. More...
 
void set_weight (unsigned int index, const T &w)
 Set the weight of a component in the mixture. More...
 
bool insert (const dist_t &d, const T &wght=T(0))
 Insert a new component at the end of the vector. More...
 
bool remove_last ()
 Remove the last component in the vector. More...
 
T density (const vector &pt) const
 Compute the unnormalized density at this point. More...
 
T prob_density (const vector &pt) const
 Compute the probability density at this point. More...
 
virtual T gradient_density (const vector &pt, vector &g) const
 Compute the gradient of the unnormalized density at a point. More...
 
T box_prob (const vector &min_pt, const vector &max_pt) const
 The probability integrated over a box. More...
 
virtual T cumulative_prob (const vector &pt) const
 Evaluate the cumulative distribution function at a point. More...
 
virtual void compute_mean (vector &mean) const
 Compute the mean of the distribution. More...
 
virtual void compute_covar (matrix &covar) const
 Compute the covariance of the distribution. More...
 
virtual T norm_const () const
 The normalization constant for the density. More...
 
void normalize_weights ()
 Normalize the weights of the components to add to 1. More...
 
void sort ()
 Sort the components in order of decreasing weight. More...
 
void sort (unsigned int idx1, unsigned int idx2)
 Sort the components in the range idx1 to idx2 in order of decreasing weight. More...
 
template<class comp_type_ >
void sort (comp_type_ comp)
 Sort the components using any StrictWeakOrdering function. More...
 
template<class comp_type_ >
void sort (comp_type_ comp, unsigned int idx1, unsigned int idx2)
 Sort the components in the range idx1 to idx2 using any StrictWeakOrdering function. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type density (const vector &pt) const=0
 Evaluate the unnormalized density at a point. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type prob_density (const vector &pt) const
 Evaluate the probability density at a point. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type log_prob_density (const vector &pt) const
 Evaluate the log probability density at a point. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type gradient_density (const vector &pt, vector &g) const=0
 Compute the gradient of the unnormalized density at a point. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type cumulative_prob (const vector &pt) const=0
 Evaluate the cumulative distribution function at a point. More...
 
virtual vector inverse_cdf (const vpdt_dist_traits< dist_t >::scalar_type &p) const
 Compute the inverse of the cumulative_prob() function. More...
 
virtual vpdt_dist_traits< dist_t >::scalar_type box_prob (const vector &min_pt, const vector &max_pt) const
 The probability of being in an axis-aligned box. More...
 
virtual void compute_mean (vector &mean) const=0
 Compute the mean of the distribution. More...
 

Static Public Attributes

static const unsigned int n = vpdt_field_traits<field_type>::dimension
 define the fixed dimension (normally specified by template parameter n). More...
 

Private Attributes

vpdt_mixture_of< dist_t > impl_
 

Detailed Description

template<class dist_t>
class vpdl_mixture_of< dist_t >

A mixture of a fixed type of distributions.

A mixture is a weighted linear combination of other mixtures. This class represents a mixture of a specific type of distribution. Each component in the mixture has its own weight and parameters, but each must be of the same type.

Template Parameters
dist_tis the type of a component distribution
See also
vpdl_mixture

Definition at line 29 of file vpdl_mixture_of.h.

Member Typedef Documentation

◆ component_type

template<class dist_t >
typedef dist_t vpdl_mixture_of< dist_t >::component_type

define the component type.

Definition at line 39 of file vpdl_mixture_of.h.

◆ F

template<class dist_t >
typedef dist_t::field_type vpdl_mixture_of< dist_t >::F

the data type to represent a point in the field.

Definition at line 44 of file vpdl_mixture_of.h.

◆ field_type

template<class dist_t >
typedef dist_t::field_type vpdl_mixture_of< dist_t >::field_type

the data type to represent a point in the field.

Definition at line 37 of file vpdl_mixture_of.h.

◆ matrix

template<class dist_t >
typedef vpdt_field_traits<field_type>::matrix_type vpdl_mixture_of< dist_t >::matrix

the data type used for matrices.

Definition at line 50 of file vpdl_mixture_of.h.

◆ T

template<class dist_t >
typedef vpdt_field_traits<field_type>::scalar_type vpdl_mixture_of< dist_t >::T

define the scalar type (normally specified by template parameter T).

Definition at line 46 of file vpdl_mixture_of.h.

◆ vector

template<class dist_t >
typedef vpdt_field_traits<field_type>::vector_type vpdl_mixture_of< dist_t >::vector

define the vector type.

Definition at line 48 of file vpdl_mixture_of.h.

Constructor & Destructor Documentation

◆ vpdl_mixture_of()

template<class dist_t >
vpdl_mixture_of< dist_t >::vpdl_mixture_of ( )
inline

Definition at line 53 of file vpdl_mixture_of.h.

◆ ~vpdl_mixture_of()

template<class dist_t >
virtual vpdl_mixture_of< dist_t >::~vpdl_mixture_of ( )
inlinevirtual

Definition at line 56 of file vpdl_mixture_of.h.

Member Function Documentation

◆ box_prob() [1/2]

vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::box_prob ( const vector min_pt,
const vector max_pt 
) const
virtualinherited

The probability of being in an axis-aligned box.

The box is defined by two points, the minimum and maximum. Implemented in terms of cumulative_prob() by default.

Definition at line 89 of file vpdl_distribution.hxx.

◆ box_prob() [2/2]

template<class dist_t >
T vpdl_mixture_of< dist_t >::box_prob ( const vector min_pt,
const vector max_pt 
) const
inline

The probability integrated over a box.

Definition at line 106 of file vpdl_mixture_of.h.

◆ clone()

template<class dist_t >
virtual vpdl_distribution<T,n>* vpdl_mixture_of< dist_t >::clone ( ) const
inlinevirtual

Create a copy on the heap and return base class pointer.

Implements vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type, n >.

Definition at line 59 of file vpdl_mixture_of.h.

◆ compute_covar()

template<class dist_t >
virtual void vpdl_mixture_of< dist_t >::compute_covar ( matrix covar) const
inlinevirtual

Compute the covariance of the distribution.

Implements vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type, n >.

Definition at line 120 of file vpdl_mixture_of.h.

◆ compute_mean() [1/2]

virtual void vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::compute_mean ( vector mean) const
pure virtualinherited

Compute the mean of the distribution.

This may be trivial for distributions like Gaussians, but actually involves computation for others.

◆ compute_mean() [2/2]

template<class dist_t >
virtual void vpdl_mixture_of< dist_t >::compute_mean ( vector mean) const
inlinevirtual

Compute the mean of the distribution.

weighted average of the component means

Definition at line 117 of file vpdl_mixture_of.h.

◆ cumulative_prob() [1/2]

virtual vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::cumulative_prob ( const vector pt) const
pure virtualinherited

Evaluate the cumulative distribution function at a point.

This is the integral of the density function from negative infinity (in all dimensions) to the point in question

Note
It is not possible to compute this value for all functions in closed form. In some cases, numerical integration may be used. If no good solutions exists the function should return a quiet NaN.

◆ cumulative_prob() [2/2]

template<class dist_t >
virtual T vpdl_mixture_of< dist_t >::cumulative_prob ( const vector pt) const
inlinevirtual

Evaluate the cumulative distribution function at a point.

This is the integral of the density function from negative infinity (in all dimensions) to the point in question

Definition at line 112 of file vpdl_mixture_of.h.

◆ density() [1/2]

virtual vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::density ( const vector pt) const
pure virtualinherited

Evaluate the unnormalized density at a point.

Note
This is not a probability density. To make this a probability multiply by norm_const()
See also
prob_density

◆ density() [2/2]

template<class dist_t >
T vpdl_mixture_of< dist_t >::density ( const vector pt) const
inline

Compute the unnormalized density at this point.

Definition at line 91 of file vpdl_mixture_of.h.

◆ dimension()

template<class dist_t >
virtual unsigned int vpdl_mixture_of< dist_t >::dimension ( ) const
inlinevirtual

Return the run time dimension.

Implements vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type, n >.

Definition at line 65 of file vpdl_mixture_of.h.

◆ distribution() [1/2]

template<class dist_t >
const dist_t& vpdl_mixture_of< dist_t >::distribution ( unsigned int  index) const
inline

Access (const) a component distribution of the mixture.

Definition at line 71 of file vpdl_mixture_of.h.

◆ distribution() [2/2]

template<class dist_t >
dist_t& vpdl_mixture_of< dist_t >::distribution ( unsigned int  index)
inline

Access a component distribution of the mixture.

Definition at line 75 of file vpdl_mixture_of.h.

◆ gradient_density() [1/2]

virtual vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::gradient_density ( const vector pt,
vector g 
) const
pure virtualinherited

Compute the gradient of the unnormalized density at a point.

Returns
the density at pt since it is usually needed as well, and is often trivial to compute while computing gradient
Return values
gthe gradient vector

◆ gradient_density() [2/2]

template<class dist_t >
virtual T vpdl_mixture_of< dist_t >::gradient_density ( const vector pt,
vector g 
) const
inlinevirtual

Compute the gradient of the unnormalized density at a point.

Returns
the density at pt since it is usually needed as well, and is often trivial to compute while computing gradient
Return values
gthe gradient vector

Definition at line 100 of file vpdl_mixture_of.h.

◆ insert()

template<class dist_t >
bool vpdl_mixture_of< dist_t >::insert ( const dist_t &  d,
const T wght = T(0) 
)
inline

Insert a new component at the end of the vector.

Definition at line 84 of file vpdl_mixture_of.h.

◆ inverse_cdf()

vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::vector vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::inverse_cdf ( const vpdt_dist_traits< dist_t >::scalar_type &  p) const
virtualinherited

Compute the inverse of the cumulative_prob() function.

The value of x: P(x'<x) = P for x' drawn from the distribution.

Note
This is only valid for univariate distributions multivariate distributions will return a quiet NaN

The value of x: P(x'<x) = P for x' drawn from the distribution. This is only valid for univariate distributions multivariate distributions will return -infinity

Definition at line 78 of file vpdl_distribution.hxx.

◆ log_prob_density()

virtual vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::log_prob_density ( const vector pt) const
inlinevirtualinherited

Evaluate the log probability density at a point.

Definition at line 65 of file vpdl_distribution.h.

◆ norm_const()

template<class dist_t >
virtual T vpdl_mixture_of< dist_t >::norm_const ( ) const
inlinevirtual

The normalization constant for the density.

When density() is multiplied by this value it becomes prob_density norm_const() is reciprocal of the integral of density over the entire field

Implements vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type, n >.

Definition at line 125 of file vpdl_mixture_of.h.

◆ normalize_weights()

template<class dist_t >
void vpdl_mixture_of< dist_t >::normalize_weights ( )
inline

Normalize the weights of the components to add to 1.

Definition at line 128 of file vpdl_mixture_of.h.

◆ num_components()

template<class dist_t >
unsigned int vpdl_mixture_of< dist_t >::num_components ( ) const
inlinevirtual

Return the number of components in the mixture.

Implements vpdl_multi_cmp_dist< vpdt_dist_traits< dist_t >::scalar_type, vpdt_dist_traits< dist_t >::dimension >.

Definition at line 68 of file vpdl_mixture_of.h.

◆ prob_density() [1/2]

virtual vpdt_dist_traits< dist_t >::scalar_type vpdl_distribution< vpdt_dist_traits< dist_t >::scalar_type , n >::prob_density ( const vector pt) const
inlinevirtualinherited

Evaluate the probability density at a point.

Definition at line 59 of file vpdl_distribution.h.

◆ prob_density() [2/2]

template<class dist_t >
T vpdl_mixture_of< dist_t >::prob_density ( const vector pt) const
inline

Compute the probability density at this point.

Definition at line 94 of file vpdl_mixture_of.h.

◆ remove_last()

template<class dist_t >
bool vpdl_mixture_of< dist_t >::remove_last ( )
inline

Remove the last component in the vector.

Definition at line 88 of file vpdl_mixture_of.h.

◆ set_weight()

template<class dist_t >
void vpdl_mixture_of< dist_t >::set_weight ( unsigned int  index,
const T w 
)
inline

Set the weight of a component in the mixture.

Definition at line 81 of file vpdl_mixture_of.h.

◆ sort() [1/4]

template<class dist_t >
void vpdl_mixture_of< dist_t >::sort ( )
inline

Sort the components in order of decreasing weight.

Definition at line 131 of file vpdl_mixture_of.h.

◆ sort() [2/4]

template<class dist_t >
void vpdl_mixture_of< dist_t >::sort ( unsigned int  idx1,
unsigned int  idx2 
)
inline

Sort the components in the range idx1 to idx2 in order of decreasing weight.

Definition at line 134 of file vpdl_mixture_of.h.

◆ sort() [3/4]

template<class dist_t >
template<class comp_type_ >
void vpdl_mixture_of< dist_t >::sort ( comp_type_  comp)
inline

Sort the components using any StrictWeakOrdering function.

The prototype should be

template <class dist_t>
bool functor(const dist_t& d1, const vpdt_dist_traits<dist_t>::scalar_type& w1,
const dist_t& d2, const vpdt_dist_traits<dist_t>::scalar_type& w2);

Definition at line 144 of file vpdl_mixture_of.h.

◆ sort() [4/4]

template<class dist_t >
template<class comp_type_ >
void vpdl_mixture_of< dist_t >::sort ( comp_type_  comp,
unsigned int  idx1,
unsigned int  idx2 
)
inline

Sort the components in the range idx1 to idx2 using any StrictWeakOrdering function.

Definition at line 148 of file vpdl_mixture_of.h.

◆ weight()

template<class dist_t >
T vpdl_mixture_of< dist_t >::weight ( unsigned int  index) const
inline

Return the weight of a component in the mixture.

Definition at line 78 of file vpdl_mixture_of.h.

Member Data Documentation

◆ impl_

template<class dist_t >
vpdt_mixture_of<dist_t> vpdl_mixture_of< dist_t >::impl_
private

Definition at line 33 of file vpdl_mixture_of.h.

◆ n

template<class dist_t >
const unsigned int vpdl_mixture_of< dist_t >::n = vpdt_field_traits<field_type>::dimension
static

define the fixed dimension (normally specified by template parameter n).

Definition at line 42 of file vpdl_mixture_of.h.


The documentation for this class was generated from the following file: