2 * clueless-kmean is a variant of k-mean which enforces balanced
3 * distribution of classes in every cluster
5 * Copyright (c) 2013 Idiap Research Institute, http://www.idiap.ch/
6 * Written by Francois Fleuret <francois.fleuret@idiap.ch>
8 * This file is part of clueless-kmean.
10 * clueless-kmean is free software: you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * version 3 as published by the Free Software Foundation.
14 * clueless-kmean is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with selector. If not, see <http://www.gnu.org/licenses/>.
35 STANDARD_LP_ASSOCIATION,
36 UNINFORMATIVE_LP_ASSOCIATION
39 const static int max_nb_iterations = 10;
40 const static scalar_t min_iteration_improvement = 0.999;
41 const static scalar_t min_cluster_variance = 0.01f;
45 scalar_t **_cluster_means, **_cluster_var;
47 scalar_t distance_to_centroid(scalar_t *x, int k);
49 void initialize_clusters(int nb_points, scalar_t **points);
51 // Standard hard k-mean association
53 scalar_t baseline_cluster_association(int nb_points, scalar_t **points,
54 int nb_classes, int *labels,
57 // Standard k-mean association implemented as an LP optimization
59 scalar_t baseline_lp_cluster_association(int nb_points, scalar_t **points,
60 int nb_classes, int *labels,
63 // Association under the constraint that each cluster gets the same
64 // class proportions as the overall training set
66 scalar_t uninformative_lp_cluster_association(int nb_points, scalar_t **points,
67 int nb_classes, int *labels,
70 void update_clusters(int nb_points, scalar_t **points, scalar_t **gamma);
77 int nb_clusters, int dim,
78 int nb_points, scalar_t **points,
79 int nb_classes, int *labels,
80 // This last array returns for each sample to what
81 // cluster it was associated. It can be null.
82 int *cluster_associations);
84 int cluster(scalar_t *point);