Вычисление обобщенного среднего для экстремальных значений p - PullRequest
6 голосов
/ 24 февраля 2011

Как вычислить обобщенное среднее для экстремальных значений p (очень близких к 0 или очень больших) с разумной вычислительной ошибкой?

Ответы [ 5 ]

1 голос
/ 23 февраля 2018

Я подозреваю, что если вас интересуют очень большие или маленькие значения p, лучше всего выполнить некоторую форму алгебраической манипуляции с формулой обобщенного среднего, прежде чем вводить числовые значения.

Например,в пределе малых p можно показать, что обобщенное среднее стремится к n-му корню произведения x_1 * x_2 * ... x_n.Члены более высокого порядка в p включают суммы и произведения log (x_i), которые также должны быть относительно численно устойчивы для вычисления.На самом деле, я считаю, что разложение первого порядка по p имеет простое отношение к дисперсии log (x_i):

enter image description here

Если применить этоФормула для набора из 100 случайных чисел, взятых равномерно из диапазона [0,2, 2], можно получить такую ​​тенденцию:

Comparison of simple formula with asymptotic approximation

, которая здесь показываетасимптотическая формула становится довольно точной для p менее чем приблизительно 0,3, а простая формула не работает только тогда, когда p меньше чем приблизительно 1e-10.

В случае больших p преобладает тот x_i, который имеет наибольшеевеличина (давайте назовем этот индекс i_max).Можно преобразовать обобщенную формулу среднего значения в следующую форму, которая имеет меньшее патологическое поведение при больших значениях p:

Rearranged generalized mean formula

Если это применяется (с использованием стандартныхподпрограммы numpy, включающие numpy.log1p ) для еще 100 равномерно распределенных выборок в течение [0.2, 2.0], можно обнаружить, что переставленная формула в основном точно соответствует простой формуле, но остается действительной для гораздо больших значений pкоторую простая формула переполняет при вычислении степеней x_i.

Generalized mean for large p

(Обратите внимание, что на левом графике синяя кривая для простой формулы сдвинута вверхна 0,1, чтобы можно было увидеть, где он заканчивается из-за переполнения. При p менее 1000, две кривые в противном случае были бы неразличимы.)

1 голос
/ 05 мая 2011

Согласно вашей ссылке , предел для p , переходящий к 0, является средним геометрическим, для которого получены границы .

Предел для p , идущий в бесконечность, является максимальным.

0 голосов
/ 26 августа 2015

Я боролся с той же проблемой. Вот как я справился с этим: Пусть gmean_p (x1, ..., xn) будет обобщенным средним значением, где p является действительным, но не 0, а x1, ..xn неотрицательным. Для M> 0 мы имеем gmean_p (x1, ..., xn) = M * gmean_p (x1 / M, ..., xn / M), из которых последняя форма может использоваться для уменьшения ошибки вычислений. Для больших p я использую M = max (x1, ..., xn), а для p, близких к 0, я использую M = mean (x1, .. xn). В случае M = 0, просто добавьте к нему небольшую положительную константу. Это сделало всю работу за меня.

0 голосов
/ 05 мая 2011

Вот подсказка:

Сначала преобразуйте все свои числа в представление в базе p.Теперь, чтобы поднять до степени 1 / p или p, вам просто нужно сдвинуть их - так что вы можете очень легко сделать все силы без потери точности.

Определите среднее значение в базе p, а затем конвертируйтерезультат возвращается к основанию два.


Если это не сработает, еще менее практичная догадка:

Попробуйте выработать дискретное преобразование Фурье и связать его с дискретным преобразованием Фурье.преобразование входного вектора.

0 голосов
/ 25 февраля 2011

Я думаю, что ответом здесь должно быть использование рекурсивного решения.Таким же образом, что означает (1,2,3,4) = среднее (среднее (1,2), среднее (3,4)), вы можете выполнить этот тип рекурсии для обобщенных средних.Это выгодно для вас тем, что вам не нужно делать столько сумм действительно больших чисел, и вы уменьшаете вероятность создания переполнения.Кроме того, другая опасность при работе с числами с плавающей запятой заключается в сложении чисел очень разных величин (или вычитании чисел очень похожих величин).Поэтому, чтобы избежать подобных ошибок округления, может быть полезно отсортировать ваши данные, прежде чем пытаться вычислить обобщенное среднее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...