1 #ifndef _LDAPLUSPLUS_LDA_HPP_ 2 #define _LDAPLUSPLUS_LDA_HPP_ 5 #include <condition_variable> 15 #include "ldaplusplus/events/Events.hpp" 16 #include "ldaplusplus/em/EStepInterface.hpp" 17 #include "ldaplusplus/em/MStepInterface.hpp" 18 #include "ldaplusplus/Parameters.hpp" 34 template <
typename Scalar =
double>
37 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic> MatrixX;
38 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1> VectorX;
59 std::shared_ptr<em::EStepInterface<Scalar> > e_step,
60 std::shared_ptr<em::MStepInterface<Scalar> > m_step,
61 size_t iterations = 20,
82 void fit(
const Eigen::MatrixXi &X,
const Eigen::VectorXi &y);
95 void fit(
const Eigen::MatrixXi &X);
106 void partial_fit(
const Eigen::MatrixXi &X,
const Eigen::VectorXi &y);
114 void partial_fit(std::shared_ptr<corpus::Corpus> corpus);
124 MatrixX
transform(
const Eigen::MatrixXi &X);
154 Eigen::VectorXi
predict(
const Eigen::MatrixXi &X);
165 std::tuple<MatrixX, Eigen::VectorXi>
transform_predict(
const Eigen::MatrixXi &X);
171 return event_dispatcher_;
178 return model_parameters_;
181 template <
typename P>
183 return std::static_pointer_cast<P>(model_parameters_);
191 const Eigen::MatrixXi &X,
192 const Eigen::VectorXi &y
198 std::shared_ptr<corpus::Corpus>
get_corpus(
const Eigen::MatrixXi &X);
245 Eigen::VectorXi
predict(
const MatrixX &scores);
253 void set_up_event_dispatcher();
256 std::shared_ptr<parameters::Parameters> model_parameters_;
259 std::shared_ptr<em::EStepInterface<Scalar> > e_step_;
260 std::shared_ptr<em::MStepInterface<Scalar> > m_step_;
266 std::vector<std::thread> workers_;
267 std::mutex queue_in_mutex_;
268 std::list<std::tuple<std::shared_ptr<corpus::Corpus>,
size_t> > queue_in_;
269 std::mutex queue_out_mutex_;
270 std::condition_variable queue_out_cv_;
271 std::list<std::tuple<std::shared_ptr<parameters::Parameters>,
size_t> > queue_out_;
275 std::shared_ptr<events::EventDispatcherInterface> event_dispatcher_;
280 #endif // _LDAPLUSPLUS_LDA_HPP_ void fit(const Eigen::MatrixXi &X, const Eigen::VectorXi &y)
Definition: LDA.cpp:65
void destroy_worker_pool()
Definition: LDA.cpp:243
LDA(std::shared_ptr< parameters::Parameters > model_parameters, std::shared_ptr< em::EStepInterface< Scalar > > e_step, std::shared_ptr< em::MStepInterface< Scalar > > m_step, size_t iterations=20, size_t workers=1)
Definition: LDA.cpp:14
MatrixX transform(const Eigen::MatrixXi &X)
Definition: LDA.cpp:139
void process_worker_events()
Definition: LDA.hpp:214
std::tuple< MatrixX, Eigen::VectorXi > transform_predict(const Eigen::MatrixXi &X)
Definition: LDA.cpp:222
std::shared_ptr< corpus::Corpus > get_corpus(const Eigen::MatrixXi &X, const Eigen::VectorXi &y)
Definition: LDA.cpp:50
std::shared_ptr< events::EventDispatcherInterface > get_event_dispatcher()
Definition: LDA.hpp:170
void partial_fit(const Eigen::MatrixXi &X, const Eigen::VectorXi &y)
Definition: LDA.cpp:85
std::tuple< std::shared_ptr< parameters::Parameters >, size_t > extract_vp_from_queue()
Definition: LDA.cpp:283
const std::shared_ptr< parameters::Parameters > model_parameters()
Definition: LDA.hpp:177
MatrixX decision_function(const Eigen::MatrixXi &X)
Definition: LDA.cpp:180
void create_worker_pool()
Definition: LDA.cpp:233
void doc_e_step_worker()
Definition: LDA.cpp:251
Definition: Events.hpp:206
Eigen::VectorXi predict(const Eigen::MatrixXi &X)
Definition: LDA.cpp:204
Definition: Document.hpp:11