/** * @file KMeansHeuristic.h * @brief K-Means * @author Erik Rodner, Michael Koch, Michael Trummer * @date 02/04/2011 */ #ifndef KMeansHeuristicINCLUDE #define KMeansHeuristicINCLUDE #include #include #include "core/vector/VectorT.h" #include "core/vector/MatrixT.h" #include "ClusterAlgorithm.h" namespace OBJREC { /** K-Means (but what does Heuristic actually mean? )*/ class KMeansHeuristic: public ClusterAlgorithm { protected: int noClusters; std::string distanceType; NICE::VectorDistance *distancefunction; double compute_assignments(const NICE::VVector & features, const NICE::VVector & prototypes, std::vector & assignment); double compute_weights(const NICE::VVector & features, std::vector & weights, std::vector & assignment); double compute_delta(const NICE::VVector & oldprototypes, const NICE::VVector & prototypes); void initial_guess(const NICE::VVector & features, NICE::VVector & prototypes); void print_iteration(int iterations, NICE::VVector & prototypes, double delta); int robust_prototypes(const NICE::VVector &features, NICE::VVector &prototypes, std::vector< double> & weights, const std::vector & assignment); public: /** simple constructor */ KMeansHeuristic(int noClusters, std::string distanceMode = "euclidean"); /** * @brief standard constructor * @param conf config file specifying all relevant variable settings * @param _section name of the section within the configfile where the settings can be found (default: KMeansHeuristic) * @date 14-06-2013 (dd-mm-yyyy) * @author Alexander Freytag */ KMeansHeuristic( const NICE::Config *conf, const std::string & _section = "KMeansHeuristic"); /** simple destructor */ virtual ~KMeansHeuristic(); void cluster(const NICE::VVector & features, NICE::VVector & prototypes, std::vector & weights, std::vector & assignment); }; } // namespace #endif