6 #include <Eigen/Cholesky>
8 #include "Clustering.hpp"
30 DLL_DECLSPEC
void set_seed(
unsigned int seed);
75 maximise_first_ = maximise_first;
82 DLL_DECLSPEC
bool fit(Eigen::Ref<const Eigen::MatrixXd> data)
override;
88 return number_components_;
120 DLL_DECLSPEC
const Eigen::MatrixXd&
covariance(
unsigned int k)
const;
127 return mixing_probabilities_;
135 return responsibilities_;
141 return log_likelihood_;
147 return means_initialiser_;
156 DLL_DECLSPEC
void assign_responsibilities(Eigen::Ref<const Eigen::VectorXd> x, Eigen::Ref<Eigen::VectorXd> u)
const;
158 const std::vector<unsigned int>&
labels()
const override
168 std::default_random_engine prng_;
169 std::shared_ptr<const Clustering::CentroidsInitialiser> means_initialiser_;
170 std::shared_ptr<const Clustering::ResponsibilitiesInitialiser> responsibilities_initialiser_;
171 Eigen::VectorXd mixing_probabilities_;
172 Eigen::MatrixXd means_;
173 Eigen::MatrixXd responsibilities_;
174 Eigen::VectorXd work_vector_;
175 std::vector<Eigen::MatrixXd> covariances_;
176 std::vector<Eigen::MatrixXd> inverse_covariances_;
177 std::vector<Eigen::LLT<Eigen::MatrixXd>> covariance_decompositions_;
178 Eigen::VectorXd sqrt_covariance_determinants_;
179 std::vector<unsigned int> labels_;
180 double absolute_tolerance_;
181 double relative_tolerance_;
182 double log_likelihood_;
183 unsigned int number_components_;
184 unsigned int maximum_steps_;
186 bool maximise_first_;
189 static Eigen::MatrixXd calculate_sample_covariance(Eigen::Ref<const Eigen::MatrixXd> data);
191 void process_covariances(Eigen::Index number_dimensions);
193 void expectation_step(Eigen::Ref<const Eigen::MatrixXd> data);
195 void maximisation_step(Eigen::Ref<const Eigen::MatrixXd> data);
197 void calculate_labels();
bool fit(Eigen::Ref< const Eigen::MatrixXd > data) override
Fits the model.
void assign_responsibilities(Eigen::Ref< const Eigen::VectorXd > x, Eigen::Ref< Eigen::VectorXd > u) const
Given a data point x, calculate each component's responsibilities for x and save them in u.
void set_verbose(bool verbose)
Switches between verbose and quiet mode.
Definition: EM.hpp:65
void set_relative_tolerance(double relative_tolerance)
Sets relative tolerance for convergence test.
void set_seed(unsigned int seed)
Sets PRNG seed.
const auto & covariances() const
Returns a const reference to fitted component covariance matrices.
Definition: EM.hpp:112
Definition: BallTree.hpp:10
bool converged() const override
Reports if the model converged.
Definition: EM.hpp:163
void set_maximise_first(bool maximise_first)
Switches between starting with E or M step first.
Definition: EM.hpp:73
const std::vector< unsigned int > & labels() const override
Returns a const reference to resulting cluster labels for each datapoint. Value make sense only if fi...
Definition: EM.hpp:158
const Eigen::MatrixXd & centroids() const override
Returns a const reference to the matrix of cluster centroids (in columns).
Definition: EM.hpp:104
EM(unsigned int number_components)
Constructs an EM ready to fit.
Abstract clustering model.
Definition: Clustering.hpp:17
void set_maximum_steps(unsigned int maximum_steps)
Sets maximum number of E-M steps.
const auto & means() const
Returns a const reference to matrix containing fitted component means.
Definition: EM.hpp:99
double log_likelihood() const
Returns a const reference to maximised log-likelihood of training data.
Definition: EM.hpp:139
const auto & mixing_probabilities() const
Returns a const reference to fitted component mixing probabilities.
Definition: EM.hpp:125
const Eigen::MatrixXd & covariance(unsigned int k) const
Returns a const reference to fitted k-th component's covariance matrix.
void set_responsibilities_initialiser(std::shared_ptr< const Clustering::ResponsibilitiesInitialiser > responsibilities_initialiser)
Sets responsibilities initialiser.
void set_absolute_tolerance(double absolute_tolerance)
Sets absolute tolerance for convergence test.
Gaussian Expectation-Maximisation algorithm.
Definition: EM.hpp:18
unsigned int number_clusters() const override
Returns the number of clusters.
Definition: EM.hpp:91
const auto & responsibilities() const
Returns a const reference to resulting component responsibilities.
Definition: EM.hpp:133
void set_means_initialiser(std::shared_ptr< const Clustering::CentroidsInitialiser > means_initialiser)
Sets means initialiser.
std::shared_ptr< const Clustering::CentroidsInitialiser > means_initialiser() const
Returns a shared pointer to means initialiser implementation.
Definition: EM.hpp:145
auto number_components() const
Returns the number of components.
Definition: EM.hpp:86