LDA++
AbstractEStep.hpp
1 #ifndef _LDAPLUSPLUS_EM_ABSTRACTESTEP_HPP_
2 #define _LDAPLUSPLUS_EM_ABSTRACTESTEP_HPP_
3 
4 #include <random>
5 
6 #include "ldaplusplus/em/EStepInterface.hpp"
7 #include "ldaplusplus/utils.hpp"
8 
9 namespace ldaplusplus {
10 namespace em {
11 
20 template <typename Scalar>
21 class AbstractEStep : public EStepInterface<Scalar>
22 {
24 
25  public:
32  AbstractEStep(int random_state);
33 
38  virtual void e_step() override {}
39 
40  protected:
50  bool converged(
51  const Eigen::Matrix<Scalar, Eigen::Dynamic, 1> & gamma_old,
52  const Eigen::Matrix<Scalar, Eigen::Dynamic, 1> & gamma,
53  Scalar tolerance
54  );
55 
64  PRNG &get_prng() { return random_; }
65 
66  private:
67  // A random number generator to be used for every random number needed
68  // in this E step (initialized with random_state constructor parameter)
69  PRNG random_;
70 };
71 
72 
73 } // namespace em
74 } // namespace ldaplusplus
75 
76 #endif // _LDAPLUSPLUS_EM_ABSTRACTESTEP_HPP_
virtual void e_step() override
Definition: AbstractEStep.hpp:38
Definition: EStepInterface.hpp:24
AbstractEStep(int random_state)
Definition: AbstractEStep.cpp:8
PRNG & get_prng()
Definition: AbstractEStep.hpp:64
bool converged(const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &gamma_old, const Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > &gamma, Scalar tolerance)
Definition: AbstractEStep.cpp:13
Definition: AbstractEStep.hpp:21
Definition: Document.hpp:11