Class Mixture¶
Defined in File Mixture.h
Inheritance Relationships¶
Base Types¶
public lsst::afw::table::io::PersistableFacade< Mixture >(Template Class PersistableFacade)public lsst::afw::table::io::Persistable(Class Persistable)
Class Documentation¶
- 
class 
Mixture: public lsst::afw::table::io::PersistableFacade<Mixture>, public lsst::afw::table::io::Persistable¶ Unnamed Group
- 
iterator 
begin()¶ Iterator and indexed access to components.
While mutable iterators and accessors are provided, any modifications to the component weights should be followed by a call to normalize(), as other member functions will not work properly if the mixture is not normalized.
- 
const_iterator 
begin() const¶ 
- 
const_iterator 
end() const¶ 
Public Types
- 
typedef MixtureComponent 
Component¶ 
- 
typedef MixtureUpdateRestriction 
UpdateRestriction¶ 
- 
typedef ComponentList::iterator 
iterator¶ 
- 
typedef ComponentList::const_iterator 
const_iterator¶ 
Public Functions
- 
std::size_t 
size() const¶ Return the number of components.
- 
virtual int 
getComponentCount() const¶ Return the number of components.
- 
PTR(Mixture) const¶ Project the distribution onto the given dimensions (marginalize over all others)
- 
int 
getDimension() const¶ Return the number of dimensions.
- 
void 
normalize()¶ Iterate over all components, rescaling their weights so they sum to one.
- 
void 
shift(int dim, Scalar offset)¶ Shift the mixture in the given dimension, adding the given offset to all mu vectors.
- 
std::size_t 
clip(Scalar threshold = 0.0)¶ Iterate over all components, removing those with weight less than or equal to threshold.
The weights will be normalized if any are removed.
- Return
 the number of components removed.
- 
Scalar 
getDegreesOfFreedom() const¶ Get the number of degrees of freedom in the component Student’s T distributions (inf=Gaussian)
- 
void 
setDegreesOfFreedom(Scalar df = std::numeric_limits<Scalar>::infinity())¶ Set the number of degrees of freedom in the component Student’s T distributions (inf=Gaussian)
- 
template<typename 
Derived>
Scalarevaluate(Component const &component, Eigen::MatrixBase<Derived> const &x) const¶ Evaluate the probability density at the given point for the given component distribution.
This evaluates the probability of a single component, including the current weight of that component.
- 
template<typename 
Derived>
Scalarevaluate(Eigen::MatrixBase<Derived> const &x) const¶ Evaluate the mixture distribution probability density function (PDF) at the given points.
- Parameters
 [in] x: point to evaluate, as an Eigen expression, shape=(dim,)
- 
void 
evaluate(ndarray::Array<Scalar const, 2, 1> const &x, ndarray::Array<Scalar, 1, 0> const &p) const¶ Evaluate the distribution probability density function (PDF) at the given points.
- Parameters
 [in] x: array of points, shape=(numSamples, dim)[out] p: array of probability values, shape=(numSamples,)
- 
void 
evaluateComponents(ndarray::Array<Scalar const, 2, 1> const &x, ndarray::Array<Scalar, 2, 1> const &p) const¶ Evaluate the contributions of each component to the full probability at the given points.
- Parameters
 [in] x: points to evaluate at, with number of columns equal to the number of dimensions[in] p: array to fill, with number of columns equal to the number of components
- 
void 
evaluateDerivatives(ndarray::Array<Scalar const, 1, 1> const &x, ndarray::Array<Scalar, 1, 1> const &gradient, ndarray::Array<Scalar, 2, 1> const &hessian) const¶ Evaluate the derivative of the distribution at the given point.
- Parameters
 [in] x: point to evaluate the derivative, with size equal to the number of dimensions[in] gradient: 1st derivative array to fill[in] hessian: 2nd derivative array to fill
- 
void 
evaluateDerivatives(Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &x, Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &gradient, Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> &hessian) const¶ Evaluate the derivative of the distribution at the given point.
- Parameters
 [in] x: point to evaluate the derivative, with size equal to the number of dimensions[in] gradient: 1st derivative array to fill[in] hessian: 2nd derivative array to fill
