noparama  v0.0.1
Nonparametric Bayesian models
np_suffies.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Eigen/Dense>
4 #include <map>
5 
11  // gamma
13  // normals
15  // multivariate normals
17  // inverse wisharts and alike, useful as priors for normals
19  // hierarchical priors
21 };
22 
23 static std::map< distribution_type_t, const char * > distribution_type_str = {
24  {Gamma, "gamma"},
25  {Normal, "normal"},
26  {Unity_Normal, "unity normal"},
27  {MultivariateNormal, "multivariate normal"},
28  {Unity_MultivariateNormal, "unity multivariate normal"},
29  {ZeroCentered_MultivariateNormal, "zero-centered multivariate normal"},
30  {ScalarNoise_MultivariateNormal, "zero-centered multivariate normal"},
31  {NormalInvWishart, "normal inverse-Wishart"},
32  {InvWishart, "inverse-Wishart"},
33  {NormalInvGamma, "normal inverse-Gamma"},
34  {Dirichlet, "Dirichlet"}
35 };
36 
39 static Eigen::IOFormat CommaInitFmt(Eigen::StreamPrecision, Eigen::DontAlignCols, " ", "; ", "", "", "", "");
40 
48 class Suffies {
49  public:
51  int D;
52 
55 
56  virtual ~Suffies() {
57  };
58 
59  virtual void print(std::ostream& os) const {
60  os << D << " (probably a copy by value rather than copy by reference somewhere?)";
61  }
62 
63  friend std::ostream& operator<<(std::ostream& os, const Suffies& s);
64 };
65 
66 class Suffies_Gamma: public Suffies {
67  public:
68  double alpha;
69  double beta;
70 
73  }
74 
75  void print(std::ostream& os) const {
76  os << "g[alpha|beta]: " << alpha << " | " << beta;
77  }
78 };
79 
81  public:
82  Eigen::VectorXd mu;
83  double kappa;
84  double nu;
85  Eigen::MatrixXd Lambda;
86 
87  Suffies_NormalInvWishart(int D): mu(D), Lambda(D,D) {
88  Suffies::D = D;
90  }
91 
92  void print(std::ostream& os) const {
93  os << "niw[nu|kappa|nu|Lambda]: " << nu << " | " << kappa << " | " << nu << " | " << Lambda.format(CommaInitFmt);
94  }
95 };
96 
97 class Suffies_InvWishart: public Suffies {
98  public:
99  double nu;
100  Eigen::MatrixXd Lambda;
101 
102  Suffies_InvWishart(int D): Lambda(D,D) {
103  Suffies::D = D;
105  }
106 
107  void print(std::ostream& os) const {
108  os << "iw[nu|Lambda]: " << nu << " | " << Lambda.format(CommaInitFmt);
109  }
110 };
111 
113  public:
114  Eigen::VectorXd mu;
115  double alpha;
116  double beta;
117  //double gamma;
118  Eigen::MatrixXd Lambda; // the multidimensional version
119 
120  Suffies_NormalInvGamma(int D): mu(D), Lambda(D,D) {
121  Suffies::D = D;
123  }
124 
125  void print(std::ostream& os) const {
126  os << "nig[mu|alpha|beta|gamma]: " << mu << " | " << alpha << " | " << beta << " | " << Lambda.format(CommaInitFmt);
127  }
128 };
129 
130 class Suffies_Normal: public Suffies {
131  public:
132  double mu;
133  double sigma;
134 
137  }
138 
139  void print(std::ostream& os) const {
140  os << "n[mu|sigma]: " << mu << " | " << sigma;
141  }
142 };
143 
144 class Suffies_Double: public Suffies {
145  public:
146  double val;
147 
148  void print(std::ostream& os) const {
149  os << "[val]: " << val;
150  }
151 };
152 
157  public:
158  Eigen::VectorXd mu;
159 
161  Suffies::D = D;
163  }
164 
165  void print(std::ostream& os) const {
166  os << "mvn[mu]: " << mu;
167  }
168 };
169 
174  public:
175  Eigen::MatrixXd sigma;
176 
178  Suffies::D = D;
180  }
181 
182  void print(std::ostream& os) const {
183  os << "mvn[sigma]: " << sigma.format(CommaInitFmt);
184  }
185 };
186 
188  public:
189  Eigen::VectorXd mu;
190  Eigen::MatrixXd sigma;
191 
192  Suffies_MultivariateNormal(int D): mu(D), sigma(D,D) {
193  Suffies::D = D;
195  }
196 
197  void print(std::ostream& os) const {
198  os << "mvn[mu|sigma]: " << mu.transpose() << " | " << sigma.format(CommaInitFmt);
199  }
200 };
201 
203  public:
204  Eigen::VectorXd mu;
205  double sigma;
206 
208  Suffies::D = D;
210  }
211 
212  void print(std::ostream& os) const {
213  os << "mvn[mu|sigma]: " << mu.transpose() << " | " << sigma;
214  }
215 };
216 
217 class Suffies_Dirichlet: public Suffies {
218  public:
219  double alpha;
220 // Suffies base_suffies;
221 
224  }
225 
226  void print(std::ostream& os) const {
227  os << "d[alpha]: " << alpha;
228  }
229 
230 };
void print(std::ostream &os) const
Definition: np_suffies.h:182
double nu
Definition: np_suffies.h:99
Definition: np_suffies.h:144
Suffies_NormalInvWishart(int D)
Definition: np_suffies.h:87
void print(std::ostream &os) const
Definition: np_suffies.h:197
void print(std::ostream &os) const
Definition: np_suffies.h:107
Definition: np_suffies.h:12
double sigma
Definition: np_suffies.h:133
Definition: np_suffies.h:48
double val
Definition: np_suffies.h:146
double alpha
Definition: np_suffies.h:115
void print(std::ostream &os) const
Definition: np_suffies.h:92
Suffies_ZeroCentered_MultivariateNormal(int D)
Definition: np_suffies.h:177
virtual void print(std::ostream &os) const
Definition: np_suffies.h:59
Suffies_NormalInvGamma(int D)
Definition: np_suffies.h:120
Definition: pretty_print.hpp:115
distribution_type_t
Definition: np_suffies.h:10
Definition: np_suffies.h:66
Suffies_Normal()
Definition: np_suffies.h:135
Definition: np_suffies.h:14
distribution_type_t distribution_type
distribution type
Definition: np_suffies.h:54
Definition: np_suffies.h:156
double nu
Definition: np_suffies.h:84
Suffies_Gamma()
Definition: np_suffies.h:71
Definition: np_suffies.h:217
Eigen::MatrixXd Lambda
Definition: np_suffies.h:118
double alpha
Definition: np_suffies.h:219
Eigen::VectorXd mu
Definition: np_suffies.h:82
Eigen::MatrixXd sigma
Definition: np_suffies.h:190
Definition: np_suffies.h:16
Definition: np_suffies.h:80
Definition: np_suffies.h:202
void print(std::ostream &os) const
Definition: np_suffies.h:165
Definition: np_suffies.h:112
virtual ~Suffies()
Definition: np_suffies.h:56
Definition: np_suffies.h:97
Suffies_Dirichlet()
Definition: np_suffies.h:222
void print(std::ostream &os) const
Definition: np_suffies.h:148
Eigen::VectorXd mu
Definition: np_suffies.h:189
Definition: np_suffies.h:18
Definition: np_suffies.h:187
friend std::ostream & operator<<(std::ostream &os, const Suffies &s)
Definition: np_suffies.cpp:3
Definition: np_suffies.h:16
double alpha
Definition: np_suffies.h:68
double sigma
Definition: np_suffies.h:205
void print(std::ostream &os) const
Definition: np_suffies.h:212
double beta
Definition: np_suffies.h:116
Eigen::MatrixXd Lambda
Definition: np_suffies.h:85
Suffies_ScalarNoise_MultivariateNormal(int D)
Definition: np_suffies.h:207
Definition: np_suffies.h:16
Suffies_MultivariateNormal(int D)
Definition: np_suffies.h:192
Eigen::MatrixXd Lambda
Definition: np_suffies.h:100
Eigen::VectorXd mu
Definition: np_suffies.h:204
int D
dimension
Definition: np_suffies.h:51
void print(std::ostream &os) const
Definition: np_suffies.h:226
void print(std::ostream &os) const
Definition: np_suffies.h:125
Suffies_InvWishart(int D)
Definition: np_suffies.h:102
Eigen::VectorXd mu
Definition: np_suffies.h:158
Definition: np_suffies.h:20
double mu
Definition: np_suffies.h:132
void print(std::ostream &os) const
Definition: np_suffies.h:139
Suffies_Unity_MultivariateNormal(int D)
Definition: np_suffies.h:160
Definition: np_suffies.h:18
Definition: np_suffies.h:18
Definition: np_suffies.h:16
double beta
Definition: np_suffies.h:69
Eigen::VectorXd mu
Definition: np_suffies.h:114
Eigen::MatrixXd sigma
Definition: np_suffies.h:175
Definition: np_suffies.h:173
double kappa
Definition: np_suffies.h:83
Definition: np_suffies.h:14
Definition: np_suffies.h:130
void print(std::ostream &os) const
Definition: np_suffies.h:75