Implements Generalized Mahalanobis distance based on normal (gaussian) model to serve as feature selection criterion.
More...
|
|
typedef Criterion_Normal< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > | parent |
| | base class: the normal-model template-method skeleton
|
|
typedef Clonable_Impl< Criterion_Normal_GMahalanobis, parent > | parent_impl |
| | implements clone(); sharing/stateless_clone throw in Criterion
|
|
typedef std::shared_ptr< DATAACCESSOR > | PDataAccessor |
| | shared pointer to the data accessor the model is learned from
|
|
typedef std::shared_ptr< SUBSET > | PSubset |
| | shared pointer to the feature subset being evaluated
|
|
typedef std::shared_ptr< DATAACCESSOR > | PDataAccessor |
| | shared pointer to the data accessor the model is learned from
|
|
typedef std::shared_ptr< SUBSET > | PSubset |
| | shared pointer to the feature subset being evaluated
|
|
typedef std::shared_ptr< SUBSET > | PSubset |
| | shared pointer to the feature subset being evaluated
|
|
typedef std::shared_ptr< SUBSET > | PSubset |
| | shared pointer to the feature subset being evaluated
|
|
| virtual const char * | criterion_name () const override |
| | class name, used in output and error messages
|
| virtual void | allocate_buffers () override |
| | (re)allocate criterion-specific work buffers for get_n() features (use the alloc_* helpers)
|
| virtual void | update_derived_model () override |
| virtual bool | evaluate_narrowed (RETURNTYPE &result, const PSubset sub) override |
| | narrow remaining buffers to sub, redim work buffers to get_d(), compute the criterion value. On entry _model and _meandif have ALREADY been narrowed to sub by evaluate(), so the implementation sees only the d selected features; get_d() is that d, and _meandif->at(i) addresses the narrowed positions. sub is non-empty (evaluate() rejects d==0 before the call).
|
|
| Criterion_Normal (const Criterion_Normal &cn) |
| | Copy-constructor; deep-copies _model and _meandif (subclasses copy their own buffers separately).
|
|
void | alloc_vector (std::unique_ptr< Indexed_Vector< DATATYPE, DIMTYPE, SUBSET > > &v) |
| | lazy (re)allocation of a work vector for get_n() features, for use from allocate_buffers()
|
|
template<typename MATRIXVALUETYPE> |
| void | alloc_matrix (std::unique_ptr< Indexed_Matrix< MATRIXVALUETYPE, DIMTYPE, SUBSET > > &m, const bool LUstorage=false) |
| | lazy (re)allocation of a work matrix for get_n() features; LUstorage as required by Indexed_Matrix::LUdecompose() temp storage
|
|
void | set_cloned (const bool cloned=true) |
| | marks/unmarks this instance as a clone; call from clone()/stateless_clone() overrides (Clonable_Impl does this automatically)
|
|
void | set_sharing (const bool sharing=true) |
| | marks/unmarks this instance as sharing (see is_sharing())
|
|
void | set_sharing_cloned (const bool cloned=true, const bool sharing=true) |
| | sets both flags at once; call from sharing_clone() overrides (Clonable_Impl does this automatically)
|
|
| Criterion_Normal< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > * | clone () const override |
| | dispatches to the DEEP_KIND mechanism (default CLONE_DEEP: Derived's copy-constructor)
|
| Criterion_Normal< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > * | sharing_clone () const override |
| | dispatches to the SHARING_KIND mechanism (default CLONE_INHERIT: defers to Base, which throws by family convention)
|
| Criterion_Normal< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > * | stateless_clone () const override |
| | dispatches to the STATELESS_KIND mechanism (default CLONE_INHERIT: defers to Base, which throws by family convention)
|
| virtual bool | initialize (PDataAccessor da) |
| | template method: learn model, compute _meandif, then allocate_buffers() + update_derived_model().
|
| virtual bool | evaluate (RETURNTYPE &result, const PSubset sub) override |
| | template method: narrow model and _meandif to sub, then evaluate_narrowed()
|
| virtual bool | is_monotonic () const override |
|
DIMTYPE | get_n () const |
| | the full (raw, unnarrowed) feature count the model was learned for
|
|
DIMTYPE | get_d () const |
| | the currently active (narrowed) feature count, see evaluate()
|
| virtual std::ostream & | print (std::ostream &os) const override |
| | writes a human-readable identification of the object; base default writes nothing
|
| Criterion * | sharing_clone () const override |
| Criterion * | stateless_clone () const override |
| bool | is_clone () const |
|
bool | is_sharing () const |
| | true if this instance is a sharing_clone() result (referencing, not owning, the source's structures)
|
|
bool | is_sharing_clone () const |
| | true if this instance is BOTH a clone and sharing – i.e. specifically a sharing_clone() result, not a clone()/stateless_clone() one
|
|
std::unique_ptr< Model_Normal< DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR > > | _model |
| | the learned per-class normal (mean/covariance) model, narrowed in evaluate()
|
|
std::unique_ptr< Indexed_Vector< DATATYPE, DIMTYPE, SUBSET > > | _meandif |
| | mean[0]-mean[1], shared by all two-class normal criteria
|
template<class RETURNTYPE, typename DATATYPE, typename REALTYPE, typename IDXTYPE, typename DIMTYPE, class SUBSET, class DATAACCESSOR>
class FST::Criterion_Normal_GMahalanobis< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR >
Implements Generalized Mahalanobis distance based on normal (gaussian) model to serve as feature selection criterion.
For the two classes modelled as Gaussians (mu0,S0) and (mu1,S1) restricted to the d selected features, with m = mu0-mu1 and P0, P1 the class priors, the value returned is the squared Mahalanobis distance of the class means in the metric of the prior-weighted pooled covariance:
M = m^T (P0*S0 + P1*S1)^-1 m
It is the mean-separation term alone - unlike Bhattacharyya and Divergence it ignores any difference between the two covariances, which makes it the cheapest of the three (one inversion, no determinants) and blind to classes that differ in shape but not in location. Higher is better, the value is non-negative and cardinality-monotonic, hence usable with Branch & Bound.
- Note
- Defined for two-class problems only
-
Requires a non-singular pooled covariance on the evaluated subset - constant, duplicate or linearly dependent features, or a subset larger than the training sample count, make the criterion undefined.
- Examples
- demo10.cpp.
template<class RETURNTYPE, typename DATATYPE, typename REALTYPE, typename IDXTYPE, typename DIMTYPE, class SUBSET, class DATAACCESSOR>
narrow remaining buffers to sub, redim work buffers to get_d(), compute the criterion value. On entry _model and _meandif have ALREADY been narrowed to sub by evaluate(), so the implementation sees only the d selected features; get_d() is that d, and _meandif->at(i) addresses the narrowed positions. sub is non-empty (evaluate() rejects d==0 before the call).
Implements FST::Criterion_Normal< RETURNTYPE, DATATYPE, REALTYPE, IDXTYPE, DIMTYPE, SUBSET, DATAACCESSOR >.