41 if (fMatrix(0, fMatrix.ColumnSize() - 1) > 0.0)
43 nbStates = fMatrix.ColumnSize();
47 nbStates = fMatrix.ColumnSize() - 1;
50 for (
s = 0;
s < nbStates;
s++)
52 model.States[
s].Prio = fMatrix(0,
s);
56 nbDim = fMatrix.RowSize();
57 model.nbStates = nbStates;
61 for (
s = 0;
s < nbStates;
s++)
63 model.States[
s].Mu.Resize(nbDim);
64 model.States[
s].Sigma.Resize(nbDim, nbDim);
67 for (
s = 0;
s < nbStates;
s++)
69 model.States[
s].Mu = fMatrix.GetColumn(
s);
72 fMatrix.Load(f_sigma);
74 for (
s = 0;
s < nbStates;
s++)
76 for (i = 0; i < nbDim; i++)
78 model.States[
s].Sigma.SetRow(fMatrix.GetRow(j), i);
93 model.nbStates = nbStates;
96 for (
s = 0;
s < nbStates;
s++)
98 model.States[
s].Mu.Resize(nbDim);
99 model.States[
s].Sigma.Resize(nbDim, nbDim);
104 for (
s = 0;
s < nbStates;
s++)
106 model.States[
s].Mu = fMatrix.GetColumn(
s);
109 fMatrix.Resize(nbStates * nbDim, nbDim);
110 fMatrix.Load(f_sigma);
112 for (
s = 0;
s < nbStates;
s++)
114 for (i = 0; i < nbDim; i++)
116 model.States[
s].Sigma.SetRow(fMatrix.GetRow(j), i);
121 fMatrix.Resize(1, nbStates);
122 fMatrix.Load(f_prio);
124 for (
s = 0;
s < nbStates;
s++)
126 model.States[
s].Prio = fMatrix(0,
s);
132 const vector<double> pri_vec,
133 const vector<double> mu_vec,
134 const vector<double> sig_vec)
137 model.nbStates = nbStates;
140 for (
int s = 0;
s < nbStates;
s++)
142 model.States[
s].Mu.Resize(nbDim);
143 model.States[
s].Sigma.Resize(nbDim, nbDim);
146 for (
int s = 0;
s < nbStates;
s++)
148 model.States[
s].Prio = pri_vec[
s];
157 for (
int s = 0;
s < nbStates;
s++)
159 for (
int d = 0; d < nbDim; d++)
161 model.States[
s].Mu[d] = mu_vec[
s * nbDim + d];
174 for (
int s = 0;
s < nbStates;
s++)
176 for (
int row = 0; row < nbDim; row++)
178 for (
int col = 0; col < nbDim; col++)
180 int ind =
s * nbDim * nbDim + row * nbDim + col;
181 model.States[
s].Sigma(row, col) = sig_vec[ind];
214 int nbIN = last_inindex - first_inindex + 1;
216 for (
unsigned int s = 0;
s < model.nbStates;
s++)
218 gmmpinv[
s].MuI.Resize(nbIN);
219 gmmpinv[
s].SigmaII.Resize(nbIN, nbIN);
220 gmmpinv[
s].SigmaIIInv.Resize(nbIN, nbIN);
223 for (
unsigned int s = 0;
s < model.nbStates;
s++)
225 for (
int i = first_inindex; i <= last_inindex; i++)
227 gmmpinv[
s].MuI(i - first_inindex) = model.States[
s].Mu(i);
229 for (
int i = first_inindex; i <= last_inindex; i++)
230 for (
int j = first_inindex; j <= last_inindex; j++)
232 gmmpinv[
s].SigmaII(i - first_inindex, j - first_inindex) =
233 model.States[
s].Sigma(i, j);
236 gmmpinv[
s].SigmaII.Inverse(gmmpinv[
s].SigmaIIInv, &det);
243 gmmpinv[
s].detSigmaII = det;
246 nbDimI = last_inindex - first_inindex + 1;
247 gfDiff.Resize(nbDimI);
248 gfDiffp.Resize(nbDimI);
256 gfDiff =
x - gmmpinv[state].MuI;
257 gfDiffp = gmmpinv[state].SigmaIIInv * gfDiff;
259 p = exp(-0.5 * gfDiff.Dot(gfDiffp)) /
260 sqrt(pow(2.0 *
PI, nbDimI) * (gmmpinv[state].detSigmaII + 1e-30));
269 for (
unsigned int s = 0;
s < model.nbStates;
s++)
271 totalP += model.States[
s].Prio * GaussianPDFFast(
s,
x);
280 for (
unsigned int s = 0;
s < model.nbStates;
s++)
282 gDer += (gmmpinv[
s].SigmaIIInv * (
x - gmmpinv[
s].MuI)) * model.States[
s].Prio *
283 GaussianPDFFast(
s,
x);
292 int nbIN = last_inindex - first_inindex + 1;
293 int nbOUT = last_outindex - first_outindex + 1;
295 gPdf.Resize(model.nbStates);
297 for (
unsigned int s = 0;
s < model.nbStates;
s++)
299 gmmpinv[
s].MuI.Resize(nbIN);
300 gmmpinv[
s].SigmaII.Resize(nbIN, nbIN);
301 gmmpinv[
s].SigmaIIInv.Resize(nbIN, nbIN);
303 gmmpinv[
s].muO.Resize(nbOUT);
304 gmmpinv[
s].SigmaIO.Resize(nbIN, nbOUT);
305 gmmpinv[
s].SigmaIOInv.Resize(nbOUT, nbOUT);
308 for (
unsigned int s = 0;
s < model.nbStates;
s++)
310 for (
int i = first_inindex; i <= last_inindex; i++)
312 gmmpinv[
s].MuI(i - first_inindex) = model.States[
s].Mu(i);
314 for (
int j = first_inindex; j <= last_inindex; j++)
316 gmmpinv[
s].SigmaII(i - first_inindex, j - first_inindex) =
317 model.States[
s].Sigma(i, j);
319 for (
int j = first_outindex; j <= last_outindex; j++)
321 gmmpinv[
s].SigmaIO(i - first_inindex, j - first_outindex) =
322 model.States[
s].Sigma(i, j);
326 for (
int i = first_outindex; i <= last_outindex; i++)
328 gmmpinv[
s].muO(i - first_outindex) = model.States[
s].Mu(i);
331 gmmpinv[
s].SigmaII.Inverse(gmmpinv[
s].SigmaIIInv, &det);
336 gmmpinv[
s].detSigmaII = det;
337 (gmmpinv[
s].SigmaIO).Transpose().Inverse(gmmpinv[
s].SigmaIOInv, &det);
340 nbDimI = last_inindex - first_inindex + 1;
341 gfDiff.Resize(nbDimI);
342 gfDiffp.Resize(nbDimI);
351 Regression(indata, outdata);
352 cout <<
"derivative is not implemented yet " << endl;
362 for (
unsigned int s = 0;
s < model.nbStates;
s++)
364 gPdf(
s) = model.States[
s].Prio * GaussianPDFFast(
s, indata);
369 for (
unsigned int s = 0;
s < model.nbStates;
s++)
372 h(
s) = gPdf(
s) / (pdfall);
373 r_diff = gmmpinv[
s].SigmaIO.Transpose() * gmmpinv[
s].SigmaIIInv * (indata - gmmpinv[
s].MuI);
375 for (
unsigned int i = 0; i < r_diff.Size(); i++)
377 outdata(i) += h(
s) * (r_diff(i) + gmmpinv[
s].muO(i));
386 Regression(indata, outdata);