23 #ifndef LIBMARGRET_SRC_KMEANS_HH 24 #define LIBMARGRET_SRC_KMEANS_HH 31 #include <blitz/array.h> 40 typedef typename blitz::Array<DataT, 1> PointT;
41 typedef typename blitz::Array<DataT, 2> ArrayPointT;
46 virtual double operator()(
const PointT &p1,
const PointT &p2)
const = 0;
50 virtual double operator()(
const PointT &p1,
const PointT &p2)
const;
56 double cluster(
const ArrayPointT &points,
58 std::vector<int> &labels);
66 max_restarts_ = max_restarts;
74 max_iterations_ = max_iterations;
82 variance_threshold_ = threshold;
89 variance_iter_no_improvement_ = iter;
102 void iterateUntilConvergence();
103 void initializeMeans();
106 double totalVariance();
109 ptrdiff_t num_points_;
110 ptrdiff_t point_dim_;
115 double variance_threshold_;
117 int variance_iter_no_improvement_;
121 std::vector<int> labels_;
131 #define KMeans _KMeans 134 template<
class DataT,
int Dim>
135 double kmeans(
const unsigned int k,
136 const blitz::Array<DataT, 2 > &points,
137 blitz::Array<DataT, 2 > &means,
138 std::vector<int> &labels
void setMaxRestarts(int max_restarts)
set maximum number of restarts to perform for variance minimization
void setRestartStopThreshold(int iter)
stop restarts if variance didn't drop for iter iterations
double cluster(const ArrayPointT &points, ArrayPointT &means, std::vector< int > &labels)
_KMeans(const unsigned int k, const Distance &distance)
double distance(BSpline< double > const &spline, double x, double &u)
Compute the distance and the corresponding curve position of the given point to the spline...
virtual double operator()(const PointT &p1, const PointT &p2) const =0
void setMaxIterations(double threshold)
Set variance threshold.
void setMaxIterations(int max_iterations)
set maximum number of iterations
double kmeans(const unsigned int k, const blitz::Array< DataT, 2 > &points, blitz::Array< DataT, 2 > &means, std::vector< int > &labels)