python - 交叉熵总是大于熵吗?

标签 python entropy information-theory

我正在尝试了解交叉熵如何用于分类任务中的损失定义。

我对维基百科中关于交叉熵总是大于熵的说法感到非常困惑。我想出了一个非常简单的p(真实分布)和q(假设分布)分布,并计算了交叉熵和熵。并且发现这种情况下的交叉熵小于熵。

import numpy as np 
p = [0.5, 0.2, 0.2, 0.1]
q_1 = [0.4, 0.2, 0.2, 0.2]
q = [0.4, 0.2, 0.2, 0.2]
def cross_entropy(p, q):
  return np.sum(-1*np.multiply(p, np.log(q)))
# Get cross entropy
print(cross_entropy(p, q))
# Get entropy 
print(cross_entropy(q_1, q))

出了什么问题?


最佳答案

试试这个交叉熵: print(cross_entropy(q, p))

交叉熵在其参数中不是对称的。 你可以在这里找到一个公式: https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence
Motivation 部分,将交叉熵、熵和 KL 散度(始终为非负)联系起来。

基本上你比较了 H(P,Q) 和 H(Q),当你应该比较时:

  • H(Q,P) 和 H(Q)
  • H(P,Q) 和 H(P)

这样做你确实会看到:

  • H(Q,P) - H(Q) >=0
  • H(P,Q) - H(P) >=0

直接回答您的问题:交叉熵是否总是大于熵?
如果将正确的交叉熵与正确的熵进行比较,答案是肯定的。

关于python - 交叉熵总是大于熵吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875114/

相关文章:

python - 基于Apriori算法生成候选项集

python - 使用 Posix 1e 在 Python 中检索默认 ACL

python - 按字节数划分文件

python - 使用条件语句处理 Pandas 中的 NaN 值

php - 网络上的熵源

ruby - 使用 Ruby 和 imagemagick 获取或计算图像的熵

php - 创建双射以获得具有已知最大值的无序计数器

string - 如何在 C++ 中区分两个很长的字符串?

image - 两幅图像的互信息和联合熵-MATLAB

machine-learning - SVM(或其他 ML 模型)的预测精度在多大程度上取决于特征编码方式?