XMM - Probabilistic Models for Motion Recognition and Mapping

xmmKMeans.hpp
Go to the documentation of this file.
1 /*
2  * xmmKMeans.hpp
3  *
4  * K-Means clustering
5  *
6  * Contact:
7  * - Jules Francoise <jules.francoise@ircam.fr>
8  *
9  * This code has been initially authored by Jules Francoise
10  * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic
11  * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music
12  * Movement Interaction team <http://ismm.ircam.fr> of the
13  * STMS Lab - IRCAM, CNRS, UPMC (2011-2015).
14  *
15  * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou.
16  *
17  * This File is part of XMM.
18  *
19  * XMM is free software: you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation, either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * XMM is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with XMM. If not, see <http://www.gnu.org/licenses/>.
31  */
32 
33 #ifndef xmmKMeans_h
34 #define xmmKMeans_h
35 
36 #include "../../core/model/xmmModelConfiguration.hpp"
37 #include "../../core/model/xmmModelSingleClass.hpp"
38 #include "xmmKMeansParameters.hpp"
39 #include "xmmKMeansResults.hpp"
40 
41 namespace xmm {
46 class KMeans : public Writable {
47  public:
48  static const unsigned int DEFAULT_MAX_ITERATIONS = 50;
49  static const float DEFAULT_RELATIVE_VARIATION_THRESHOLD() { return 1e-20; }
50 
54  enum class InitializationMode {
58  Random,
59 
63  Biased
64  };
65 
70  KMeans(unsigned int clusters = 1);
71 
76  KMeans(KMeans const& src);
77 
82  KMeans& operator=(KMeans const& src);
83 
88  void train(TrainingSet* trainingSet);
89 
93  void reset();
94 
101  void filter(std::vector<float> const& observation);
102 
104 
110  Json::Value toJson() const;
111 
117  void fromJson(Json::Value const& root);
118 
120 
124  std::shared_ptr<SharedParameters> shared_parameters;
125 
130 
135 
139  std::vector<float> centers;
140 
145 
146  protected:
151  void randomizeClusters(std::vector<float> const& trainingSetVariance);
152 
157  void initClustersWithFirstPhrase(std::shared_ptr<Phrase> phrase);
158 
164  void updateCenters(std::vector<float>& previous_centers,
165  TrainingSet* trainingSet);
166 };
167 
175 template <typename T>
176 T euclidean_distance(const T* vector1, const T* vector2, unsigned int dimension);
177 }
178 
179 #endif
KMeans & operator=(KMeans const &src)
Assignment.
Definition: xmmKMeans.cpp:55
std::vector< float > centers
Clusters centers.
Definition: xmmKMeans.hpp:139
Configuration< KMeans > configuration
Configuration (default and class-specific parameters)
Definition: xmmKMeans.hpp:129
void train(TrainingSet *trainingSet)
Train the K-Means clutering from the given training set.
Definition: xmmKMeans.cpp:65
Results< KMeans > results
Results of the cluster association after update with an observation.
Definition: xmmKMeans.hpp:134
Results of the clustering process.
Definition: xmmKMeansResults.hpp:44
void reset()
Resets the fitering process (cluster association)
Definition: xmmKMeans.cpp:199
InitializationMode
Type of initizalization of the K-Means algorithm.
Definition: xmmKMeans.hpp:54
static const float DEFAULT_RELATIVE_VARIATION_THRESHOLD()
Definition: xmmKMeans.hpp:49
void filter(std::vector< float > const &observation)
filters a incoming observation (performs cluster association)
Definition: xmmKMeans.cpp:203
Model configuration.
Definition: xmmModelConfiguration.hpp:89
void randomizeClusters(std::vector< float > const &trainingSetVariance)
randomzie Cluster Centers (normalized width data variance) of the first phrase of the training set ...
Definition: xmmKMeans.cpp:129
void initClustersWithFirstPhrase(std::shared_ptr< Phrase > phrase)
Initialize the clusters using a regular segmentation of the first phrase of the training set...
Definition: xmmKMeans.cpp:110
Json::Value toJson() const
Write the object to a JSON Structure.
Definition: xmmKMeans.cpp:221
K-Means Clustering algorithm.
Definition: xmmKMeans.hpp:46
T euclidean_distance(const T *vector1, const T *vector2, unsigned int dimension)
Simple Euclidian distance measure.
Definition: xmmKMeans.cpp:277
Base class for the definition of training sets.
Definition: xmmTrainingSet.hpp:46
void updateCenters(std::vector< float > &previous_centers, TrainingSet *trainingSet)
Update method for training.
Definition: xmmKMeans.cpp:140
Abstract class for handling JSON + File I/O.
Definition: xmmJson.hpp:50
biased initialization: initialiazed with the first phrase
Definition: xmmAttribute.hpp:42
void fromJson(Json::Value const &root)
Read the object from a JSON Structure.
Definition: xmmKMeans.cpp:232
KMeans::InitializationMode initialization_mode
Type of initialization for the K-Means Algorithm.
Definition: xmmKMeans.hpp:144
KMeans(unsigned int clusters=1)
Default Constructor.
Definition: xmmKMeans.cpp:44
random initialization (scaled using training set variance)
std::shared_ptr< SharedParameters > shared_parameters
Set of Parameters shared among classes.
Definition: xmmKMeans.hpp:124
static const unsigned int DEFAULT_MAX_ITERATIONS
Definition: xmmKMeans.hpp:48