交叉熵的计算

数据挖掘 机器学习 深度学习 神经网络
2022-03-05 23:47:18

我想计算以下离散分布的交叉熵(q,p):

p = [0.1, 0.3, 0.6]

q = [0.0, 0.5, 0.5]

并使用 numpy 库:

import numpy as np

p = np.array([0.1, 0.3, 0.6])
q = np.array([0.0, 0.5, 0.5])

cross_entropy = -np.sum(q*np.log(p))

哪个输出

0.857399

但是我正在尝试手动计算方程式,但得到了不同的结果:

-(0*log(0.1) + 0.5*log(0.3) + 0.5*log(0.6))

我计算的结果是:

0.37236

我想知道我做错了手动计算的哪一部分。如果我犯了任何愚蠢的错误,请原谅我糟糕的数学。:'>

1个回答

您的手动计算使用以为底的 log :10

IN: -(0*np.log10(0.1) + 0.5*np.log10(0.3) + 0.5*np.log10(0.6))
OUT: 0.372363747448347

但是,np.log是自然对数(来自文档):

numpy.log numpy.log(x, /, out=None, *, where=True, cast='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc '日志'>

自然对数,逐元素。

自然对数 log 是指数函数的倒数,因此 log(exp(x)) = x。自然对数是以 e 为底的对数。