The Mahalanobis distance, which is essentially a stretched Euclidean distance. More...
|Initialize the Mahalanobis distance with the empty matrix as covariance. More...|
|MahalanobisDistance (const size_t dimensionality)|
|Initialize the Mahalanobis distance with the identity matrix of the given dimensionality. More...|
|MahalanobisDistance (const arma::mat &covariance)|
|Initialize the Mahalanobis distance with the given covariance matrix. More...|
|const arma::mat &||Covariance () const|
|Access the covariance matrix. More...|
|arma::mat &||Covariance ()|
|Modify the covariance matrix. More...|
|double||Evaluate (const VecTypeA &a, const VecTypeB &b)|
|Evaluate the distance between the two given points using this Mahalanobis distance. More...|
|void||serialize (Archive &ar, const unsigned int version)|
|Serialize the Mahalanobis distance. More...|
template<bool TakeRoot = true>
class mlpack::metric::MahalanobisDistance< TakeRoot >
The Mahalanobis distance, which is essentially a stretched Euclidean distance.
Given a square covariance matrix of size x , where is the dimensionality of the points it will be evaluating, and given two vectors and also of dimensionality ,
where Q is the covariance matrix.
Because each evaluation multiplies (x_1 - x_2) by the covariance matrix, it is typically much quicker to use an LMetric and simply stretch the actual dataset itself before performing any evaluations. However, this class is provided for convenience.
If you wish to use the KNN class or other tree-based algorithms with this distance, it is recommended to instead stretch the dataset first, by decomposing Q = L^T L (perhaps via a Cholesky decomposition), and then multiply the data by L. If you still wish to use the KNN class with a custom distance anyway, you will need to use a different tree type than the default KDTree, which only works with the LMetric class.
Similar to the LMetric class, this offers a template parameter TakeRoot which, when set to false, will instead evaluate the distance
which is faster to evaluate.
- Template Parameters
TakeRoot If true, takes the root of the output. It is slightly faster to leave this at the default of false, but this means the metric may not satisfy the triangle inequality and may not be usable for methods that expect a true metric.
Constructor & Destructor Documentation
Initialize the Mahalanobis distance with the given covariance matrix.
The given covariance matrix will be copied (this is not optimal).
covariance The covariance matrix to use for this distance.
References MahalanobisDistance< TakeRoot >::Evaluate().
Member Function Documentation
|double Evaluate||(||const VecTypeA &||a,|
|const VecTypeB &||b|
Evaluate the distance between the two given points using this Mahalanobis distance.
If the covariance matrix has not been set (i.e. if you used the empty constructor and did not later modify the covariance matrix), calling this method will probably result in a crash.
a First vector. b Second vector.
Referenced by MahalanobisDistance< TakeRoot >::MahalanobisDistance().
|void serialize||(||Archive &||ar,|
|const unsigned int||version|
Serialize the Mahalanobis distance.
Referenced by MahalanobisDistance< TakeRoot >::Covariance().
The documentation for this class was generated from the following file:
Generated by 1.8.13