public override IDistribution Fit(double[][] observations, double[] weights) { var pi = new double[probabilities.Length]; double size = weights.Length; for (int c = 0; c < probabilities.Length; c++) { for (int i = 0; i < observations.Length; i++) pi[c] += observations[i][c]*weights[i]*size; pi[c] /= N; } return new MultinomialDistribution(N, pi); }
public void FitTest() { MultinomialDistribution dist = new MultinomialDistribution(7, new double[2]); double[][] observation = { new double[] { 0, 2 }, new double[] { 1, 2 }, new double[] { 5, 1 }, }; dist.Fit(observation); Assert.AreEqual(dist.Probabilities[0], 0.857142857142857, 0.000000001); Assert.AreEqual(dist.Probabilities[1], 0.714285714285714, 0.000000001); }