Feature Selection Toolbox FST4
UTIA · Czech Academy of Sciences
Loading...
Searching...
No Matches
FST::Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, numerator, denominator > Class Template Reference

Implements L_{p} distance, p equals numerator/denominator (template parameters). More...

#include <distance_Lp.hpp>

Inheritance diagram for FST::Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, numerator, denominator >:
FST::Clonable_Impl< Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, 1, 1 >, Distance< DATATYPE, DIMTYPE, SUBSET > > FST::Distance< DATATYPE, DIMTYPE, SUBSET > FST::Clonable

Public Types

typedef Distance< DATATYPE, DIMTYPE, SUBSET > parent
 base class: the abstract distance interface
typedef Clonable_Impl< Distance_Lp, parent > parent_impl
 implements clone(); sharing/stateless_clone throw in Distance
Public Types inherited from FST::Distance< DATATYPE, DIMTYPE, SUBSET >
typedef std::shared_ptr< SUBSET > PSubset
 shared pointer to a feature subset, as consumed by narrow_to()

Public Member Functions

 Distance_Lp (const DIMTYPE n)
 Constructs and immediately reset()s for n raw features (see Distance::reset()).
 Distance_Lp (const Distance_Lp &dlp)
 Copy-constructor; delegates to parent_impl (deep-copies the current _index[] mapping) and copies _p.
virtual DATATYPE distance (const DATATYPE *pattern1, const DATATYPE *pattern2) override
 Distance between two raw patterns over the currently active features only. Reads exactly get_d() entries of each pattern, at the raw indices in _index[] (identity unless narrow_to() is in effect) – concrete distances must index through _index[], never assume a contiguous 0..get_d()-1 layout.
virtual std::ostream & print (std::ostream &os) const override
 writes a human-readable identification of the object; base default writes nothing
Public Member Functions inherited from FST::Clonable_Impl< Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, 1, 1 >, Distance< DATATYPE, DIMTYPE, SUBSET > >
Distance< DATATYPE, DIMTYPE, SUBSET > * clone () const override
 dispatches to the DEEP_KIND mechanism (default CLONE_DEEP: Derived's copy-constructor)
Distance< DATATYPE, DIMTYPE, SUBSET > * sharing_clone () const override
 dispatches to the SHARING_KIND mechanism (default CLONE_INHERIT: defers to Base, which throws by family convention)
Distance< DATATYPE, DIMTYPE, SUBSET > * stateless_clone () const override
 dispatches to the STATELESS_KIND mechanism (default CLONE_INHERIT: defers to Base, which throws by family convention)
Public Member Functions inherited from FST::Distance< DATATYPE, DIMTYPE, SUBSET >
 Distance (const Distance &d)
 Copy-constructor; deep-copies the current _index[] mapping (same narrowed/denarrowed state as d).
void reset (const DIMTYPE n)
 Allocates for n raw features and makes _index[] the identity map 0..n-1, with all n features active (get_d()==get_n()); narrow_to() restricts that.
void narrow_to (const PSubset sub)
 Restricts distance() to sub's selected features only. Rewrites _index[] to the subset's selected feature indices (raw-feature order) and sets get_d() to the subset size; distance() then reads only those _d entries of a pattern, through _index[], instead of all _n. Precondition: reset() must have been called with n >= the subset size.
void denarrow ()
 Undoes narrow_to(): _index[] reverts to the identity map and get_d() returns to get_n().
DIMTYPE get_n () const
 the full (raw, unnarrowed) feature count fixed by reset()
DIMTYPE get_d () const
 the currently active feature count: the narrowed subset size after narrow_to(), get_n() after reset()/denarrow()
Distance * sharing_clone () const override
Distance * stateless_clone () const override
Public Member Functions inherited from FST::Clonable
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

Protected Attributes

const REALTYPE _p
 the L_p exponent, fixed at construction as numerator/denominator (both compile-time template parameters)
Protected Attributes inherited from FST::Distance< DATATYPE, DIMTYPE, SUBSET >
DIMTYPE _n
 full raw feature count, fixed by reset()
DIMTYPE _d
 currently active feature count (see get_d())
std::unique_ptr< DIMTYPE[]> _index
 maps active-feature position [0,_d) to a raw feature index in [0,_n)

Additional Inherited Members

Protected Member Functions inherited from FST::Clonable
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)

Detailed Description

template<typename DATATYPE, typename REALTYPE, typename DIMTYPE, class SUBSET, const int numerator = 1, const int denominator = 1>
class FST::Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, numerator, denominator >

Implements L_{p} distance, p equals numerator/denominator (template parameters).

( sum over the currently active features of |pattern1[f] - pattern2[f]|^p )^(1/p), with the exponent p fixed at compile time as the ratio of the two int template parameters (so that a fractional p can be expressed without a floating-point template argument). The defaults numerator=denominator=1 give p=1, i.e. plain L_1 - use Distance_L1 for that case, it is cheaper. Typical instantiations are p=2 (Euclidean, <...,2,1>) and fractional exponents such as p=1/2 (<...,1,2>).

Note
p >= 1 yields a true metric; p < 1 does NOT - the triangle inequality fails, so the result is a dissimilarity only. That is legitimate here (Classifier_kNN needs only the neighbour ORDER), and fractional exponents are sometimes preferred in very high dimensions, but do not rely on metric properties.
p must not be 0 - the final pow(result,1.0/p) would divide by zero.

Member Function Documentation

◆ distance()

template<typename DATATYPE, typename REALTYPE, typename DIMTYPE, class SUBSET, const int numerator, const int denominator>
DATATYPE FST::Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, numerator, denominator >::distance ( const DATATYPE * pattern1,
const DATATYPE * pattern2 )
overridevirtual

Distance between two raw patterns over the currently active features only. Reads exactly get_d() entries of each pattern, at the raw indices in _index[] (identity unless narrow_to() is in effect) – concrete distances must index through _index[], never assume a contiguous 0..get_d()-1 layout.

Parameters
pattern1,pattern2raw feature vectors of at least get_n() entries each
Returns
a non-negative dissimilarity: 0 for identical patterns, larger values mean farther apart. Implementations are free to return any monotone transform of a true distance (e.g. a squared or fractionally powered one), so the value need NOT satisfy the triangle inequality and need not be a metric. Only the induced ORDER of neighbours matters to the callers (Classifier_kNN).

Implements FST::Distance< DATATYPE, DIMTYPE, SUBSET >.

◆ print()

template<typename DATATYPE, typename REALTYPE, typename DIMTYPE, class SUBSET, const int numerator = 1, const int denominator = 1>
virtual std::ostream & FST::Distance_Lp< DATATYPE, REALTYPE, DIMTYPE, SUBSET, numerator, denominator >::print ( std::ostream & os) const
inlineoverridevirtual

writes a human-readable identification of the object; base default writes nothing

Reimplemented from FST::Clonable.


The documentation for this class was generated from the following file:
Copyright © 2000–present ÚTIA, Institute of Information Theory and Automation of the Czech Academy of Sciences · Contacts · This site sets no cookies and uses no analytics.