Мой вопрос касается как математических проблем, так и проблем CS, но, поскольку мне нужна эффективная реализация, я публикую ее здесь.
Проблема:
У меня есть примерное нормальное двумерное распределение, определенное как матрица Python, но тогда мне нужно будет перенести то же вычисление в Java. (здесь фиктивные значения)
mean = numpy.matrix([[0],[0]])
cov = numpy.matrix([[1,0],[0,1]])
Когда я получаю inupt вектор-столбец со значениями целых чисел (x, y), я хочу вычислить вероятность этого заданного кортежа.
value = numpy.matrix([[4],[3]])
probability_of_value_given_the_distribution = ???
Теперь, с математической точки зрения, это был бы интеграл для 3.5 < x < 4.5
и 2.5 < y < 3.5
по функции плотности вероятности моей нормы.
Что я хочу знать:
Есть ли способ избежать эффективной реализации этого, что подразумевает работу с выражениями, определенными над матрицами и с двойными интегралами? Кроме того, мне потребовалось бы время, если бы мне пришлось реализовать это самостоятельно, это было бы дорогостоящим в вычислительном отношении. Приблизительное решение меня вполне устроило бы.
Мои рассуждения:
В одномерном нормальном можно просто использовать кумулятивную функцию распределения (или даже сохранить ее значения для стандартной, а затем нормализовать), но, к сожалению, появляется не быть закрытой формой cdf для многовариантных значений.
Другой подход для одномерного - использовать обратное двумерное приближение (так, приблизить нормаль к биному), но, расширив это до многомерного, я не могу понять, как учитывать ковариации.
Я очень надеюсь, что кто-то уже реализовал это, мне это нужно скоро (заканчиваю диссертацию), и я ничего не нашел.