MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
kmeans.h
Go to the documentation of this file.
1//=============================================================================================================
37#ifndef KMEANS_H
38#define KMEANS_H
39
40//=============================================================================================================
41// INCLUDES
42//=============================================================================================================
43
44#include "utils_global.h"
45
46//=============================================================================================================
47// QT INCLUDES
48//=============================================================================================================
49
50#include <string>
51#include <QSharedPointer>
52
53//=============================================================================================================
54// EIGEN INCLUDES
55//=============================================================================================================
56
57#include <Eigen/Core>
58
59//=============================================================================================================
60// DEFINE NAMESPACE MNELIB
61//=============================================================================================================
62
63namespace UTILSLIB
64{
65
66//=============================================================================================================
73{
74public:
75 typedef QSharedPointer<KMeans> SPtr;
76 typedef QSharedPointer<const KMeans> ConstSPtr;
78 //distance {'sqeuclidean','cityblock','cosine','correlation','hamming'};
79 //startNames = {'uniform','sample','cluster'};
80 //emptyactNames = {'error','drop','singleton'};
81
82 //=========================================================================================================
93 explicit KMeans(QString distance = QString("sqeuclidean") ,
94 QString start = QString("sample"),
95 qint32 replicates = 1,
96 QString emptyact = QString("error"),
97 bool online = true,
98 qint32 maxit = 100);
99
100// //=========================================================================================================
101// /**
102// * Constructs a KMeans algorithm object.
103// *
104// * @param[in] distance (optional) K-Means distance measure: "sqeuclidean" (default), "cityblock" , "cosine", "correlation", "hamming".
105// * @param[in] start (optional) Cluster initialization: "sample" (default), "uniform", "cluster".
106// * @param[in] replicates (optional) Number of K-Means replicates, which are generated. Best is returned.
107// * @param[in] emptyact (optional) What happens if a cluster wents empty: "error" (default), "drop", "singleton".
108// * @param[in] online (optional) If centroids should be updated during iterations: true (default), false.
109// * @param[in] maxit (optional) maximal number of iterations per replicate; 100 by default.
110// */
111// explicit KMeans(std::string distance = std::string{"sqeuclidean"} ,
112// std::string start = std::string{"sample"},
113// qint32 replicates = 1,
114// std::string emptyact = std::string{"error"},
115// bool online = true,
116// qint32 maxit = 100);
117
118 //=========================================================================================================
129 bool calculate( Eigen::MatrixXd X,
130 qint32 kClusters,
131 Eigen::VectorXi& idx,
132 Eigen::MatrixXd& C,
133 Eigen::VectorXd& sumD,
134 Eigen::MatrixXd& D);
135
136private:
137 //=========================================================================================================
146 Eigen::MatrixXd distfun(const Eigen::MatrixXd& X,
147 Eigen::MatrixXd& C);//, qint32 iter);
148
149 //=========================================================================================================
159 bool batchUpdate(const Eigen::MatrixXd& X,
160 Eigen::MatrixXd& C,
161 Eigen::VectorXi& idx);
162
163 //=========================================================================================================
173 void gcentroids(const Eigen::MatrixXd& X,
174 const Eigen::VectorXi& index,
175 const Eigen::VectorXi& clusts,
176 Eigen::MatrixXd& centroids,
177 Eigen::VectorXi& counts);
178
179 //=========================================================================================================
189 bool onlineUpdate(const Eigen::MatrixXd& X,
190 Eigen::MatrixXd& C,
191 Eigen::VectorXi& idx);
192
193 //=========================================================================================================
202 double unifrnd(double a, double b);
203
204 std::string m_sDistance;
205 std::string m_sStart;
206 qint32 m_iReps;
207 std::string m_sEmptyact;
208 qint32 m_iMaxit;
209 bool m_bOnline;
211 qint32 emptyErrCnt;
213 qint32 iter;
214 qint32 k;
215 qint32 n;
216 qint32 p;
218 Eigen::MatrixXd Del;
219 Eigen::VectorXd d;
220 Eigen::VectorXi m;
222 double totsumD;
224 double prevtotsumD;
226 Eigen::VectorXi previdx;
227};
228} // NAMESPACE
229
230#endif // KMEANS_H
int k
Definition fiff_tag.cpp:324
utils library export/import macros.
#define UTILSSHARED_EXPORT
K-Means Clustering.
Definition kmeans.h:73
QSharedPointer< const KMeans > ConstSPtr
Definition kmeans.h:76
QSharedPointer< KMeans > SPtr
Definition kmeans.h:75