Class VarianceOfVolume<O extends elki.data.spatial.SpatialComparable>

  • Type Parameters:
    O - the type of data objects handled by this algorithm
    All Implemented Interfaces:
    elki.Algorithm, OutlierAlgorithm

    @Reference(authors="T. Hu, S. Y. Sung",
               title="Detecting pattern-based outliers",
               booktitle="Pattern Recognition Letters 24(16)",
               url="https://doi.org/10.1016/S0167-8655(03)00165-X",
               bibkey="DBLP:journals/prl/HuS03")
    public class VarianceOfVolume<O extends elki.data.spatial.SpatialComparable>
    extends java.lang.Object
    implements OutlierAlgorithm
    Variance of Volume for outlier detection.

    The volume is estimated by the distance to the k-nearest neighbor, then the variance of volume is computed.

    Unfortunately, this approach needs an enormous numerical precision, and may not work for high-dimensional, non-normalized data. We therefore divide each volume by the average across the data set. This means values are even less comparable across data sets, but this avoids some of the numerical problems of this method.

    Reference:

    T. Hu, S. Y. Sung
    Detecting pattern-based outliers
    Pattern Recognition Letters 24(16)

    Since:
    0.7.0
    Author:
    Erich Schubert
    • Nested Class Summary

      • Nested classes/interfaces inherited from interface elki.Algorithm

        elki.Algorithm.Utils
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected elki.distance.Distance<? super O> distance
      Distance function used.
      protected int kplus
      The number of neighbors to query (plus the query point!)
      private static elki.logging.Logging LOG
      The logger for this class.
    • Constructor Summary

      Constructors 
      Constructor Description
      VarianceOfVolume​(int k, elki.distance.Distance<? super O> distance)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void computeVolumes​(elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> knnq, int dim, elki.database.ids.DBIDs ids, elki.database.datastore.WritableDoubleDataStore vols)
      Compute volumes
      private void computeVOVs​(elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> knnq, elki.database.ids.DBIDs ids, elki.database.datastore.DoubleDataStore vols, elki.database.datastore.WritableDoubleDataStore vovs, elki.math.DoubleMinMax vovminmax)
      Compute variance of volumes.
      elki.data.type.TypeInformation[] getInputTypeRestriction()  
      OutlierResult run​(elki.database.relation.Relation<O> relation)
      Runs the VOV algorithm on the given database.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final elki.logging.Logging LOG
        The logger for this class.
      • distance

        protected elki.distance.Distance<? super O extends elki.data.spatial.SpatialComparable> distance
        Distance function used.
      • kplus

        protected int kplus
        The number of neighbors to query (plus the query point!)
    • Constructor Detail

      • VarianceOfVolume

        public VarianceOfVolume​(int k,
                                elki.distance.Distance<? super O> distance)
        Constructor.
        Parameters:
        k - number of neighbors to use for comparison
        distance - the neighborhood distance function
    • Method Detail

      • getInputTypeRestriction

        public elki.data.type.TypeInformation[] getInputTypeRestriction()
        Specified by:
        getInputTypeRestriction in interface elki.Algorithm
      • run

        public OutlierResult run​(elki.database.relation.Relation<O> relation)
        Runs the VOV algorithm on the given database.
        Parameters:
        relation - Data to process
        Returns:
        VOV outlier result
      • computeVolumes

        private void computeVolumes​(elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> knnq,
                                    int dim,
                                    elki.database.ids.DBIDs ids,
                                    elki.database.datastore.WritableDoubleDataStore vols)
        Compute volumes
        Parameters:
        knnq - KNN query
        dim - Data dimensionality
        ids - IDs to process
        vols - Volume storage
      • computeVOVs

        private void computeVOVs​(elki.database.query.knn.KNNSearcher<elki.database.ids.DBIDRef> knnq,
                                 elki.database.ids.DBIDs ids,
                                 elki.database.datastore.DoubleDataStore vols,
                                 elki.database.datastore.WritableDoubleDataStore vovs,
                                 elki.math.DoubleMinMax vovminmax)
        Compute variance of volumes.
        Parameters:
        knnq - KNN query
        ids - IDs to process
        vols - Volumes
        vovs - Variance of Volume storage
        vovminmax - Score minimum/maximum tracker