оценка энтропии с использованием гистограммы нормальных данных и прямой формулы (matlab)

Предположим, мы нарисовали n=10000 образцов стандартного нормального распределения.

Теперь я хочу рассчитать его энтропию, используя гистограммы для расчета вероятностей.

1) рассчитать вероятности (например, с помощью Matlab)

[p,x] = hist(samples,binnumbers);
area = (x(2)-x(1))*sum(p);
p = p/area;

(номера бинов определяются по какому-то правилу)

2) оценить энтропию

H = -sum(p.*log2(p))

что дает 58,6488

Теперь, когда я использую прямую формулу для вычисления энтропии нормальных данных

H = 0.5*log2(2*pi*exp(1)) = 2.0471

Что я делаю неправильно при использовании формулы гистограммы + энтропия? Большое спасибо за любую помощь!!


person user1569756    schedule 13.05.2013    source источник
comment
Не могли бы вы предоставить полный код для кода? Вы используете какой-то центральный предельный результат?   -  person Acorbe    schedule 13.05.2013
comment
NB hist() амортизируется, используйте вместо него histogram().   -  person Léo Léopold Hertz 준영    schedule 05.08.2016


Ответы (1)


Вы пропустили dp член в сумме

dp = (x(2)-x(1));
area = sum(p)*dp;
H = -sum( (p*dp) * log2(p) );

Это должно сблизить вас достаточно...

PS,
будьте осторожны, когда берете log2(p), иногда у вас могут быть пустые корзины. Вы можете найти nansum полезным.

person Shai    schedule 13.05.2013
comment
Можете ли вы дать мне краткое объяснение, почему мне нужно добавить ширину? - person user1569756; 14.05.2013
comment
@user1569756 user1569756 думайте об этом как о термине dt в интеграции. Энтропия — это интеграл t в [-\infty \infty] от p(t)log2(p(t)) dt. Вы использовали эту конечную ширину для вычисления площади, вам нужно использовать ее и для интегрирования... Думайте о выборке как о приближении к интегралу... - person Shai; 14.05.2013
comment
Правильно, но в качестве дополнительной информации @user1569756: этот интеграл определяет дифференциальную энтропию непрерывной случайной величины , которая отличается от информационной энтропии в строгом смысле, которая определена только для дискретных распределений. - person A. Donda; 24.02.2014
comment
@Masi очень сложно читать код и сообщения об ошибках в комментариях. пожалуйста, рассмотрите публикацию как новый вопрос - person Shai; 06.08.2016
comment
@Shai Если у вас есть H = -sum( (p*dp) * log2(p) ) / area; вместо этого в последней строке. В остальном моя энтропия очень велика, и вы нигде не используете area. С делением мои вычисленные данные составляют около -7.2. Как вы думаете? - person Léo Léopold Hertz 준영; 07.08.2016
comment
@Shai Можете ли вы надежно заменить центры (x и p) здесь краями? И что вы думаете о делении на area в H? - person Léo Léopold Hertz 준영; 08.08.2016
comment
@Masi, использование hist является приближением для интеграла. если вы помните свое исчисление, когда ячейки достаточно малы, аппроксимация с использованием центров ячеек очень похожа на использование краев ячеек. - person Shai; 09.08.2016