Class AbstractKMeans<V extends elki.data.NumberVector,​M extends Model>

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  AbstractKMeans.Instance
      Inner instance for a run, for better encapsulation, that encapsulates the standard flow of most (but not all) k-means variations.
      static class  AbstractKMeans.Par<V extends elki.data.NumberVector>
      Parameterization class.
      • Nested classes/interfaces inherited from interface elki.Algorithm

        elki.Algorithm.Utils
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      private static double[][] denseMeans​(java.util.List<? extends elki.database.ids.DBIDs> clusters, double[][] means, elki.database.relation.Relation<? extends elki.data.NumberVector> relation)
      Returns the mean vectors of the given clusters in the given database.
      private static void densePlusEquals​(double[] sum, elki.data.NumberVector vec)
      Similar to VMath.plusEquals, but accepts a number vector.
      private static void densePlusMinusEquals​(double[] add, double[] sub, elki.data.NumberVector vec)
      Add to one, remove from another.
      elki.distance.NumberVectorDistance<? super V> getDistance()
      Returns the distance.
      elki.data.type.TypeInformation[] getInputTypeRestriction()  
      protected abstract elki.logging.Logging getLogger()
      Get the (STATIC) logger for this class.
      protected static void incrementalUpdateMean​(double[] mean, elki.data.NumberVector vec, int newsize, double op)
      Compute an incremental update for the mean.
      protected double[][] initialMeans​(elki.database.relation.Relation<V> relation)
      Choose the initial means.
      protected static double[][] means​(java.util.List<? extends elki.database.ids.DBIDs> clusters, double[][] means, elki.database.relation.Relation<? extends elki.data.NumberVector> relation)
      Returns the mean vectors of the given clusters in the given database.
      static void minusEquals​(double[] sum, elki.data.NumberVector vec)
      Similar to VMath.minusEquals, but accepts a number vector.
      protected static void nearestMeans​(double[][] cdist, int[][] cnum)
      Recompute the separation of cluster means.
      static void plusEquals​(double[] sum, elki.data.NumberVector vec)
      Similar to VMath.plusEquals, but accepts a number vector.
      static void plusMinusEquals​(double[] add, double[] sub, elki.data.NumberVector vec)
      Add to one, remove from another.
      void setDistance​(elki.distance.NumberVectorDistance<? super V> distance)
      Set the distance function to use.
      void setInitializer​(KMeansInitialization init)
      Set the initialization method.
      void setK​(int k)
      Set the value of k.
      private static double[][] sparseMeans​(java.util.List<? extends elki.database.ids.DBIDs> clusters, double[][] means, elki.database.relation.Relation<? extends elki.data.SparseNumberVector> relation)
      Returns the mean vectors of the given clusters in the given database.
      private static void sparsePlusEquals​(double[] sum, elki.data.SparseNumberVector vec)
      Similar to VMath.plusEquals, but for sparse number vectors.
      private static void sparsePlusMinusEquals​(double[] add, double[] sub, elki.data.SparseNumberVector vec)
      Add to one, remove from another.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface elki.clustering.kmeans.KMeans

        run
    • Field Detail

      • distance

        protected elki.distance.NumberVectorDistance<? super V extends elki.data.NumberVector> distance
        Distance function used.
      • k

        protected int k
        Number of cluster centers to initialize.
      • maxiter

        protected int maxiter
        Maximum number of iterations
    • Constructor Detail

      • AbstractKMeans

        public AbstractKMeans​(int k,
                              int maxiter,
                              KMeansInitialization initializer)
        Constructor.
        Parameters:
        k - k parameter
        maxiter - Maxiter parameter
        initializer - Function to generate the initial means
      • AbstractKMeans

        public AbstractKMeans​(elki.distance.NumberVectorDistance<? super V> distance,
                              int k,
                              int maxiter,
                              KMeansInitialization initializer)
        Constructor.
        Parameters:
        distance - distance function
        k - k parameter
        maxiter - Maxiter parameter
        initializer - Function to generate the initial means
    • Method Detail

      • getInputTypeRestriction

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

        protected double[][] initialMeans​(elki.database.relation.Relation<V> relation)
        Choose the initial means.
        Parameters:
        relation - Relation
        Returns:
        Means
      • means

        protected static double[][] means​(java.util.List<? extends elki.database.ids.DBIDs> clusters,
                                          double[][] means,
                                          elki.database.relation.Relation<? extends elki.data.NumberVector> relation)
        Returns the mean vectors of the given clusters in the given database.
        Parameters:
        clusters - the clusters to compute the means
        means - the recent means
        relation - the database containing the vectors
        Returns:
        the mean vectors of the given clusters in the given database
      • denseMeans

        private static double[][] denseMeans​(java.util.List<? extends elki.database.ids.DBIDs> clusters,
                                             double[][] means,
                                             elki.database.relation.Relation<? extends elki.data.NumberVector> relation)
        Returns the mean vectors of the given clusters in the given database.
        Parameters:
        clusters - the clusters to compute the means
        means - the recent means
        relation - the database containing the vectors
        Returns:
        the mean vectors of the given clusters in the given database
      • plusEquals

        public static void plusEquals​(double[] sum,
                                      elki.data.NumberVector vec)
        Similar to VMath.plusEquals, but accepts a number vector.
        Parameters:
        sum - Aggregation array
        vec - Vector to add
      • densePlusEquals

        private static void densePlusEquals​(double[] sum,
                                            elki.data.NumberVector vec)
        Similar to VMath.plusEquals, but accepts a number vector.
        Parameters:
        sum - Aggregation array
        vec - Vector to add
      • sparsePlusEquals

        private static void sparsePlusEquals​(double[] sum,
                                             elki.data.SparseNumberVector vec)
        Similar to VMath.plusEquals, but for sparse number vectors.
        Parameters:
        sum - Aggregation array
        vec - Vector to add
      • minusEquals

        public static void minusEquals​(double[] sum,
                                       elki.data.NumberVector vec)
        Similar to VMath.minusEquals, but accepts a number vector.
        Parameters:
        sum - Aggregation array
        vec - Vector to subtract
      • plusMinusEquals

        public static void plusMinusEquals​(double[] add,
                                           double[] sub,
                                           elki.data.NumberVector vec)
        Add to one, remove from another.
        Parameters:
        add - Array to add to
        sub - Array to remove from
        vec - Vector to subtract
      • densePlusMinusEquals

        private static void densePlusMinusEquals​(double[] add,
                                                 double[] sub,
                                                 elki.data.NumberVector vec)
        Add to one, remove from another.
        Parameters:
        add - Array to add to
        sub - Array to remove from
        vec - Vector to subtract
      • sparsePlusMinusEquals

        private static void sparsePlusMinusEquals​(double[] add,
                                                  double[] sub,
                                                  elki.data.SparseNumberVector vec)
        Add to one, remove from another.
        Parameters:
        add - Array to add to
        sub - Array to remove from
        vec - Vector to subtract
      • sparseMeans

        private static double[][] sparseMeans​(java.util.List<? extends elki.database.ids.DBIDs> clusters,
                                              double[][] means,
                                              elki.database.relation.Relation<? extends elki.data.SparseNumberVector> relation)
        Returns the mean vectors of the given clusters in the given database.
        Parameters:
        clusters - the clusters to compute the means
        means - the recent means
        relation - the database containing the vectors
        Returns:
        the mean vectors of the given clusters in the given database
      • nearestMeans

        protected static void nearestMeans​(double[][] cdist,
                                           int[][] cnum)
        Recompute the separation of cluster means.

        Used by sort, and our exponion implementation.

        Parameters:
        cdist - Center-to-Center distances
        cnum - Center numbers
      • incrementalUpdateMean

        protected static void incrementalUpdateMean​(double[] mean,
                                                    elki.data.NumberVector vec,
                                                    int newsize,
                                                    double op)
        Compute an incremental update for the mean.
        Parameters:
        mean - Mean to update
        vec - Object vector
        newsize - (New) size of cluster
        op - Cluster size change / Weight change
      • setK

        public void setK​(int k)
        Description copied from interface: KMeans
        Set the value of k. Needed for some types of nested k-means.
        Specified by:
        setK in interface KMeans<V extends elki.data.NumberVector,​M extends Model>
        Parameters:
        k - K parameter
      • getDistance

        public elki.distance.NumberVectorDistance<? super V> getDistance()
        Description copied from interface: KMeans
        Returns the distance.
        Specified by:
        getDistance in interface KMeans<V extends elki.data.NumberVector,​M extends Model>
        Returns:
        the distance
      • setDistance

        public void setDistance​(elki.distance.NumberVectorDistance<? super V> distance)
        Description copied from interface: KMeans
        Set the distance function to use.
        Specified by:
        setDistance in interface KMeans<V extends elki.data.NumberVector,​M extends Model>
        Parameters:
        distance - Distance function.
      • setInitializer

        public void setInitializer​(KMeansInitialization init)
        Description copied from interface: KMeans
        Set the initialization method.
        Specified by:
        setInitializer in interface KMeans<V extends elki.data.NumberVector,​M extends Model>
        Parameters:
        init - Initialization method
      • getLogger

        protected abstract elki.logging.Logging getLogger()
        Get the (STATIC) logger for this class.
        Returns:
        the static logger