MLPACK
1.0.4
|
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