Python 交叉熵总是大于熵吗?
我试图了解交叉熵是如何用于分类任务中的损失定义的 我对维基百科中的交叉熵总是大于熵的说法感到困惑。我提出了一个非常简单的分布p(实分布)和q(假设分布),并计算了交叉熵和熵。发现这种情况下的交叉熵小于熵Python 交叉熵总是大于熵吗?,python,entropy,information-theory,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.mult
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))
出了什么问题
(无法评论,因此我将添加此作为答案) 嗨 是交叉熵总是大于熵 请查看此博客以了解更多信息: 回答你的另一个问题:“出了什么问题?” 您的公式中有一个小错误:
np.sum(-1*np.multiply(p, np.log(q)))
计算交叉熵的公式应为q的倒数:
np.sum(-1*np.multiply(p, np.log(1/q)))
希望有帮助!:) 试试这个交叉熵:
打印(交叉熵(q,p))
交叉熵的参数是不对称的。
你可以在这里找到一个公式:
在动机部分,将交叉熵、熵和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
如果你将正确的交叉熵与正确的熵进行比较,答案是肯定的。请为你正在使用的语言添加标签。我认为说交叉熵总是大于熵通常是错误的,请参阅我的答案。嗨@Tom,有趣的一点。我相信“正确”的熵是可以计算出来的,因此这个陈述可以保持原样。如果你想看看我的论证路线,请看一下我引用的源代码!:)我相信这里的问题实际上是计算了“错误的”交叉熵。