public void HiddenMarkovHiddenPotentialFunctionConstructorTest2()
{
var model = CreateModel2();
var target = new MarkovMultivariateFunction(model);
var features = target.Features;
double[] weights = target.Weights;
Assert.AreEqual(38, features.Length);
Assert.AreEqual(38, weights.Length);
int k = 0;
for (int c = 0; c < model.Classes; c++)
{
Assert.AreEqual(Math.Log(model.Priors[c]), weights[k++]);
for (int i = 0; i < model[c].States; i++)
Assert.AreEqual(model[c].Probabilities[i], weights[k++]);
for (int i = 0; i < model[c].States; i++)
for (int j = 0; j < model[c].States; j++)
Assert.AreEqual(model[c].Transitions[i, j], weights[k++]);
for (int i = 0; i < model[c].States; i++)
for (int j = 0; j < model[c].Dimension; j++)
{
double mean = model[c].Emissions[i].Mean[j];
double var = model[c].Emissions[i].Variance[j];
double l2ps = System.Math.Log(2 * System.Math.PI * var);
Assert.AreEqual(-0.5 * (l2ps + (mean * mean) / var), weights[k++]);
Assert.AreEqual(mean / var, weights[k++]);
Assert.AreEqual(-1.0 / (2 * var), weights[k++]);
}
}
}