C++ main module for mmsd Package  1.0
MMSD_Model.h
Go to the documentation of this file.
1 #ifndef MMSD_Model_H
2 #define MMSD_Model_H
3 
4 #include "CORE_File.h"
5 
6 #include "MMSD_Object.h"
7 
8 #include "MMSD_DataSet.h"
9 #include "MMSD_Cluster.h"
10 #include "MMSD_DoubleVector.h"
11 #include "CORE_ClassFactory.h"
12 
41 class MMSD_Model : public virtual MMSD_Object {
42  SP_OBJECT(MMSD_Model);
43  // ATTRIBUTES
44 
45 
46 private:
47  tBoolean mIsEmptyClusterDeleted;
48 
49  tString mWeightInitType;
50  double mWeightInitScale;
51  double mWeightInitRate;
52 
53  // max iterations number
54  int mEMMaximumIterationsNumber;
55 
56  // effective iterations number
57  int mEMIterationsNumber;
58 
59 
60  // data set whose properties is of size N x P & clusters of size N
61  SP::MMSD_DataSet mDataSet;
62 
63  // clusters
64  // store for backup
65  SV::MMSD_Cluster mClusters;
66 
67  MMSD_IntegerVector mSampleClusterIndices;
68  MMSD_DoubleFullMatrix mSampleClusterProbabilities;
69 
70 
71  // logL
72  MMSD_DoubleVector mLogL;
73 
74  // computing variables
75  MMSD_DoubleVector mWork;// size nThreads*nSamples
76 
77 
78  // min eigen value for diagonal
79  double mMinEigenValue;
80 
81 
82 
83 
84 protected:
85  // METHODS
86 
87  // CONSTRUCTORS
88 
90  MMSD_Model(void);
91 
92 
93 
94  // DESTRUCTORS
95 
96 
99  virtual ~MMSD_Model(void);
100 
101 
102 
103 public:
104  //----------------
105  // NEW constructors
106  // ---------------
107 
108 
109  // -----------------
110  // SET & GET Methods
111  // -----------------
112 public:
117  inline void setIsEmptyClusterDeleted(const tBoolean& v) {
118  mIsEmptyClusterDeleted=v;
119  }
122  inline void setDataSet(SP::MMSD_DataSet data) {
123  mDataSet=data;
124  };
127  inline const MMSD_DataSet* getDataSet() const {
128  return mDataSet.get();
129  };
133  return mDataSet.get();
134  };
135 
140  inline void setEMMaximumIterationsNumber(const int& n) {
141  mEMMaximumIterationsNumber=n;
142  };
147  inline int getEMMaximumIterationsNumber() const {
148  return mEMMaximumIterationsNumber;
149  };
150 
155  inline int getEMIterationsNumber() const {
156  return mEMIterationsNumber;
157  };
158 
159 
160 
161 
162 
166  return mClusters.getSize();
167  };
168 
169 
172  inline const MMSD_Cluster* getCluster(const tVectorIndex& index) const {
173  if ((index>=0) && (index<mClusters.getSize())) return mClusters.get(index);
174  return null;
175  }
176 
180  return mSampleClusterProbabilities;
181  };
185  return mSampleClusterIndices;
186  };
187 
190  inline void setMinEigenValue(const double& v) {mMinEigenValue=v;};
193  inline double getMinEigenValue() const {return mMinEigenValue;};
194 
195 
198  virtual SP::MMSD_Cluster NewClusterInstance() const=0;
199 
202  virtual SP::MMSD_Law NewLawInstance() const=0;
203 
204 
205 
214  inline void setWeightInitializationType(const tString& type,const double& scale, const double& rate) {
215  mWeightInitType=type;
216  mWeightInitScale=scale;
217  mWeightInitRate=rate;
218  }
219  // -----------------
220  // Optimization Mehod
221  // -----------------
222 
223 
224 public:
253  tBoolean parametersOptimizationByEMMethod(const int& nClusters,
254  const MMSD_IntegerVector& sampleClusters,
255  const tString& backupPath,
256  const tString& backupPrefix,
257  const int& nDigits,
258  const int& backupSteps);
259 
265  inline tBoolean parametersOptimizationByEMMethod(const int& nClusters,
266  const MMSD_IntegerVector& sampleClusters) {
267  return parametersOptimizationByEMMethod(nClusters,sampleClusters,
268  "","",0,-1);
269  };
274  MMSD_IntegerVector sampleClusters;
275  return parametersOptimizationByEMMethod(0,sampleClusters,"","",0,-1);
276  };
285  const tString& backupPrefix,
286  const int& nDigits,
287  const int& backupSteps) {
288  MMSD_IntegerVector sampleClusters;
289  return parametersOptimizationByEMMethod(0,sampleClusters,backupPath,backupPrefix,nDigits,backupSteps);
290  };
291 
292 
293 
294 
302  inline tBoolean restore(SP::CORE_ClassFactory factory,
303  const tString& backupPath,
304  const tString& backupPrefix,
305  const int& nDigits,const int& step) {
306  tString file=backupPath+CORE_File::PATH_SEPARATOR+backupPrefix+CORE_Integer::toString(step,nDigits)+".R";
307  return restore(factory,file);
308  }
309 
315  tBoolean restore(SP::CORE_ClassFactory factory,const tString& file);
316 
317 
318 
319 protected:
320 
329  virtual void restore(const MMSD_DoubleFullMatrix& properties);
330 
351  virtual void initialize(const MMSD_IntegerVector& clusters,
352  const MMSD_DoubleFullMatrix& properties,
353  const int& nClusters);
354 
355 public:
377 
382  computeSampleClusterProbabilities(mSampleClusterProbabilities,mWork);
383  }
384 
393  MMSD_IntegerVector& indices) const;
394 
408 
421  tBoolean hasConverged() const;
422 public:
428  return computeLogLikelihood(mWork,logL);
429  }
430 private:
437  tBoolean computeLogLikelihood(MMSD_DoubleVector& sumExpPk,double& logL) const;
438 
439 public:
442  const MMSD_DoubleVector& getLogL() const {
443  return mLogL;
444  }
445 
446  // ------------------------------
447  // SAVER & LOADER for UI class
448  // ------------------------------
451  virtual void saveToUIClass(UI_Class& mclass) const;
452 
455  virtual void loadFromUIClass(const UI_Class& mclass);
456  // ----------------------
457  // String representation
458  // ----------------------
459 public:
462  virtual tString toString() const {
464  return ret;
465  }
466 
467 
468 };
469 
470 #endif
tBoolean computeLogLikelihood(double &logL)
compute logLikelihood
Definition: MMSD_Model.h:427
virtual void initialize(const MMSD_IntegerVector &clusters, const MMSD_DoubleFullMatrix &properties, const int &nClusters)
initialization INPUT parameters:
Definition: MMSD_Model.cpp:175
void setEMMaximumIterationsNumber(const int &n)
set the maximum iterations number for EM algorithm
Definition: MMSD_Model.h:140
static const tString PATH_SEPARATOR
Definition: CORE_File.h:31
tVectorIndex getClustersNumber() const
get clusters number
Definition: MMSD_Model.h:165
virtual SP::MMSD_Law NewLawInstance() const =0
create a cluster
#define tVectorIndex
Definition: types.h:42
void computeSampleClusterProbabilities()
compute clusters probability for each sample
Definition: MMSD_Model.h:381
const MMSD_IntegerVector & getSampleClusterIndices() const
get the cluster of samples vector of size N
Definition: MMSD_Model.h:184
This class describes the FullMatrix class.
Definition: MMSD_DoubleFullMatrix.h:17
This class describes the main interface class for a soft user interface (R,matlab,python etc...) class.
Definition: UI_Class.h:38
const MMSD_DoubleVector & getLogL() const
get logL for each iteration of the optimization process
Definition: MMSD_Model.h:442
virtual ~MMSD_Model(void)
destroy an object.
Definition: MMSD_Model.cpp:23
MMSD_Model(void)
create an object
Definition: MMSD_Model.cpp:9
void setWeightInitializationType(const tString &type, const double &scale, const double &rate)
set the weight initialization type & parameters
Definition: MMSD_Model.h:214
#define tBoolean
Definition: types.h:48
void setDataSet(SP::MMSD_DataSet data)
set the data set
Definition: MMSD_Model.h:122
virtual void loadFromUIClass(const UI_Class &mclass)
how to load the object from a Meta Model class
Definition: MMSD_Model.cpp:43
#define null
Definition: types.h:13
This class describes a data set.
Definition: MMSD_DataSet.h:26
tBoolean esperanceEvaluation()
compute Esperance Evaluation step
Definition: MMSD_Model.cpp:552
tBoolean restore(SP::CORE_ClassFactory factory, const tString &backupPath, const tString &backupPrefix, const int &nDigits, const int &step)
restore the model from a file
Definition: MMSD_Model.h:302
void setIsEmptyClusterDeleted(const tBoolean &v)
if true the empty clusters are deleted during esperaceEvaluation() defalut value: false...
Definition: MMSD_Model.h:117
void setMinEigenValue(const double &v)
set min eigen value for eigen value decomposition of property covariance matrix law ...
Definition: MMSD_Model.h:190
tBoolean hasConverged() const
test of convergence
Definition: MMSD_Model.cpp:792
Definition: MMSD_DoubleVector.h:16
tBoolean parametersOptimizationByEMMethod()
optimise the parameters of each laws by EM algorithm
Definition: MMSD_Model.h:273
int getEMMaximumIterationsNumber() const
get the maximum iterations number for EM algorithm
Definition: MMSD_Model.h:147
int getEMIterationsNumber() const
get the number of iterations done
Definition: MMSD_Model.h:155
Definition: MMSD_IntegerVector.h:15
const MMSD_Cluster * getCluster(const tVectorIndex &index) const
get the cluster at index
Definition: MMSD_Model.h:172
const MMSD_DataSet * getDataSet() const
get the data set
Definition: MMSD_Model.h:127
This class is a general MMSD Model.
Definition: MMSD_Model.h:41
DEFINE_SPTR(MMSD_Model)
tString toString() const
return the string associated to the integer
Definition: CORE_Integer.h:142
#define tString
Definition: types.h:49
virtual void saveToUIClass(UI_Class &mclass) const
how to save the object from a mate model class
Definition: MMSD_Model.cpp:26
tBoolean esperanceMaximization()
compute Esperance Maximization step
Definition: MMSD_Model.cpp:635
const MMSD_DoubleFullMatrix & getSampleClusterProbabilities() const
get the probability of samples to be in cluster matrix of size NxK
Definition: MMSD_Model.h:179
tBoolean parametersOptimizationByEMMethod(const tString &backupPath, const tString &backupPrefix, const int &nDigits, const int &backupSteps)
optimise the parameters of each laws by EM algorithm
Definition: MMSD_Model.h:284
This class is a geneal MMSD Cluster.
Definition: MMSD_Cluster.h:36
double getMinEigenValue() const
get min eigen value for eigen value decomposition of property covariance matrix law ...
Definition: MMSD_Model.h:193
MMSD_DataSet * getDataSet()
get the data set
Definition: MMSD_Model.h:132
tBoolean parametersOptimizationByEMMethod(const int &nClusters, const MMSD_IntegerVector &sampleClusters)
optimise the parameters of each laws by EM algorithm
Definition: MMSD_Model.h:265
void computeSampleClusterIndices(MMSD_DoubleVector &work, MMSD_IntegerVector &indices) const
compute the index of cluster for each sample
Definition: MMSD_Model.cpp:405
virtual tString toString() const
return the string representation of the object node
Definition: CORE_Object.cpp:102
virtual SP::MMSD_Cluster NewClusterInstance() const =0
create a cluster
virtual tString toString() const
turn the class into string
Definition: MMSD_Model.h:462
This class is the base class of all Mixture of Multiple Scaled Distribution package.
Definition: MMSD_Object.h:20