X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=clusterer.h;h=a0a29f97d62dfecd107f5fc3c762c2888f9e1596;hb=379b91965f8d18b05cc40c4a14044eda29a6e82c;hp=b45f8c329b83e2fbf9767151a67e9ee1cee8cd60;hpb=792d1a58d91f607d47ea5316ec680fb5e3454e5e;p=clueless-kmeans.git diff --git a/clusterer.h b/clusterer.h index b45f8c3..a0a29f9 100644 --- a/clusterer.h +++ b/clusterer.h @@ -30,32 +30,39 @@ class Clusterer { public: - enum { STANDARD_ASSOCIATION, STANDARD_LP_ASSOCIATION, UNINFORMATIVE_LP_ASSOCIATION }; + enum { + STANDARD_ASSOCIATION, + STANDARD_LP_ASSOCIATION, + UNINFORMATIVE_LP_ASSOCIATION + }; const static int max_nb_iterations = 10; const static scalar_t min_iteration_improvement = 0.999; + const static scalar_t min_cluster_variance = 0.01f; int _nb_clusters; int _dim; + scalar_t **_cluster_means, **_cluster_var; + scalar_t distance_to_centroid(scalar_t *x, int k); + void initialize_clusters(int nb_points, scalar_t **points); - // Does the standard hard k-mean association + // Standard hard k-mean association scalar_t baseline_cluster_association(int nb_points, scalar_t **points, int nb_classes, int *labels, scalar_t **gamma); - // Does the same with an LP formulation, as a sanity check + // Standard k-mean association implemented as an LP optimization scalar_t baseline_lp_cluster_association(int nb_points, scalar_t **points, int nb_classes, int *labels, scalar_t **gamma); - // Does the association under constraints that each cluster gets - // associated clusters with the same class proportion as the overall - // training set + // Association under the constraint that each cluster gets the same + // class proportions as the overall training set scalar_t uninformative_lp_cluster_association(int nb_points, scalar_t **points, int nb_classes, int *labels,