本文整理汇总了C#中MarkovDiscreteFunction类的典型用法代码示例。如果您正苦于以下问题:C# MarkovDiscreteFunction类的具体用法?C# MarkovDiscreteFunction怎么用?C# MarkovDiscreteFunction使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MarkovDiscreteFunction类属于命名空间,在下文中一共展示了MarkovDiscreteFunction类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ComputeTest
public void ComputeTest()
{
HiddenMarkovModel hmm = DiscreteHiddenMarkovModelFunctionTest.CreateModel2();
int states = hmm.States;
var function = new MarkovDiscreteFunction(hmm);
var target = new ConditionalRandomField<int>(states, function);
double p1, p2;
int[] observations, expected, actual;
observations = new int[] { 0, 0, 1, 1, 1, 2 };
expected = hmm.Decode(observations, out p1);
actual = target.Compute(observations, out p2);
Assert.IsTrue(expected.IsEqual(actual));
Assert.AreEqual(p1, p2, 1e-6);
observations = new int[] { 0, 1, 2, 2, 2 };
expected = hmm.Decode(observations, out p1);
actual = target.Compute(observations, out p2);
Assert.IsTrue(expected.IsEqual(actual));
Assert.AreEqual(p1, p2, 1e-6);
}
示例2: BackwardTest
public void BackwardTest()
{
HiddenMarkovModel hmm = Accord.Tests.Statistics.Models.Markov.
ForwardBackwardAlgorithmTest.CreateModel2();
var function = new MarkovDiscreteFunction(hmm);
// A B B A
int[] observations = { 0, 1, 1, 0 };
double logLikelihood;
double[,] actual = Accord.Statistics.Models.Fields.
ForwardBackwardAlgorithm.Backward(function.Factors[0], observations, 0, out logLikelihood);
var A = Matrix.Exp(hmm.Transitions);
var B = Matrix.Exp(hmm.Emissions);
var P = Matrix.Exp(hmm.Probabilities);
double a30 = 1;
double a31 = 1;
double a20 = A[0, 0] * B[0, 0] * a30 + A[0, 1] * B[1, 0] * a31;
double a21 = A[1, 0] * B[0, 0] * a30 + A[1, 1] * B[1, 0] * a31;
double a10 = A[0, 0] * B[0, 1] * a20 + A[0, 1] * B[1, 1] * a21;
double a11 = A[1, 0] * B[0, 1] * a20 + A[1, 1] * B[1, 1] * a21;
double a00 = A[0, 0] * B[0, 1] * a10 + A[0, 1] * B[1, 1] * a11;
double a01 = A[1, 0] * B[0, 1] * a10 + A[1, 1] * B[1, 1] * a11;
Assert.AreEqual(actual[0, 0], a00, 1e-10);
Assert.AreEqual(actual[0, 1], a01, 1e-10);
Assert.AreEqual(actual[1, 0], a10, 1e-10);
Assert.AreEqual(actual[1, 1], a11, 1e-10);
Assert.AreEqual(actual[2, 0], a20, 1e-10);
Assert.AreEqual(actual[2, 1], a21, 1e-10);
Assert.AreEqual(actual[3, 0], a30, 1e-10);
Assert.AreEqual(actual[3, 1], a31, 1e-10);
foreach (double e in actual)
Assert.IsFalse(double.IsNaN(e));
double p = 0;
for (int i = 0; i < hmm.States; i++)
p += actual[0, i] * P[i] * B[i, observations[0]];
Assert.AreEqual(0.054814695, p, 1e-8);
Assert.IsFalse(double.IsNaN(p));
p = System.Math.Exp(logLikelihood);
Assert.AreEqual(0.054814695, p, 1e-8);
Assert.IsFalse(double.IsNaN(p));
}
示例3: HiddenConditionalRandomFieldConstructorTest
public void HiddenConditionalRandomFieldConstructorTest()
{
HiddenMarkovClassifier hmm = HiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
var function = new MarkovDiscreteFunction(hmm);
var target = new HiddenConditionalRandomField<int>(function);
Assert.AreEqual(function, target.Function);
Assert.AreEqual(2, target.Function.Factors[0].States);
}
示例4: ConditionalRandomFieldConstructorTest
public void ConditionalRandomFieldConstructorTest()
{
HiddenMarkovModel hmm = DiscreteHiddenMarkovModelFunctionTest.CreateModel1();
int states = 2;
var function = new MarkovDiscreteFunction(hmm);
var target = new ConditionalRandomField<int>(states, function);
Assert.AreEqual(function, target.Function);
Assert.AreEqual(2, target.States);
}
示例5: ComputeTest
public void ComputeTest()
{
HiddenMarkovClassifier hmm = DiscreteHiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
// Declare some testing data
int[][] inputs = new int[][]
{
new int[] { 0,1,1,0 }, // Class 0
new int[] { 0,0,1,0 }, // Class 0
new int[] { 0,1,1,1,0 }, // Class 0
new int[] { 0,1,0 }, // Class 0
new int[] { 1,0,0,1 }, // Class 1
new int[] { 1,1,0,1 }, // Class 1
new int[] { 1,0,0,0,1 }, // Class 1
new int[] { 1,0,1 }, // Class 1
};
int[] outputs = new int[]
{
0,0,0,0, // First four sequences are of class 0
1,1,1,1, // Last four sequences are of class 1
};
var function = new MarkovDiscreteFunction(hmm);
var target = new HiddenConditionalRandomField<int>(function);
for (int i = 0; i < inputs.Length; i++)
{
int expected = hmm.Compute(inputs[i]);
int actual = target.Compute(inputs[i]);
double h0 = hmm.LogLikelihood(inputs[i], 0);
double h1 = hmm.LogLikelihood(inputs[i], 1);
double c0 = target.LogLikelihood(inputs[i], 0);
double c1 = target.LogLikelihood(inputs[i], 1);
Assert.AreEqual(expected, actual);
Assert.AreEqual(h0, c0, 1e-10);
Assert.AreEqual(h1, c1, 1e-10);
Assert.IsFalse(double.IsNaN(c0));
Assert.IsFalse(double.IsNaN(c1));
}
}
示例6: RunTest
public void RunTest()
{
var inputs = QuasiNewtonHiddenLearningTest.inputs;
var outputs = QuasiNewtonHiddenLearningTest.outputs;
HiddenMarkovClassifier hmm = HiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
var function = new MarkovDiscreteFunction(hmm);
var model = new HiddenConditionalRandomField<int>(function);
var target = new HiddenGradientDescentLearning<int>(model);
target.LearningRate = 1000;
double[] actual = new double[inputs.Length];
double[] expected = new double[inputs.Length];
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
double ll0 = model.LogLikelihood(inputs, outputs);
double error = Double.NegativeInfinity;
for (int i = 0; i < 50; i++)
error = target.RunEpoch(inputs, outputs);
double ll1 = model.LogLikelihood(inputs, outputs);
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
Assert.AreEqual(-0.00046872579976353634, ll0, 1e-10);
Assert.AreEqual(0.00027018722449589916, error, 1e-10);
Assert.IsFalse(Double.IsNaN(ll0));
Assert.IsFalse(Double.IsNaN(error));
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
Assert.IsTrue(ll1 > ll0);
}
示例7: RunTest
public void RunTest()
{
var inputs = QuasiNewtonHiddenLearningTest.inputs;
var outputs = QuasiNewtonHiddenLearningTest.outputs;
HiddenMarkovClassifier hmm = DiscreteHiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
var function = new MarkovDiscreteFunction(hmm);
var model = new HiddenConditionalRandomField<int>(function);
var target = new HiddenConjugateGradientLearning<int>(model);
double[] actual = new double[inputs.Length];
double[] expected = new double[inputs.Length];
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
double ll0 = model.LogLikelihood(inputs, outputs);
double error = target.Run(inputs, outputs);
double ll1 = model.LogLikelihood(inputs, outputs);
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
Assert.AreEqual(-0.0019419916698781847, ll0, 1e-10);
Assert.AreEqual(0.00050271005636426391, error, 1e-10);
Assert.AreEqual(error, -ll1);
Assert.IsFalse(Double.IsNaN(ll0));
Assert.IsFalse(Double.IsNaN(error));
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
Assert.IsTrue(ll1 > ll0);
}
示例8: ComputeTest
public void ComputeTest()
{
var hmm = DiscreteHiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
IPotentialFunction<int> owner = new MarkovDiscreteFunction(hmm);
int[] x = new int[] { 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0 };
foreach (var factor in owner.Factors)
{
for (int y = 0; y < owner.Outputs; y++)
{
double[,] fwd = Accord.Statistics.Models.Fields
.ForwardBackwardAlgorithm.Forward(factor, x, y);
double[,] bwd = Accord.Statistics.Models.Fields
.ForwardBackwardAlgorithm.Backward(factor, x, y);
double[,] lnfwd = Accord.Statistics.Models.Fields
.ForwardBackwardAlgorithm.LogForward(factor, x, y);
double[,] lnbwd = Accord.Statistics.Models.Fields
.ForwardBackwardAlgorithm.LogBackward(factor, x, y);
for (int i = 0; i < fwd.GetLength(0); i++)
for (int j = 0; j < fwd.GetLength(1); j++)
Assert.AreEqual(System.Math.Log(fwd[i, j]), lnfwd[i, j], 1e-10);
for (int i = 0; i < bwd.GetLength(0); i++)
for (int j = 0; j < bwd.GetLength(1); j++)
Assert.AreEqual(System.Math.Log(bwd[i, j]), lnbwd[i, j], 1e-10);
foreach (var feature in factor)
{
double expected = System.Math.Log(feature.Marginal(fwd, bwd, x, y));
double actual = feature.LogMarginal(lnfwd, lnbwd, x, y);
Assert.AreEqual(expected, actual, 1e-10);
Assert.IsFalse(Double.IsNaN(actual));
}
}
}
}
示例9: RunTest
public void RunTest()
{
HiddenMarkovClassifier hmm = HiddenMarkovClassifierPotentialFunctionTest.CreateModel1();
var function = new MarkovDiscreteFunction(hmm);
var model = new HiddenConditionalRandomField<int>(function);
var target = new HiddenQuasiNewtonLearning<int>(model);
double[] actual = new double[inputs.Length];
double[] expected = new double[inputs.Length];
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
double ll0 = model.LogLikelihood(inputs, outputs);
double error = target.Run(inputs, outputs);
double ll1 = model.LogLikelihood(inputs, outputs);
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
Assert.AreEqual(-0.00046872579976353634, ll0, 1e-10);
Assert.AreEqual(0.0, error, 1e-10);
Assert.AreEqual(error, -ll1);
Assert.IsFalse(Double.IsNaN(ll0));
Assert.IsFalse(Double.IsNaN(error));
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
Assert.IsTrue(ll1 > ll0);
}
示例10: ComputeTest
public void ComputeTest()
{
HiddenMarkovModel model = CreateModel1();
MarkovDiscreteFunction target = new MarkovDiscreteFunction(model);
double actual;
double expected;
int[] x = { 0, 1 };
for (int i = 0; i < model.States; i++)
{
// Check initial state transitions
expected = Math.Exp(model.Probabilities[i]) * Math.Exp(model.Emissions[i, x[0]]);
actual = Math.Exp(target.Factors[0].Compute(-1, i, x, 0));
Assert.AreEqual(expected, actual, 1e-6);
}
for (int t = 0; t < x.Length; t++)
{
for (int i = 0; i < model.States; i++)
{
// Check initial state transitions
expected = Math.Exp(model.Probabilities[i]) * Math.Exp(model.Emissions[i, x[0]]);
actual = Math.Exp(target.Factors[0].Compute(-1, i, x, 0));
Assert.AreEqual(expected, actual, 1e-6);
// Check normal state transitions
for (int j = 0; j < model.States; j++)
{
double xb = Math.Exp(model.Transitions[i, j]);
double xc = Math.Exp(model.Emissions[j, x[t]]);
expected = xb * xc;
actual = Math.Exp(target.Factors[0].Compute(i, j, x, t));
Assert.AreEqual(expected, actual, 1e-6);
}
}
}
}
示例11: HiddenMarkovModelFunctionConstructorTest
public void HiddenMarkovModelFunctionConstructorTest()
{
HiddenMarkovModel model = CreateModel1();
MarkovDiscreteFunction target = new MarkovDiscreteFunction(model);
var features = target.Features;
double[] weights = target.Weights;
Assert.AreEqual(features.Length, 12);
Assert.AreEqual(weights.Length, 12);
int k = 0;
for (int i = 0; i < model.States; i++)
Assert.AreEqual(model.Probabilities[i], weights[k++]);
for (int i = 0; i < model.States; i++)
for (int j = 0; j < model.States; j++)
Assert.AreEqual(model.Transitions[i, j], weights[k++]);
for (int i = 0; i < model.States; i++)
for (int j = 0; j < model.Symbols; j++)
Assert.AreEqual(model.Emissions[i, j], weights[k++]);
}
示例12: LikelihoodTest
public void LikelihoodTest()
{
HiddenMarkovModel hmm = HiddenMarkovModelFunctionTest.CreateModel2();
int states = hmm.States;
int symbols = hmm.Symbols;
var function1 = new MarkovDiscreteFunction(hmm);
var target1 = new ConditionalRandomField<int>(states, function1);
var function2 = new MarkovDiscreteFunction(states, symbols);
var target2 = new ConditionalRandomField<int>(states, function2);
int[] observations;
double a, b, la, lb;
observations = new int[] { 0, 0, 1, 1, 1, 2 };
a = target1.LogLikelihood(observations, observations);
b = target2.LogLikelihood(observations, observations);
Assert.IsTrue(a > b);
observations = new int[] { 0, 0, 1, 1, 1, 2 };
la = target1.LogLikelihood(observations, observations);
lb = target2.LogLikelihood(observations, observations);
Assert.IsTrue(la > lb);
double lla = System.Math.Log(a);
double llb = System.Math.Log(b);
Assert.AreEqual(lla, la, 1e-6);
Assert.AreEqual(llb, lb, 1e-6);
}
示例13: RunTest
public void RunTest()
{
int nstates = 3;
int symbols = 3;
int[][] sequences = new int[][]
{
new int[] { 0, 1, 1, 1, 2 },
new int[] { 0, 1, 1, 1, 2, 2, 2 },
new int[] { 0, 0, 1, 1, 2, 2 },
new int[] { 0, 1, 1, 1, 2, 2, 2 },
new int[] { 0, 1, 1, 1, 2, 2 },
new int[] { 0, 1, 1, 2, 2 },
new int[] { 0, 0, 1, 1, 1, 2, 2 },
new int[] { 0, 0, 0, 1, 1, 1, 2, 2 },
new int[] { 0, 1, 1, 2, 2, 2 },
};
var function = new MarkovDiscreteFunction(nstates, symbols);
var model = new ConditionalRandomField<int>(nstates, function);
for (int i = 0; i < sequences.Length; i++)
{
double p;
int[] s = sequences[i];
int[] r = model.Compute(s, out p);
Assert.IsFalse(s.IsEqual(r));
}
var target = new QuasiNewtonLearning<int>(model);
int[][] labels = sequences;
int[][] observations = sequences;
double ll0 = model.LogLikelihood(observations, labels);
double actual = target.Run(observations, labels);
double ll1 = model.LogLikelihood(observations, labels);
Assert.IsTrue(ll1 > ll0);
Assert.AreEqual(0, actual, 1e-8);
for (int i = 0; i < sequences.Length; i++)
{
double p;
int[] s = sequences[i];
int[] r = model.Compute(s, out p);
Assert.IsTrue(s.IsEqual(r));
}
}
示例14: RunTest2
public void RunTest2()
{
var inputs = QuasiNewtonHiddenLearningTest.inputs;
var outputs = QuasiNewtonHiddenLearningTest.outputs;
Accord.Math.Tools.SetupGenerator(0);
var function = new MarkovDiscreteFunction(2, 2, 2);
var model = new HiddenConditionalRandomField<int>(function);
var target = new HiddenConjugateGradientLearning<int>(model);
double[] actual = new double[inputs.Length];
double[] expected = new double[inputs.Length];
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
double ll0 = model.LogLikelihood(inputs, outputs);
double error = target.Run(inputs, outputs);
double ll1 = model.LogLikelihood(inputs, outputs);
for (int i = 0; i < inputs.Length; i++)
{
actual[i] = model.Compute(inputs[i]);
expected[i] = outputs[i];
}
Assert.AreEqual(-5.5451774444795623, ll0, 1e-10);
Assert.AreEqual(0, error, 1e-10);
Assert.IsFalse(double.IsNaN(error));
for (int i = 0; i < inputs.Length; i++)
Assert.AreEqual(expected[i], actual[i]);
Assert.IsTrue(ll1 > ll0);
}
示例15: GradientTest
public void GradientTest()
{
var function = new MarkovDiscreteFunction(2, 2, 2);
var model = new HiddenConditionalRandomField<int>(function);
var target = new ForwardBackwardGradient<int>(model);
FiniteDifferences diff = new FiniteDifferences(function.Weights.Length);
diff.Function = parameters => func(model, parameters);
double[] expected = diff.Compute(function.Weights);
double[] actual = target.Gradient(function.Weights, inputs, outputs);
for (int i = 0; i < actual.Length; i++)
{
Assert.AreEqual(expected[i], actual[i], 1e-4);
Assert.IsFalse(double.IsNaN(actual[i]));
Assert.IsFalse(double.IsNaN(expected[i]));
}
}