T
- type of the points to clusterpublic class KMeansPlusPlusClusterer<T extends Clusterable> extends Clusterer<T>
Modifier and Type | Class and Description |
---|---|
static class |
KMeansPlusPlusClusterer.EmptyClusterStrategy
Strategies to use for replacing an empty cluster.
|
Modifier and Type | Field and Description |
---|---|
private KMeansPlusPlusClusterer.EmptyClusterStrategy |
emptyStrategy
Selected strategy for empty clusters.
|
private int |
k
The number of clusters.
|
private int |
maxIterations
The maximum number of iterations.
|
private RandomGenerator |
random
Random generator for choosing initial centers.
|
Constructor and Description |
---|
KMeansPlusPlusClusterer(int k)
Build a clusterer.
|
KMeansPlusPlusClusterer(int k,
int maxIterations)
Build a clusterer.
|
KMeansPlusPlusClusterer(int k,
int maxIterations,
DistanceMeasure measure)
Build a clusterer.
|
KMeansPlusPlusClusterer(int k,
int maxIterations,
DistanceMeasure measure,
RandomGenerator random)
Build a clusterer.
|
KMeansPlusPlusClusterer(int k,
int maxIterations,
DistanceMeasure measure,
RandomGenerator random,
KMeansPlusPlusClusterer.EmptyClusterStrategy emptyStrategy)
Build a clusterer.
|
Modifier and Type | Method and Description |
---|---|
private int |
assignPointsToClusters(java.util.List<CentroidCluster<T>> clusters,
java.util.Collection<T> points,
int[] assignments)
Adds the given points to the closest
Cluster . |
private Clusterable |
centroidOf(java.util.Collection<T> points,
int dimension)
Computes the centroid for a set of points.
|
private java.util.List<CentroidCluster<T>> |
chooseInitialCenters(java.util.Collection<T> points)
Use K-means++ to choose the initial centers.
|
java.util.List<CentroidCluster<T>> |
cluster(java.util.Collection<T> points)
Runs the K-means++ clustering algorithm.
|
KMeansPlusPlusClusterer.EmptyClusterStrategy |
getEmptyClusterStrategy()
Returns the
KMeansPlusPlusClusterer.EmptyClusterStrategy used by this instance. |
private T |
getFarthestPoint(java.util.Collection<CentroidCluster<T>> clusters)
Get the point farthest to its cluster center
|
int |
getK()
Return the number of clusters this instance will use.
|
int |
getMaxIterations()
Returns the maximum number of iterations this instance will use.
|
private int |
getNearestCluster(java.util.Collection<CentroidCluster<T>> clusters,
T point)
Returns the nearest
Cluster to the given point |
private T |
getPointFromLargestNumberCluster(java.util.Collection<? extends Cluster<T>> clusters)
Get a random point from the
Cluster with the largest number of points |
private T |
getPointFromLargestVarianceCluster(java.util.Collection<CentroidCluster<T>> clusters)
Get a random point from the
Cluster with the largest distance variance. |
RandomGenerator |
getRandomGenerator()
Returns the random generator this instance will use.
|
distance, getDistanceMeasure
private final int k
private final int maxIterations
private final RandomGenerator random
private final KMeansPlusPlusClusterer.EmptyClusterStrategy emptyStrategy
public KMeansPlusPlusClusterer(int k)
The default strategy for handling empty clusters that may appear during algorithm iterations is to split the cluster with largest distance variance.
The euclidean distance will be used as default distance measure.
k
- the number of clusters to split the data intopublic KMeansPlusPlusClusterer(int k, int maxIterations)
The default strategy for handling empty clusters that may appear during algorithm iterations is to split the cluster with largest distance variance.
The euclidean distance will be used as default distance measure.
k
- the number of clusters to split the data intomaxIterations
- the maximum number of iterations to run the algorithm for.
If negative, no maximum will be used.public KMeansPlusPlusClusterer(int k, int maxIterations, DistanceMeasure measure)
The default strategy for handling empty clusters that may appear during algorithm iterations is to split the cluster with largest distance variance.
k
- the number of clusters to split the data intomaxIterations
- the maximum number of iterations to run the algorithm for.
If negative, no maximum will be used.measure
- the distance measure to usepublic KMeansPlusPlusClusterer(int k, int maxIterations, DistanceMeasure measure, RandomGenerator random)
The default strategy for handling empty clusters that may appear during algorithm iterations is to split the cluster with largest distance variance.
k
- the number of clusters to split the data intomaxIterations
- the maximum number of iterations to run the algorithm for.
If negative, no maximum will be used.measure
- the distance measure to userandom
- random generator to use for choosing initial centerspublic KMeansPlusPlusClusterer(int k, int maxIterations, DistanceMeasure measure, RandomGenerator random, KMeansPlusPlusClusterer.EmptyClusterStrategy emptyStrategy)
k
- the number of clusters to split the data intomaxIterations
- the maximum number of iterations to run the algorithm for.
If negative, no maximum will be used.measure
- the distance measure to userandom
- random generator to use for choosing initial centersemptyStrategy
- strategy to use for handling empty clusters that
may appear during algorithm iterationspublic int getK()
public int getMaxIterations()
public RandomGenerator getRandomGenerator()
public KMeansPlusPlusClusterer.EmptyClusterStrategy getEmptyClusterStrategy()
KMeansPlusPlusClusterer.EmptyClusterStrategy
used by this instance.KMeansPlusPlusClusterer.EmptyClusterStrategy
public java.util.List<CentroidCluster<T>> cluster(java.util.Collection<T> points) throws MathIllegalArgumentException, ConvergenceException
cluster
in class Clusterer<T extends Clusterable>
points
- the points to clusterMathIllegalArgumentException
- if the data points are null or the number
of clusters is larger than the number of data pointsConvergenceException
- if an empty cluster is encountered and the
emptyStrategy
is set to ERROR
private int assignPointsToClusters(java.util.List<CentroidCluster<T>> clusters, java.util.Collection<T> points, int[] assignments)
Cluster
.private java.util.List<CentroidCluster<T>> chooseInitialCenters(java.util.Collection<T> points)
points
- the points to choose the initial centers fromprivate T getPointFromLargestVarianceCluster(java.util.Collection<CentroidCluster<T>> clusters) throws ConvergenceException
Cluster
with the largest distance variance.clusters
- the Cluster
s to searchConvergenceException
- if clusters are all emptyprivate T getPointFromLargestNumberCluster(java.util.Collection<? extends Cluster<T>> clusters) throws ConvergenceException
Cluster
with the largest number of pointsclusters
- the Cluster
s to searchConvergenceException
- if clusters are all emptyprivate T getFarthestPoint(java.util.Collection<CentroidCluster<T>> clusters) throws ConvergenceException
clusters
- the Cluster
s to searchConvergenceException
- if clusters are all emptyprivate int getNearestCluster(java.util.Collection<CentroidCluster<T>> clusters, T point)
Cluster
to the given pointprivate Clusterable centroidOf(java.util.Collection<T> points, int dimension)
points
- the set of pointsdimension
- the point dimensionCopyright (c) 2003-2016 Apache Software Foundation