mlpack  2.0.1
kmeans.hpp
Go to the documentation of this file.
1 
14 #ifndef __MLPACK_METHODS_KMEANS_KMEANS_HPP
15 #define __MLPACK_METHODS_KMEANS_KMEANS_HPP
16 
17 #include <mlpack/core.hpp>
18 
20 #include "random_partition.hpp"
22 #include "naive_kmeans.hpp"
23 
25 
26 namespace mlpack {
27 namespace kmeans {
28 
69 template<typename MetricType = metric::EuclideanDistance,
70  typename InitialPartitionPolicy = RandomPartition,
71  typename EmptyClusterPolicy = MaxVarianceNewCluster,
72  template<class, class> class LloydStepType = NaiveKMeans,
73  typename MatType = arma::mat>
74 class KMeans
75 {
76  public:
90  KMeans(const size_t maxIterations = 1000,
91  const MetricType metric = MetricType(),
92  const InitialPartitionPolicy partitioner = InitialPartitionPolicy(),
93  const EmptyClusterPolicy emptyClusterAction = EmptyClusterPolicy());
94 
95 
109  void Cluster(const MatType& data,
110  const size_t clusters,
111  arma::Row<size_t>& assignments,
112  const bool initialGuess = false);
113 
127  void Cluster(const MatType& data,
128  const size_t clusters,
129  arma::mat& centroids,
130  const bool initialGuess = false);
131 
152  void Cluster(const MatType& data,
153  const size_t clusters,
154  arma::Row<size_t>& assignments,
155  arma::mat& centroids,
156  const bool initialAssignmentGuess = false,
157  const bool initialCentroidGuess = false);
158 
160  size_t MaxIterations() const { return maxIterations; }
162  size_t& MaxIterations() { return maxIterations; }
163 
165  const MetricType& Metric() const { return metric; }
167  MetricType& Metric() { return metric; }
168 
170  const InitialPartitionPolicy& Partitioner() const { return partitioner; }
172  InitialPartitionPolicy& Partitioner() { return partitioner; }
173 
175  const EmptyClusterPolicy& EmptyClusterAction() const
176  { return emptyClusterAction; }
178  EmptyClusterPolicy& EmptyClusterAction() { return emptyClusterAction; }
179 
181  template<typename Archive>
182  void Serialize(Archive& ar, const unsigned int version);
183 
184  private:
188  MetricType metric;
190  InitialPartitionPolicy partitioner;
192  EmptyClusterPolicy emptyClusterAction;
193 };
194 
195 } // namespace kmeans
196 } // namespace mlpack
197 
198 // Include implementation.
199 #include "kmeans_impl.hpp"
200 
201 #endif // __MLPACK_METHODS_KMEANS_KMEANS_HPP
const InitialPartitionPolicy & Partitioner() const
Get the initial partitioning policy.
Definition: kmeans.hpp:170
void Cluster(const MatType &data, const size_t clusters, arma::Row< size_t > &assignments, const bool initialGuess=false)
Perform k-means clustering on the data, returning a list of cluster assignments.
Linear algebra utility functions, generally performed on matrices or vectors.
LMetric< 2, true > EuclideanDistance
The Euclidean (L2) distance.
Definition: lmetric.hpp:113
InitialPartitionPolicy partitioner
Instantiated initial partitioning policy.
Definition: kmeans.hpp:190
const MetricType & Metric() const
Get the distance metric.
Definition: kmeans.hpp:165
MetricType & Metric()
Modify the distance metric.
Definition: kmeans.hpp:167
InitialPartitionPolicy & Partitioner()
Modify the initial partitioning policy.
Definition: kmeans.hpp:172
MetricType metric
Instantiated distance metric.
Definition: kmeans.hpp:188
EmptyClusterPolicy & EmptyClusterAction()
Modify the empty cluster policy.
Definition: kmeans.hpp:178
Include all of the base components required to write MLPACK methods, and the main MLPACK Doxygen docu...
size_t & MaxIterations()
Set the maximum number of iterations.
Definition: kmeans.hpp:162
void Serialize(Archive &ar, const unsigned int version)
Serialize the k-means object.
const EmptyClusterPolicy & EmptyClusterAction() const
Get the empty cluster policy.
Definition: kmeans.hpp:175
EmptyClusterPolicy emptyClusterAction
Instantiated empty cluster policy.
Definition: kmeans.hpp:192
size_t maxIterations
Maximum number of iterations before giving up.
Definition: kmeans.hpp:186
This class implements K-Means clustering, using a variety of possible implementations of Lloyd&#39;s algo...
Definition: kmeans.hpp:74
KMeans(const size_t maxIterations=1000, const MetricType metric=MetricType(), const InitialPartitionPolicy partitioner=InitialPartitionPolicy(), const EmptyClusterPolicy emptyClusterAction=EmptyClusterPolicy())
Create a K-Means object and (optionally) set the parameters which K-Means will be run with...
size_t MaxIterations() const
Get the maximum number of iterations.
Definition: kmeans.hpp:160