v2.0.0
Loading...
Searching...
No Matches
kmeans.h
Go to the documentation of this file.
1//=============================================================================================================
35
36#ifndef KMEANS_H
37#define KMEANS_H
38
39//=============================================================================================================
40// INCLUDES
41//=============================================================================================================
42
43#include "math_global.h"
44
45//=============================================================================================================
46// STL INCLUDES
47//=============================================================================================================
48
49#include <random>
50#include <string>
51
52//=============================================================================================================
53// QT INCLUDES
54//=============================================================================================================
55
56#include <QSharedPointer>
57
58//=============================================================================================================
59// EIGEN INCLUDES
60//=============================================================================================================
61
62#include <Eigen/Core>
63
64//=============================================================================================================
65// DEFINE NAMESPACE UTILSLIB
66//=============================================================================================================
67
68namespace UTILSLIB
69{
70
71//=============================================================================================================
72// ENUMS
73//=============================================================================================================
74
84
92
100
101//=============================================================================================================
112{
113public:
114 typedef QSharedPointer<KMeans> SPtr;
115 typedef QSharedPointer<const KMeans> ConstSPtr;
116
117 //=========================================================================================================
128 explicit KMeans(QString distance = QString("sqeuclidean"),
129 QString start = QString("sample"),
130 qint32 replicates = 1,
131 QString emptyact = QString("singleton"),
132 bool online = true,
133 qint32 maxit = 100);
134
135 //=========================================================================================================
146 explicit KMeans(KMeansDistance distance,
148 qint32 replicates = 1,
150 bool online = true,
151 qint32 maxit = 100);
152
153 //=========================================================================================================
166 bool calculate(const Eigen::MatrixXd& X,
167 qint32 kClusters,
168 Eigen::VectorXi& idx,
169 Eigen::MatrixXd& C,
170 Eigen::VectorXd& sumD,
171 Eigen::MatrixXd& D);
172
173 //=========================================================================================================
186 bool calculate(const Eigen::MatrixXd& X,
187 const Eigen::MatrixXd& start,
188 Eigen::VectorXi& idx,
189 Eigen::MatrixXd& C,
190 Eigen::VectorXd& sumD,
191 Eigen::MatrixXd& D);
192
193private:
194 //=========================================================================================================
202 Eigen::MatrixXd normalizedRows(const Eigen::MatrixXd& X) const;
203
204 //=========================================================================================================
217 bool runReplicate(const Eigen::MatrixXd& X,
218 Eigen::MatrixXd& C,
219 Eigen::VectorXi& idx,
220 Eigen::VectorXd& sumD,
221 Eigen::MatrixXd& D,
222 qint32 rep);
223
224 //=========================================================================================================
233 Eigen::MatrixXd distfun(const Eigen::MatrixXd& X,
234 const Eigen::MatrixXd& C);
235
236 //=========================================================================================================
247 bool batchUpdate(const Eigen::MatrixXd& X,
248 Eigen::MatrixXd& C,
249 Eigen::VectorXi& idx,
250 bool& converged);
251
252 //=========================================================================================================
262 void gcentroids(const Eigen::MatrixXd& X,
263 const Eigen::VectorXi& index,
264 const Eigen::VectorXi& clusts,
265 Eigen::MatrixXd& centroids,
266 Eigen::VectorXi& counts);
267
268 //=========================================================================================================
278 bool onlineUpdate(const Eigen::MatrixXd& X,
279 Eigen::MatrixXd& C,
280 Eigen::VectorXi& idx);
281
282 //=========================================================================================================
289 static KMeansDistance distanceFromString(const std::string& name);
290
291 //=========================================================================================================
298 static KMeansStart startFromString(const std::string& name);
299
300 //=========================================================================================================
307 static KMeansEmptyAction emptyactFromString(const std::string& name);
308
309 KMeansDistance m_distance;
310 KMeansStart m_start;
311 KMeansEmptyAction m_emptyact;
312 qint32 m_iReps;
313 qint32 m_iMaxit;
314 bool m_bOnline;
315
316 std::mt19937 m_rng;
317
318 qint32 emptyErrCnt;
319 qint32 iter;
320 qint32 k;
321 qint32 n;
322 qint32 p;
323
324 Eigen::MatrixXd Del;
325 Eigen::VectorXd d;
326 Eigen::VectorXi m;
327
328 double totsumD;
329 double prevtotsumD;
330 Eigen::VectorXi previdx;
331};
332} // NAMESPACE
333
334#endif // KMEANS_H
constexpr int X
Export/import macros and build-stamp accessors for MATHLIB.
#define MATHSHARED_EXPORT
Definition math_global.h:51
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
KMeansDistance
Distance metric for K-Means clustering.
Definition kmeans.h:77
KMeansEmptyAction
Action to take when a K-Means cluster becomes empty.
Definition kmeans.h:95
KMeansStart
Initialization strategy for K-Means clustering.
Definition kmeans.h:87
QSharedPointer< const KMeans > ConstSPtr
Definition kmeans.h:115
KMeans(QString distance=QString("sqeuclidean"), QString start=QString("sample"), qint32 replicates=1, QString emptyact=QString("singleton"), bool online=true, qint32 maxit=100)
Definition kmeans.cpp:76
bool calculate(const Eigen::MatrixXd &X, qint32 kClusters, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)
QSharedPointer< KMeans > SPtr
Definition kmeans.h:114
bool calculate(const Eigen::MatrixXd &X, const Eigen::MatrixXd &start, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)