- 
void 
evaluateDerivatives(Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &x, Eigen::Matrix<Scalar, Eigen::Dynamic, 1> &gradient) const¶ Evaluate the derivative of the distribution at the given point.
- Parameters
 [in] x: point to evaluate the derivative, with size equal to the number of dimensions[in] gradient: 1st derivative array to fill
- 
void 
draw(afw::math::Random &rng, ndarray::Array<Scalar, 2, 1> const &x) const¶ Draw random variates from the distribution.
- Parameters
 [inout] rng: random number generator[out] x: array of points, shape=(numSamples, dim)
- 
void 
updateEM(ndarray::Array<Scalar const, 2, 1> const &x, ndarray::Array<Scalar const, 1, 0> const &w, Scalar tau1 = 0.0, Scalar tau2 = 0.5)¶ Perform an Expectation-Maximization step, updating the component parameters to match the given weighted samples.
The updates to the
\(\sigma\) matrices are damped according to:\[ \sigma_d = \alpha\sigma_1 + (1-\alpha)\sigma_0 \]Where \(\sigma_0\) is the previous matrix, \(\sigma_1\) is the undamped update, and \(\sigma_d\) is the damped update. The parameter \(\alpha\) is set by the ratio of the determinants:\[ r \equiv \frac{|\sigma_1|}{|\sigma_0|} \]When \(r \ge \tau_1\), \(\alpha=1\); when \(r \lt \tau_1\), it is rolled off quadratically to \(\tau_2\).- Parameters
 [in] x: array of variables, shape=(numSamples, dim)[in] w: array of weights, shape=(numSamples,)[in] tau1: damping parameter (see below)[in] tau2: damping parameter (see below)
- 
void 
updateEM(ndarray::Array<Scalar const, 2, 1> const &x, ndarray::Array<Scalar const, 1, 0> const &w, UpdateRestriction const &restriction, Scalar tau1 = 0.0, Scalar tau2 = 0.5)¶ Perform an Expectation-Maximization step, updating the component parameters to match the given weighted samples.
- Parameters
 [in] x: array of variables, shape=(numSamples, dim)[in] w: array of weights, shape=(numSamples,)[in] restriction: Functor used to restrict the form of the updated mu and sigma[in] tau1: damping parameter (see Mixture::updateEM)[in] tau2: damping parameter (see Mixture::updateEM)
- 
void 
updateEM(ndarray::Array<Scalar const, 2, 1> const &x, UpdateRestriction const &restriction, Scalar tau1 = 0.0, Scalar tau2 = 0.5)¶ Perform an Expectation-Maximization step, updating the component parameters to match the given unweighted samples.
- Parameters
 [in] x: array of variables, shape=(numSamples, dim)[in] restriction: Functor used to restrict the form of the updated mu and sigma[in] tau1: damping parameter (see Mixture::updateEM)[in] tau2: damping parameter (see Mixture::updateEM)
- 
virtual 
PTR(Mixture) const Polymorphic deep copy.
- 
Mixture(int dim, ComponentList &components, Scalar df = std::numeric_limits<Scalar>::infinity())¶ Construct a mixture model.
The components will be automatically normalized after construction.
- Parameters
 [in] dim: Dimensionality of the distribution[in] df: Number of degrees of freedom for component Student’s T distributions (inf=Gaussian)[in] components: List of components; will be emptied on return.
- 
virtual bool 
isPersistable() const¶ Return true if this particular object can be persisted using afw::table::io.
Public Members
- 
int dim2 lsst::meas::modelfit::Mixture::const 
Protected Functions
- 
std::string 
getPythonModule() const¶ Return the fully-qualified Python module that should be imported to guarantee that its factory is registered.
Must be less than ArchiveIndexSchema::MAX_MODULE_LENGTH characters.
Will be ignored if empty.
- 
std::string 
getPersistenceName() const¶ Return the unique name used to persist this object and look up its factory.
Must be less than ArchiveIndexSchema::MAX_NAME_LENGTH characters.
- 
void 
write(OutputArchiveHandle &handle) const¶ Write the object to one or more catalogs.
The handle object passed to this function provides an interface for adding new catalogs and adding nested objects to the same archive (while checking for duplicates). See OutputArchiveHandle for more information.
Friends
- 
std::ostream &
operator<<(std::ostream &os, Mixture const &self)¶ 
- 
iterator