v2.0.0
Loading...
Searching...
No Matches
kmeans.h
Go to the documentation of this file.
1//=============================================================================================================
36
37#ifndef KMEANS_H
38#define KMEANS_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "math_global.h"
45
46//=============================================================================================================
47// STL INCLUDES
48//=============================================================================================================
49
50#include <random>
51#include <string>
52
53//=============================================================================================================
54// QT INCLUDES
55//=============================================================================================================
56
57#include <QSharedPointer>
58
59//=============================================================================================================
60// EIGEN INCLUDES
61//=============================================================================================================
62
63#include <Eigen/Core>
64
65//=============================================================================================================
66// DEFINE NAMESPACE UTILSLIB
67//=============================================================================================================
68
69namespace UTILSLIB
70{
71
72//=============================================================================================================
73// ENUMS
74//=============================================================================================================
75
85
93
101
102//=============================================================================================================
109{
110public:
111 typedef QSharedPointer<KMeans> SPtr;
112 typedef QSharedPointer<const KMeans> ConstSPtr;
113
114 //=========================================================================================================
125 explicit KMeans(QString distance = QString("sqeuclidean"),
126 QString start = QString("sample"),
127 qint32 replicates = 1,
128 QString emptyact = QString("error"),
129 bool online = true,
130 qint32 maxit = 100);
131
132 //=========================================================================================================
143 explicit KMeans(KMeansDistance distance,
145 qint32 replicates = 1,
147 bool online = true,
148 qint32 maxit = 100);
149
150 //=========================================================================================================
163 bool calculate(const Eigen::MatrixXd& X,
164 qint32 kClusters,
165 Eigen::VectorXi& idx,
166 Eigen::MatrixXd& C,
167 Eigen::VectorXd& sumD,
168 Eigen::MatrixXd& D);
169
170private:
171 //=========================================================================================================
180 Eigen::MatrixXd distfun(const Eigen::MatrixXd& X,
181 const Eigen::MatrixXd& C);
182
183 //=========================================================================================================
193 bool batchUpdate(const Eigen::MatrixXd& X,
194 Eigen::MatrixXd& C,
195 Eigen::VectorXi& idx);
196
197 //=========================================================================================================
207 void gcentroids(const Eigen::MatrixXd& X,
208 const Eigen::VectorXi& index,
209 const Eigen::VectorXi& clusts,
210 Eigen::MatrixXd& centroids,
211 Eigen::VectorXi& counts);
212
213 //=========================================================================================================
223 bool onlineUpdate(const Eigen::MatrixXd& X,
224 Eigen::MatrixXd& C,
225 Eigen::VectorXi& idx);
226
227 //=========================================================================================================
234 static KMeansDistance distanceFromString(const std::string& name);
235
236 //=========================================================================================================
243 static KMeansStart startFromString(const std::string& name);
244
245 //=========================================================================================================
252 static KMeansEmptyAction emptyactFromString(const std::string& name);
253
254 KMeansDistance m_distance;
255 KMeansStart m_start;
256 KMeansEmptyAction m_emptyact;
257 qint32 m_iReps;
258 qint32 m_iMaxit;
259 bool m_bOnline;
260
261 std::mt19937 m_rng;
262
263 qint32 emptyErrCnt;
264 qint32 iter;
265 qint32 k;
266 qint32 n;
267 qint32 p;
268
269 Eigen::MatrixXd Del;
270 Eigen::VectorXd d;
271 Eigen::VectorXi m;
272
273 double totsumD;
274 double prevtotsumD;
275 Eigen::VectorXi previdx;
276};
277} // NAMESPACE
278
279#endif // KMEANS_H
#define X
math library export/import macros.
#define MATHSHARED_EXPORT
Definition math_global.h:55
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
KMeansDistance
Distance metric for K-Means clustering.
Definition kmeans.h:78
KMeansEmptyAction
Action to take when a K-Means cluster becomes empty.
Definition kmeans.h:96
KMeansStart
Initialization strategy for K-Means clustering.
Definition kmeans.h:88
bool calculate(const Eigen::MatrixXd &X, qint32 kClusters, Eigen::VectorXi &idx, Eigen::MatrixXd &C, Eigen::VectorXd &sumD, Eigen::MatrixXd &D)
Definition kmeans.cpp:140
QSharedPointer< const KMeans > ConstSPtr
Definition kmeans.h:112
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:65
QSharedPointer< KMeans > SPtr
Definition kmeans.h:111