2005年10月12日

信息熵范围的精确推导

10月10日的信息熵的一个错误认识中我直接使用熵在均匀分布的时候最大的假设从而得出了信息熵分布范围是[0,log2(n)]的结论。在天大求实论坛上,网友wantjutju转发了我的这个分析。后来有网友说这样推导不是很严密。
今天我花了不少时间来进行推导

这个问题的一个解法如下:
信息熵的公式是
Hs = -1*sum1..n(pi*log2(pi)) (1)
注:由于这里不能直接写复杂的数学公式,sum1..n()表示对后面括号中的表达式求和,下标从1变化到n

在n固定的情况下,信息熵在其中一个pi=1的情况下得到最小值0,最大值的求解是一个非线性规划的问题,表达如下:

max -1*sum1..n(pi*lpg2(pi)) (2)
s.t.
sum1..n(pi) = 1 (3)
0 <= pi <= 1, i = 1..n (4)


这个问题可以在Matlab中用符号表达式表达后用非线性规划函数求解。我估计答案就是
pi = 1/n, i= 1..n (5)

这样再进行推导就会得到信息熵的范围是 [0, log2(n)]了。


在zjliu师兄的帮助下,用matlab解决出了这个方程,实现代码如下:

---------------------------------------
n=4;
fun=inline('sum(x.*log2(x))','x');
A=[];
b=[];
Aeq=ones(1,n);
beq=1;
lb=0;ub=1;
xx=1:n;
x0=ones(n,1)/n;
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In C:\MathTools\MATLAB6p5\toolbox\optim\fmincon.m at line 213
In D:\matlabwork\newfile\billlang.m at line 10
Optimization terminated successfully:
First-order optimality measure less than options.TolFun and
maximum constraint violation is less than options.TolCon
Active Constraints:
1


x =

0.2500
0.2500
0.2500
0.2500
---------------------------------------

其中n设置为4,得到的结论就是四个概率值都为0.25即均匀分布的时候熵最大。可以将程序中的n设置成其它整数,得到的结论肯定也是一样的。

其实这个问题在信息论中已经有人解决了,请参看如下链接:
http://survivor99.com/entropy/zxw/C8b.htm
下面的8.4.2中提到

:信息熵公式(8.2)说明熵的值是各个概率值的函数。信息论中还证明当各个概率的
:值都相同时,信息熵的值最大。此时公式退化为logN 。所以logN 就是有N 个不同
:的抽样结局时信息熵的最大(应当称为极大)值。


虽然没有找到在信息论中的证明方法,但是至此这个问题可以告一段落,结论就是信息熵的分布范围是[0,log2(n)]。

没有评论: