python - 在 Python 中,小 float 趋于零

标签 python floating-point numerical-stability

我有一个用 Python 编写的贝叶斯分类器,问题是当我将特征概率相乘时,我得到非常小的浮点值,例如 2.5e-320 或类似的值,然后它突然变成 0.0。 0.0 显然对我没有用,因为我必须根据哪个类返回 MAX 值(更大的值)来找到“最佳”类。

解决这个问题的最佳方法是什么?我想过找到数字的指数部分(-320),如果它太低,则将该值乘以 1e20 或类似的值。但也许有更好的方法?

最佳答案

您描述的是朴素贝叶斯分类器的标准问题。您可以使用它搜索下溢以找到答案。或见 here .

简短的回答是用对数表示所有这些是标准的。因此,不要将概率相乘,而是将它们的对数相加。

您可能还想查看其他分类算法。

关于python - 在 Python 中,小 float 趋于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704570/

相关文章:

python - 将时间列表与时间范围列表相交的最佳方法

python - 附加字典列表,其中一个字典中包含一个附加键,并且一个嵌套字典作为其值

c - 始终打印相同的浮点值

c++ - 比较一个 32 位 float 和一个 32 位整数而不转换为 double 值,当任一值可能太大而无法完全适合另一种类型时

Clojure:减法中的不一致舍入

python - 重命名字典列表中的键

python - 向python服务器添加超时时出现非阻塞错误

c++ - 使用 C++ 从 txt 加载 float/double 矩阵

c++ - IEEE 754 浮点加法和乘法的互换性

python - 2x2 矩阵的数值稳定逆