Class ProgressiveEigenPairFilter

  • All Implemented Interfaces:
    EigenPairFilter

    @Title("Progressive Eigenpair Filter")
    @Description("Sorts the eigenpairs in decending order of their eigenvalues and returns the first eigenpairs, whose sum of eigenvalues explains more than the a certain percentage of the unexpected variance, where the percentage increases with subspace dimensionality.")
    public class ProgressiveEigenPairFilter
    extends java.lang.Object
    implements EigenPairFilter
    The ProgressiveEigenPairFilter sorts the eigenpairs in descending order of their eigenvalues and marks the first eigenpairs, whose sum of eigenvalues is higher than the given percentage of the sum of all eigenvalues as strong eigenpairs. In contrast to the PercentageEigenPairFilter, it will use a percentage which changes linearly with the subspace dimensionality. This makes the parameter more consistent for different dimensionalities and often gives better results when clusters of different dimensionality exist, since different percentage alpha levels might be appropriate for different dimensionalities.

    Example calculations of alpha levels:

    In a 3D space, a progressive alpha value of 0.5 equals:
    - 1D subspace: 50 % + 1/3 of remainder = 0.667
    - 2D subspace: 50 % + 2/3 of remainder = 0.833
    In a 4D space, a progressive alpha value of 0.5 equals:
    - 1D subspace: 50% + 1/4 of remainder = 0.625
    - 2D subspace: 50% + 2/4 of remainder = 0.750
    - 3D subspace: 50% + 3/4 of remainder = 0.875

    Reasoning why this improves over PercentageEigenPairFilter:

    In a 100 dimensional space, a single Eigenvector representing over 85% of the total variance is highly significant, whereas the strongest 85 Eigenvectors together will by definition always represent at least 85% of the variance. PercentageEigenPairFilter can thus not be used with these parameters and detect both dimensionalities correctly.

    The second parameter introduced here, walpha, serves a different function: It prevents the eigenpair filter to use a statistically weak Eigenvalue just to reach the intended level, e.g., 84% + 1% >= 85% when 1% is statistically very weak.

    Since:
    0.2
    Author:
    Erich Schubert
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static double DEFAULT_PALPHA
      The default value for alpha.
      static double DEFAULT_WALPHA
      The default value for alpha.
      private double palpha
      The threshold for strong eigenvectors: the strong eigenvectors explain a portion of at least alpha of the total variance.
      private double walpha
      The noise tolerance level for weak eigenvectors
    • Constructor Summary

      Constructors 
      Constructor Description
      ProgressiveEigenPairFilter​(double palpha, double walpha)
      Constructor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int filter​(double[] eigenValues)
      Filters the specified eigenvalues into strong and weak eigenvalues, where strong eigenvalues have high variance and weak eigenvalues have small variance.
      • Methods inherited from class java.lang.Object

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

      • DEFAULT_PALPHA

        public static final double DEFAULT_PALPHA
        The default value for alpha.
        See Also:
        Constant Field Values
      • DEFAULT_WALPHA

        public static final double DEFAULT_WALPHA
        The default value for alpha.
        See Also:
        Constant Field Values
      • palpha

        private double palpha
        The threshold for strong eigenvectors: the strong eigenvectors explain a portion of at least alpha of the total variance.
      • walpha

        private double walpha
        The noise tolerance level for weak eigenvectors
    • Constructor Detail

      • ProgressiveEigenPairFilter

        public ProgressiveEigenPairFilter​(double palpha,
                                          double walpha)
        Constructor.
        Parameters:
        palpha - palpha
        walpha - walpha
    • Method Detail

      • filter

        public int filter​(double[] eigenValues)
        Description copied from interface: EigenPairFilter
        Filters the specified eigenvalues into strong and weak eigenvalues, where strong eigenvalues have high variance and weak eigenvalues have small variance.
        Specified by:
        filter in interface EigenPairFilter
        Parameters:
        eigenValues - the array of eigenvalues, must be sorted descending
        Returns:
        the number of eigenvectors to keep