Apache Math генерирует распределение из набора данных - PullRequest
0 голосов
/ 27 марта 2019

В библиотеке Java Apache Math, есть ли способ взять набор точек данных и сгенерировать из него объект распределения? В частности, я пытаюсь создать объект BetaDistribution из набора данных, но единственный способ создать его - передать альфа и бета-версию в качестве параметров. Нужно ли вручную вычислять эти значения из данных, или в математике apache есть что-то, что подойдет для меня?

1 Ответ

0 голосов
/ 01 апреля 2019

Из проекта smile

    public BetaDistribution(double[] data) {
        for (int i = 0; i < data.length; i++) {
            if (data[i] < 0 || data[i] > 1) {
                throw new IllegalArgumentException("Samples are not in range [0, 1].");
            }
        }

        mean = Math.mean(data);
        var = Math.var(data);

        alpha = mean * (mean * (1 - mean) / var - 1);
        beta = (1 - mean) * (mean * (1 - mean) / var - 1);
        if (alpha <= 0 || beta <= 0) {
            throw new IllegalArgumentException("Samples don't follow Beta Distribution.");
        }

        mean = alpha / (alpha + beta);
        var = alpha * beta / ((alpha + beta) * (alpha + beta) * (alpha + beta + 1));
        entropy = Math.log(Beta.beta(alpha, beta)) - (alpha - 1) * Gamma.digamma(alpha) - (beta - 1) * Gamma.digamma(beta) + (alpha + beta - 2) * Gamma.digamma(alpha + beta);
    }
...