SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Factor.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2013 Shell Hu
8  * Copyright (C) 2013 Shell Hu
9  */
10 
11 #ifndef __FACTOR_RELATED_H__
12 #define __FACTOR_RELATED_H__
13 
14 #include <shogun/lib/config.h>
15 
16 #include <shogun/base/SGObject.h>
17 #include <shogun/lib/SGVector.h>
20 
21 namespace shogun
22 {
23 
28 {
29 public:
32 
38 
44 
46  virtual ~CFactorDataSource();
47 
49  virtual const char* get_name() const { return "FactorDataSource"; }
50 
52  virtual bool is_sparse() const;
53 
55  virtual SGVector<float64_t> get_data() const;
56 
59 
64  virtual void set_data(SGVector<float64_t> dense);
65 
71  virtual void set_data_sparse(SGSparseVectorEntry<float64_t>* sparse, int32_t dlen);
72 
73 private:
75  void init();
76 
77 private:
79  SGVector<float64_t> m_dense;
80 
83 };
84 
89 class CFactor : public CSGObject
90 {
91 public:
93  CFactor();
94 
102 
109  CFactor(CTableFactorType* ftype, SGVector<int32_t> var_index,
110  SGSparseVector<float64_t> data_sparse);
111 
118  CFactor(CTableFactorType* ftype, SGVector<int32_t> var_index,
119  CFactorDataSource* data_source);
120 
122  virtual ~CFactor();
123 
125  virtual const char* get_name() const { return "Factor"; }
126 
129 
134  void set_factor_type(CTableFactorType* ftype);
135 
137  const SGVector<int32_t> get_variables() const;
138 
143  void set_variables(SGVector<int32_t> vars);
144 
146  const SGVector<int32_t> get_cardinalities() const;
147 
150 
153 
158  void set_data(SGVector<float64_t> data_dense);
159 
165  void set_data_sparse(SGSparseVectorEntry<float64_t>* data_sparse, int32_t dlen);
166 
168  bool is_data_dependent() const;
169 
171  bool is_data_sparse() const;
172 
177 
182  float64_t get_energy(int32_t index) const;
183 
187  void set_energies(SGVector<float64_t> ft_energies);
188 
193  void set_energy(int32_t ei, float64_t value);
194 
199  float64_t evaluate_energy(const SGVector<int32_t> state) const;
200 
202  void compute_energies();
203 
210  void compute_gradients(const SGVector<float64_t> marginals,
211  SGVector<float64_t>& parameter_gradient, double mult = 1.0) const;
212 
213 protected:
216 
219 
222 
225 
228 
231 
234 
235 private:
237  void init();
238 };
239 
240 }
241 
242 #endif
243 

SHOGUN Machine Learning Toolbox - Documentation