如何正确计算变量的熵?附MATLAB计算实例疑问
如何正确计算变量的熵(附你的示例验证)
嘿,你的手动计算完全正确,而且关于0值的疑问其实可以从熵的核心定义来理清!
核心结论:必须考虑变量中的0值
熵的本质是衡量随机变量所有可能取值的不确定性,不管这个取值是0、1还是其他数字,只要它是变量的一个实际出现的取值,就需要纳入概率统计和熵的计算。如果忽略0值,相当于人为剔除了一个可能的结果,计算出的熵会低估变量的真实不确定性。
你的示例计算验证
针对你的变量 X = [1 2 2 0]:
- 统计各取值的出现次数:0出现1次,1出现1次,2出现2次,总样本数为4
- 计算各取值的概率:
p(0) = 1/4,p(1) = 1/4,p(2) = 2/4
- 代入熵的公式(以2为底的对数,对应二进制熵):
H = -( (1/4)*log2(1/4) + (2/4)*log2(2/4) + (1/4)*log2(1/4) ) = 1.5
这个结果完全正确,和MATLAB的entropy函数输出一致也验证了这一点(注:MATLAB的entropy默认处理图像,但当你把离散变量按概率分布逻辑输入时,它的计算逻辑和手动推导完全匹配)。
离散变量熵计算的通用步骤
- 统计变量所有不同取值的出现频次
- 计算每个取值的概率(频次 / 总样本数)
- 用公式
H = -sum(p_i * log_b(p_i))计算,其中b是对数的底(常用2或自然对数),所有非零概率的取值都要纳入求和(包括0这类特殊取值)
内容的提问来源于stack exchange,提问作者user4061624




