MNE-CPP  0.1.9
A Framework for Electrophysiology
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 
63 namespace UTILSLIB
64 {
65 
66 //=============================================================================================================
73 {
74 public:
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 
136 private:
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
K-Means Clustering.
Definition: kmeans.h:72
utils library export/import macros.
QSharedPointer< KMeans > SPtr
Definition: kmeans.h:75
#define UTILSSHARED_EXPORT
Definition: utils_global.h:58
QSharedPointer< const KMeans > ConstSPtr
Definition: kmeans.h:76