Accord.Statistics.Distributions.Multivariate.MultinomialDistribution.Fit C# (CSharp) Method

Fit() public method

Fits the underlying distribution to a given set of observations.
public Fit ( double observations, double weights ) : IDistribution
observations double The array of observations to fit the model against.
weights double The weight vector containing the weight for each of the samples.
return IDistribution
        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);
        }

Usage Example

        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);
        }