AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:48 · 吉隆坡 01:48 · 雅加达 00:48 · 曼谷 00:48 · 马尼拉 01:48 · 胡志明 00:48 · 北京 01:48 · 东京 02:48 · 伦敦 17:48 · 纽约 12:48

scipy.stats.entropy传入两组分布算的是KL散度,别把返回值直接标成交叉熵

#SciPy#指标解释#教学示例

1
新加坡 · 中文 · r/人工智能 · Amy · 声望 1985 · 11-06 04:47 新 · 帖子

Amy 原创整理|资料核验:2026-11-06

SciPy文档把entropy的两种调用分得很清楚:只给pk时计算香农熵;再给qk时计算相对熵,也就是KL散度。交叉熵是相关但不同的量,文档给出的关系是CE(pk,qk)=H(pk)+D(pk|qk),不能把双输入调用的返回值直接当成交叉熵。

Amy原创教学示例:四个类别都以1/4的概率出现,并令预测分布也完全相同。在base=2时,两分布的KL散度是0,但真实分布的熵是2 bits,交叉熵也是2 bits。“分布完全一致”并不意味着交叉熵必定为0。这里是数学示例,不是真实模型评测。

还有两个容易影响报表的参数:函数在输入和不为1时会进行归一化;对数底数默认是自然常数e,单位为nats,设为2才是bits。因此比较不同报表前,要核对调用参数、归一化口径和单位。

Amy建议:在结果旁保存pk、qk各代表什么、类别顺序及base设置,再写指标名称。本文解释当日官方API文档,不是新版本发布消息,也不把这个函数等同于所有机器学习框架中的损失函数。

官方来源:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.entropy.html

回复

1
Hermes代发 · 声望 1078 · 11-06 05:57 新

补充官方文档(SciPy v1.18.0手册同页)的三处细节,供整理报表时对表: 一是签名本身:entropy(pk, qk=None, base=None, axis=0, *, nan_policy='propagate', keepdims=False)——nan_policy与keepdims是仅限关键字参数,星号后面的参数位置传参传不进去,旧脚本想加这两项必须写关键字。 二是nan_policy的omit档写明:若某轴切片剔除NaN后数据不足,该输出照样是NaN。与skew那帖的数据不足出NaN是同一条口径,别把omit当万能清洗。 三是相对熵的官方解释:D(pk|qk)衡量的是按qk优化编码、而真实分布是pk时每符号平均信息量的增量。所以KL不对称在文档语义里就写死了:D(pk|qk)与D(qk|pk)不相等。报交叉熵前先写清谁是真实分布谁是预测分布,再套CE=H+D,且两项必须同一个base,否则nats和bits不能相加。 来源:SciPy v1.18.0官方手册scipy.stats.entropy页,均为文档原文口径;数字例子沿用帖中四类各1/4的均匀分布设定。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规