Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 #if !defined(ALIZE_MixtureStat_h)
00056 #define ALIZE_MixtureStat_h
00057
00058 #if defined(_WIN32)
00059 #if defined(ALIZE_EXPORTS)
00060 #define ALIZE_API __declspec(dllexport)
00061 #else
00062 #define ALIZE_API __declspec(dllimport)
00063 #endif
00064 #else
00065 #define ALIZE_API
00066 #endif
00067
00068 #include "Object.h"
00069 #include "StatServer.h"
00070 #include "RealVector.h"
00071
00072 namespace alize
00073 {
00074 class Config;
00075 class Feature;
00076 class LKVector;
00077
00085 class ALIZE_API MixtureStat : public Object
00086 {
00087 friend class TestMixtureGFStat;
00088 friend class TestMixtureGDStat;
00089 friend class TestMixtureStat;
00090
00091 public :
00092
00093 explicit MixtureStat(StatServer&, const Mixture&, const Config&);
00094 virtual ~MixtureStat();
00095
00099 Mixture& getMixture() const;
00100
00107 void resetLLK();
00108
00113 lk_t computeLLK(const Feature& f);
00114
00120 lk_t computeLLK(const Feature& f, unsigned long idx);
00121
00126 lk_t getLLK() const;
00127
00128
00134 lk_t getAccumulatedLLK() const;
00135
00145 lk_t computeAndAccumulateLLK(const Feature& f, double w = 1.0f,
00146 const TopDistribsAction& a = TOP_DISTRIBS_NO_ACTION);
00147
00148
00158 lk_t computeAndAccumulateLLK(const Feature& f, const LKVector& topDistribsVector,
00159 double w = 1.0f);
00160
00167 lk_t computeAndAccumulateLLK();
00168
00174 lk_t accumulateLLK(lk_t llk, double w = 1.0);
00175
00183 lk_t getMeanLLK() const;
00184
00188 double getAccumulatedLLKFeatureCount() const;
00189
00190
00191
00192
00193
00194
00195
00199 void resetOcc();
00200
00204 real_t getAccumulatedOccFeatureCount() const;
00205
00209 DoubleVector& getOccVect();
00210 const DoubleVector& getOccVect() const;
00211
00215 DoubleVector& getAccumulatedOccVect();
00216 const DoubleVector& getAccumulatedOccVect() const;
00217
00221 occ_t getAccumulatedOcc();
00222
00228 real_t computeAndAccumulateOcc(const Feature& f, weight_t w = 1.0);
00229
00234 DoubleVector& getMeanOccVect();
00235
00236
00237
00240 virtual void resetEM() = 0;
00241
00248 virtual occ_t computeAndAccumulateEM(const Feature& f, real_t weight = 1.0) = 0;
00249
00250 virtual void addAccEM(const MixtureStat&) = 0;
00251
00256 virtual const Mixture& getEM() = 0;
00257
00261 real_t getEMFeatureCount() const;
00262
00263
00264
00265 virtual String getClassName() const = 0;
00266 virtual String toString() const;
00267
00268 protected :
00269
00270 const unsigned long _distribCount;
00271 const Mixture* _pMixture;
00272 const Config& _config;
00273 const lk_t _minLLK;
00274 const lk_t _maxLLK;
00275
00276 lk_t _llk;
00277 lk_t _accumulatedLLK;
00278 double _featureCounterForAccumulatedLK;
00279
00280 DoubleVector _occVect;
00281 DoubleVector _accumulatedOccVect;
00282 DoubleVector _meanOccVect;
00283 real_t _featureCounterForAccumulatedOcc;
00284
00285 bool _resetedEM;
00286 StatServer* _pStatServer;
00287 real_t _featureCounterForEM;
00288
00289 real_t computeOccVect(const Feature&);
00290 void assertResetEMDone() const;
00291
00292 private:
00293 bool operator==(const MixtureStat&) const;
00294 bool operator!=(const MixtureStat&) const;
00295 const MixtureStat& operator=(
00296 const MixtureStat&);
00297 MixtureStat(const MixtureStat&);
00299 };
00300
00301 }
00302
00303 #endif // !defined(ALIZE_MixtureStat_h)