class Clusterer {
public:
+
+ 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;
void initialize_clusters(int nb_points, scalar_t **points);
+ // Does the 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
+
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
+
scalar_t uninformative_lp_cluster_association(int nb_points, scalar_t **points,
int nb_classes, int *labels,
scalar_t **gamma);
- void baseline_update_clusters(int nb_points, scalar_t **points, scalar_t **gamma);
+ void update_clusters(int nb_points, scalar_t **points, scalar_t **gamma);
public:
Clusterer();
~Clusterer();
- void train(int nb_clusters, int dim,
+
+ void train(int mode,
+ int nb_clusters, int dim,
int nb_points, scalar_t **points,
int nb_classes, int *labels,
+ // This last array returns for each sample to what
+ // cluster it was associated. It can be null.
int *cluster_associations);
int cluster(scalar_t *point);