当前位置:首页 > 文章列表 > Golang > Go问答 > Go Gonum 的 LogProb 为什么适合累加独立样本似然

Go Gonum 的 LogProb 为什么适合累加独立样本似然

来源:17golang原创 2026-10-30 22:40:04 0浏览 收藏

Gonum 的 LogProb 适合累加独立样本似然,因为独立样本的联合似然是各样本概率或密度的乘积,取自然对数后就变成逐项求和。这样可以避开大量小值连乘造成的下溢,并直接在对数尺度比较候选参数。应调用分布的 LogProb,而不是先 Prob 再 math.Log:后者可能在取对数前已经变成零。

官方地址:https://www.gonum.org/

解释规模增加后的连乘瓶颈

考虑一项离线评分任务:同一组观测值需要在多组候选参数下计算似然。样本较少时直接相乘看似方便,但样本增多后,每项都不为零也不能保证乘积仍可由 float64 表示。若两个候选都算成零,比较结果就失去了意义。

以每项数值为 0.01 的纯数学例子来看,1000 项的乘积是 10 的负 2000 次方,远小于 float64 的最小正数。对数和则约为 -4605.17。这个数字是公式推导,并非本文执行程序后的性能结果。改用对数求和首先解决的是表示范围,不是保证处理时间更短。

建立对数似然与独立性约定

固定候选参数 θ 后,如果各观测条件独立,则 L(θ)=∏f(xᵢ|θ),对数似然 ℓ(θ)=Σlog f(xᵢ|θ)。自然对数严格递增,所以在同一数据集上最大化 L 与最大化 ℓ 的参数排序一致;最小化优化器则通常接收负对数似然 -ℓ。

固定参数与独立样本的对数似然结构
静态结构图:模型分组包含固定参数与独立性假设,评分分组关联样本、LogProb 及对数和;连线表示数学依赖,不表示执行步骤。

对 Normal,LogProb 返回的是概率密度的自然对数,而不是“精确取到这个实数的概率”。密度可以大于一,对数密度也可以为正。不要把 LogProb 一律要求为负数,更不能把它直接当作事件概率展示。接口含义见Normal.LogProb 官方文档。

Normal 的实现直接计算对数密度公式,Prob 则对 LogProb 结果取指数。这也是直接使用 LogProb 能避免一次不必要的指数与对数往返的原因,见Gonum 正态分布实现。

用 Gonum 累加正态样本评分

下面固定标准差为一,对同一组样本比较均值零和均值一。函数拒绝非有限输入,Sigma 使用标准差而非方差;补偿求和用于缓解累计舍入误差。它不是通用分布拟合器,也不会自动检查样本是否独立。

package main

import (
    "fmt"
    "math"

    "gonum.org/v1/gonum/stat/distuv"
)

// NormalLogLikelihood 按固定参数计算一批条件独立样本的对数似然。
// 本例采取严格有限值策略,异常数值直接交给调用者处理。
func NormalLogLikelihood(x []float64, mu, sigma float64) (float64, error) {
    finite := func(v float64) bool {
        return !math.IsNaN(v) && !math.IsInf(v, 0)
    }
    if !finite(mu) || !finite(sigma) || sigma 

按正态公式手算,均值零时三项平方偏差之和为 0.5;均值一时为 3.5,因此前者的对数似然应比后者高 1.5。这个差值可以帮助读者理解参数排序,本文没有执行示例或提供伪造输出。

空样本返回零,对应空乘积为一的数学约定;业务中“没有观测”应单独标记,不能将零评分当成模型优于其他有样本任务的证据。

将批次结果按统一参数汇总

样本很多时,可以按批次计算局部对数和,再由汇总层相加。每一批都必须使用相同模型版本、参数、单位和样本筛选规则,并记录样本数;重复批次会让数据被重复计分,漏批次会改变比较基准。

批次对数和与统一模型配置的静态关系
静态结构图:统一配置关联两个批次,批次的局部对数和共同关联总和及样本数;分组用于说明汇总条件,不是部署或运行证据。

若各批分别重新拟合参数,再把各自最优对数和相加,得到的通常不是同一个固定参数模型的全体样本似然。要并行比较多个候选,需把候选参数标识与批次结果一起保存,分别汇总每个候选的数据。

上线后的观察项可以包括有效样本数、异常样本数、非有限评分出现次数、总对数似然及平均负对数似然。改变数据单位、清洗口径或候选模型定义后,应重新确认这些指标的可比性。本文只提供观察设计,不声称已有线上收益。

做法含义取舍
直接连乘 Prob原尺度联合密度或概率长序列容易下溢或溢出
累加 LogProb对数尺度似然适合比较,仍需数值范围管理
汇总批次对数和同一模型的数据分块须避免漏批、重复及配置混用
平均负对数似然每样本平均损失只在适当且一致的口径下比较

识别不可直接相加的情况

样本相关时还能直接累加吗?不能无条件使用边缘分布评分之和冒充真实联合似然。应建立联合分布或使用条件概率分解;若采用独立近似,需明确这是一项建模假设。

混合模型是不是把各分量的 LogProb 相加?不是。混合密度是分量密度的加权和,其对数通常需要稳定的 log-sum-exp 计算。样本间的乘积与同一样本的混合求和是不同运算。

为什么不在最后 Exp 回去?若只需比较参数,无须恢复原尺度;取指数可能再次下溢。需要似然比时,可先比较两个对数似然之差,同时仍要考虑指数范围。

LogProb 能保证永不出现 NaN 或无穷吗?不能。非法参数、极端值、支持域以外数据和累加范围都需要处理。某些分布返回负无穷可合理表示零概率;本文的正态示例选择将非有限结果报告为错误,并不要求所有模型一律采用这个策略。

直接计算对数评分、固定建模约定、按候选参数汇总批次,能让大样本似然比较保留可解释的数值;独立性、单位和数据口径仍需由应用明确管理。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go Gonum distuv 怎样按分位点取得阈值Go Gonum distuv 怎样按分位点取得阈值
上一篇
Go Gonum distuv 怎样按分位点取得阈值
Go Gonum quad 怎样使用 Hermite 积分节点
下一篇
Go Gonum quad 怎样使用 Hermite 积分节点
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    799次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    791次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    877次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    848次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    680次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码