MLPACK  1.0.4
kmeans.hpp
Go to the documentation of this file.
00001 
00022 #ifndef __MLPACK_METHODS_KMEANS_KMEANS_HPP
00023 #define __MLPACK_METHODS_KMEANS_KMEANS_HPP
00024 
00025 #include <mlpack/core.hpp>
00026 
00027 #include <mlpack/core/metrics/lmetric.hpp>
00028 #include "random_partition.hpp"
00029 #include "max_variance_new_cluster.hpp"
00030 
00031 #include <mlpack/core/tree/binary_space_tree.hpp>
00032 
00033 namespace mlpack {
00034 namespace kmeans  {
00035 
00070 template<typename DistanceMetric = metric::SquaredEuclideanDistance,
00071          typename InitialPartitionPolicy = RandomPartition,
00072          typename EmptyClusterPolicy = MaxVarianceNewCluster>
00073 class KMeans
00074 {
00075  public:
00098   KMeans(const size_t maxIterations = 1000,
00099          const double overclusteringFactor = 1.0,
00100          const DistanceMetric metric = DistanceMetric(),
00101          const InitialPartitionPolicy partitioner = InitialPartitionPolicy(),
00102          const EmptyClusterPolicy emptyClusterAction = EmptyClusterPolicy());
00103 
00104 
00118   template<typename MatType>
00119   void Cluster(const MatType& data,
00120                const size_t clusters,
00121                arma::Col<size_t>& assignments) const;
00122   template<typename MatType>
00123   void FastCluster(MatType& data,
00124                const size_t clusters,
00125                arma::Col<size_t>& assignments) const;
00126 
00130   double OverclusteringFactor() const { return overclusteringFactor; }
00131 
00135   void OverclusteringFactor(const double overclusteringFactor)
00136   {
00137     if (overclusteringFactor < 1.0)
00138     {
00139       Log::Warn << "KMeans::OverclusteringFactor(): invalid value (<= 1.0) "
00140           "ignored." << std::endl;
00141       return;
00142     }
00143 
00144     this->overclusteringFactor = overclusteringFactor;
00145   }
00146 
00150   size_t MaxIterations() const { return maxIterations; }
00151 
00155   void MaxIterations(const size_t maxIterations)
00156   {
00157     this->maxIterations = maxIterations;
00158   }
00159 
00161   const DistanceMetric& Metric() const { return metric; }
00163   DistanceMetric& Metric() { return metric; }
00164 
00166   const InitialPartitionPolicy& Partitioner() const { return partitioner; }
00168   InitialPartitionPolicy& Partitioner() { return partitioner; }
00169 
00171   const EmptyClusterPolicy& EmptyClusterAction() const
00172   {
00173     return emptyClusterAction;
00174   }
00176   EmptyClusterPolicy& EmptyClusterAction() { return emptyClusterAction; }
00177 
00178  private:
00180   double overclusteringFactor;
00182   size_t maxIterations;
00184   DistanceMetric metric;
00186   InitialPartitionPolicy partitioner;
00188   EmptyClusterPolicy emptyClusterAction;
00189 };
00190 
00191 }; // namespace kmeans
00192 }; // namespace mlpack
00193 
00194 // Include implementation.
00195 #include "kmeans_impl.hpp"
00196 
00197 #endif // __MLPACK_METHODS_MOG_KMEANS_HPP