对非常小的双数(可能性)的列表进行规范化
normalizing a list of very small double numbers (likelihoods)
我正在编写一个算法,在给定模型的情况下,我计算数据集列表的似然性,然后需要对每个似然性进行归一化(到概率)。因此,类似于0.00043、0.00004、0.00321的东西可能被转换为类似于[0.2、0.03、0.77]的东西。我的问题是,我正在处理的日志可能性非常小(例如,在日志空间中,值如-269647.432、-231444.981等)。在我的C++代码中,当我试图将其中两个(通过取它们的指数)相加时,我得到的答案是"Inf"。我试图将它们添加到日志空间(日志的求和/减法),但再次遇到了同样的问题。
有人能分享他/她的专家意见吗?
感谢
假设可能性已经正确计算,您可以将每个可能性除以最大的可能性。这可以通过从每个对数似然中减去最大的对数似然来以对数形式实现。
然后可以转换对数空间。最大的将是1.0,因为它的标准化日志是0。较小的值将分别在0和1.0之间,并表示为最大值的一部分。
这是标准程序。数值稳定的Matlab代码:
LL = [ . . . ]; % vector of log-likelihoods
M = max(LL);
LL = LL - M;
L = exp(LL);
L = L ./ sum(L);
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 对非常小的双数(可能性)的列表进行规范化