KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Cell_base_classes.h
Go to the documentation of this file.
1 /* $Id: Cell_base_classes.h 17119 2014-07-17 00:46:17Z cdawson $ */
2 
3 #ifndef CELL_BASE_CLASSES_H_
4 #define CELL_BASE_CLASSES_H_
5 
13 #include <boost/shared_ptr.hpp>
14 #include <vector>
15 
16 /* /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ */
17 
18 namespace semantics
19 {
20  class Cell;
21  class Marginal_cell_base;
22  class Context_cell_base;
23 
24 class Cell
25 {
26 public:
27  typedef boost::shared_ptr<Cell> Self_ptr;
28  typedef std::vector<size_t> Step_sizes;
29  static bool VERBOSE;
30 public:
33  const size_t& count() const {return count_;}
34 
37  const size_t& table_count() const {return table_count_;}
38 
41  virtual const Categorical_event_base& key() const = 0;
42 
45  virtual void increment() {++count_;}
46 
49  virtual void decrement()
50  {
51  assert(count_ > 0);
52  --count_;
53  }
54 
57  virtual void increment_table_count() {++table_count_;}
58 
61  virtual void decrement_table_count()
62  {
63  assert(table_count_ > 0);
64  --table_count_;
65  }
66 
67 protected:
68  size_t count_;
69  size_t table_count_;
70 
73  Cell() : count_(0), table_count_(0) {}
74 
77  virtual ~Cell() {}
78 };
79 
80 /* /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ */
81 
82 class Marginal_cell_base : public Cell
83 {
84 public:
85  typedef boost::shared_ptr<Marginal_cell_base> Self_ptr;
86  typedef boost::shared_ptr<Context_cell_base> Context_ptr;
87  typedef std::map<size_t, size_t> Table_count_map;
88 protected:
89  /*------------------------------------------------------------
90  * CONSTRUCTORS/DESTRUCTOR
91  *------------------------------------------------------------*/
92 
96  : Cell(),
98  {}
99 
100 public:
101 
102  /*------------------------------------------------------------
103  * ACCCESSORS
104  *------------------------------------------------------------*/
105 
108  virtual Self_ptr margin() const = 0;
109 
112  virtual Context_ptr context() const = 0;
113 
114  /*------------------------------------------------------------
115  * MANIPULATORS
116  *------------------------------------------------------------*/
117 
120  virtual void increment(const size_t& table_code) = 0;
121 
124  virtual void decrement(const size_t& table_code) = 0;
125 
128  virtual size_t sample_table_assignment() = 0;
129 
130  /*------------------------------------------------------------
131  * COMPUTATION
132  *------------------------------------------------------------*/
133 
136  virtual double smoothed_probability() = 0;
137 
142  virtual double backoff_probability() const = 0;
143 
149  virtual double predictive_probability() const = 0;
150 protected:
152 };
153 
154 /* /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ */
155 
156 class Context_cell_base : public Cell
157 {
158 public:
159  /*------------------------------------------------------------
160  * TYPEDEFS
161  *------------------------------------------------------------*/
162  typedef boost::shared_ptr<Context_cell_base> Self_ptr;
163 
164  /*------------------------------------------------------------
165  * STATIC MEMBERS
166  *------------------------------------------------------------*/
167 
169  static const double& a();
170  static const double& b();
171 
172 protected:
173 
174  /*------------------------------------------------------------
175  * CONSTRUCTORS/DESTRUCTOR
176  *------------------------------------------------------------*/
177 
181  : Cell(),
182  alpha_(1.0),
183  w_(0.5),
184  s_(0.0),
185  diversity_(0)
186  {}
187 
188 public:
189 
190  /*------------------------------------------------------------
191  * ACCESSORS
192  *------------------------------------------------------------*/
193 
196  int diversity() const {return diversity_;}
197 
200  double alpha() const {return alpha_;}
201 
202  /*------------------------------------------------------------
203  * MANIPULATORS
204  *------------------------------------------------------------*/
205 
208  virtual void increment_diversity() {++diversity_;}
209 
212  virtual void decrement_diversity() {--diversity_;}
213 
216  void resample_alpha();
217 
218  /*------------------------------------------------------------
219  * COMPUTATION
220  *------------------------------------------------------------*/
221 
226  double effective_tables() const {return alpha_ + table_count_;}
227 
232  double effective_observations() const {return alpha_ + count_;}
233 
238  double table_backoff_weight() const {return alpha_ / effective_tables();}
239 
245  {
246  return alpha_ / effective_observations();
247  }
248 
249 private:
250  double alpha_;
251  double w_;
252  double s_;
253  size_t diversity_;
254 };
255 
256 }; //namespace semantics
257 
258 
259 #endif
const size_t & count() const
get current count in this cell
Definition: Cell_base_classes.h:33
double table_backoff_weight() const
probability that a new table will draw from the level above this
Definition: Cell_base_classes.h:238
static const double & a()
Definition: Cell_base_classes.cpp:18
Definition: Cell_base_classes.h:156
Definition: Cell_base_classes.h:82
boost::shared_ptr< Context_cell_base > Context_ptr
Definition: Cell_base_classes.h:86
Marginal_cell_base()
constructor
Definition: Cell_base_classes.h:95
Definition: Cell_base_classes.h:24
double observation_backoff_weight() const
probability that a new customer will sit at a new table
Definition: Cell_base_classes.h:244
virtual size_t sample_table_assignment()=0
sample from the conditional predictive distribution of table assignment
double alpha() const
get the Dirichlet Process concentration parameter for this context
Definition: Cell_base_classes.h:200
virtual Self_ptr margin() const =0
get smoothed marginal cell ptr
virtual Context_ptr context() const =0
get ptr to conditioning context cell
Table_count_map per_table_counts_
Definition: Cell_base_classes.h:151
const size_t & table_count() const
get number of "tables" in this cell
Definition: Cell_base_classes.h:37
virtual double backoff_probability() const =0
prob of this outcome conditioned on starting a new table
boost::shared_ptr< Marginal_cell_base > Self_ptr
Definition: Cell_base_classes.h:85
Context_cell_base()
constructor
Definition: Cell_base_classes.h:180
size_t count_
Definition: Cell_base_classes.h:68
virtual void increment_table_count()
increment table count
Definition: Cell_base_classes.h:57
virtual void decrement()
decrement count
Definition: Cell_base_classes.h:49
virtual ~Cell()
virtual destructor
Definition: Cell_base_classes.h:77
virtual double smoothed_probability()=0
get smoothed probability estimate
virtual void increment()
increment count
Definition: Cell_base_classes.h:45
std::vector< size_t > Step_sizes
Definition: Cell_base_classes.h:28
void resample_alpha()
resample alpha value from conditional posterior
Definition: Cell_base_classes.cpp:21
std::map< size_t, size_t > Table_count_map
Definition: Cell_base_classes.h:87
double effective_observations() const
total mass for distribution over dish for a new customer
Definition: Cell_base_classes.h:232
virtual const Categorical_event_base & key() const =0
return variable values in this cell
virtual void decrement_diversity()
decrement the number of distinct outcomes from this context
Definition: Cell_base_classes.h:212
boost::shared_ptr< Context_cell_base > Self_ptr
Definition: Cell_base_classes.h:162
static const double & b()
Definition: Cell_base_classes.cpp:19
double effective_tables() const
total mass for distribution over the "dish" for a new table
Definition: Cell_base_classes.h:226
virtual void decrement_table_count()
decrement table count
Definition: Cell_base_classes.h:61
static bool VERBOSE
Definition: Cell_base_classes.h:29
virtual void increment_diversity()
increment the number of distinct outcomes from this context
Definition: Cell_base_classes.h:208
boost::shared_ptr< Cell > Self_ptr
Definition: Cell_base_classes.h:27
abstract base class for look-up keys
Definition: Categorical_event.h:58
int diversity() const
get number of distinct outcomes in this context
Definition: Cell_base_classes.h:196
size_t table_count_
Definition: Cell_base_classes.h:69
Cell()
default ctor
Definition: Cell_base_classes.h:73
virtual double predictive_probability() const =0
predictive probability of this outcome in this context