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//=============================================================================================================
110{
111public:
112 typedef QSharedPointer<KMeans> SPtr;
113 typedef QSharedPointer<const KMeans> ConstSPtr;
114
115 //=========================================================================================================
126 explicit KMeans(QString distance = QString("sqeuclidean"),
127 QString start = QString("sample"),
128 qint32 replicates = 1,
129 QString emptyact = QString("error"),
130 bool online = true,
131 qint32 maxit = 100);
132
133 //=========================================================================================================
144 explicit KMeans(KMeansDistance distance,
146 qint32 replicates = 1,
148 bool online = true,
149 qint32 maxit = 100);
150
151 //=========================================================================================================
164 bool calculate(const Eigen::MatrixXd& X,
165 qint32 kClusters,
166 Eigen::VectorXi& idx,
167 Eigen::MatrixXd& C,
168 Eigen::VectorXd& sumD,
169 Eigen::MatrixXd& D);
170
171private:
172 //=========================================================================================================
181 Eigen::MatrixXd distfun(const Eigen::MatrixXd& X,
182 const Eigen::MatrixXd& C);
183
184 //=========================================================================================================
194 bool batchUpdate(const Eigen::MatrixXd& X,
195 Eigen::MatrixXd& C,
196 Eigen::VectorXi& idx);
197
198 //=========================================================================================================
208 void gcentroids(const Eigen::MatrixXd& X,
209 const Eigen::VectorXi& index,
210 const Eigen::VectorXi& clusts,
211 Eigen::MatrixXd& centroids,
212 Eigen::VectorXi& counts);
213
214 //=========================================================================================================
224 bool onlineUpdate(const Eigen::MatrixXd& X,
225 Eigen::MatrixXd& C,
226 Eigen::VectorXi& idx);
227
228 //=========================================================================================================
235 static KMeansDistance distanceFromString(const std::string& name);
236
237 //=========================================================================================================
244 static KMeansStart startFromString(const std::string& name);
245
246 //=========================================================================================================
253 static KMeansEmptyAction emptyactFromString(const std::string& name);
254
255 KMeansDistance m_distance;
256 KMeansStart m_start;
257 KMeansEmptyAction m_emptyact;
258 qint32 m_iReps;
259 qint32 m_iMaxit;
260 bool m_bOnline;
261
262 std::mt19937 m_rng;
263
264 qint32 emptyErrCnt;
265 qint32 iter;
266 qint32 k;
267 qint32 n;
268 qint32 p;
269
270 Eigen::MatrixXd Del;
271 Eigen::VectorXd d;
272 Eigen::VectorXi m;
273
274 double totsumD;
275 double prevtotsumD;
276 Eigen::VectorXi previdx;
277};
278} // NAMESPACE
279
280#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
bool calculate(const Eigen::MatrixXd &X, qint32 kClusters, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)
Definition kmeans.cpp:131
QSharedPointer< const KMeans > ConstSPtr
Definition kmeans.h:113
KMeans(QString distance=QString("sqeuclidean"), QString start=QString("sample"), qint32 replicates=1, QString emptyact=QString("error"), bool online=true, qint32 maxit=100)
Definition kmeans.cpp:56
QSharedPointer< KMeans > SPtr
Definition kmeans.h:112