当前位置:首页 > 文章列表 > Golang > Go教程 > Go Gonum distuv 怎样计算正态分布尾部概率

Go Gonum distuv 怎样计算正态分布尾部概率

来源:17golang原创 2026-10-30 20:58:52 0浏览 收藏

在 Go 里用 Gonum 处理正态分布时,尾部概率不要自己先写误差函数。gonum.org/v1/gonum/stat/distuv 的 Normal 已经提供了 CDF(x) 和 Survival(x):前者表示随机变量小于等于 x 的累计概率,后者表示大于 x 的右尾概率。需要右尾时直接调用 Survival,可读性也比手写 1-CDF(x) 更好。

官方地址:https://pkg.go.dev/gonum.org/v1/gonum/stat/distuv

把观测值先放回它所属的分布,再决定看左尾还是右尾:左侧用 CDF,右侧用 Survival,双侧则分别计算两端再相加。
  • Mu 是正态分布的均值,Sigma 是标准差。
  • CDF(x) 适合“低于阈值”的累计概率。
  • Survival(x) 适合“超过阈值”的右尾概率。

先判断要查哪一侧的概率

我在把统计规则写成程序时,最容易混淆的是“超过阈值”和“低于阈值”。如果随机变量记为 X,CDF(x) 对应的是 P(X≤x);Survival(x) 对应的是 P(X>x)。例如检测分数超过 80 的比例属于右尾,应该让 x=80 传给 Survival。

Go Gonum distuv 中 CDF 与 Survival 的尾部接口关系说明图
图1:接口选择说明图,区分 CDF 的左侧累计概率与 Survival 的右侧尾部概率;这是静态结构图,不是运行截图。

用 Mu 和 Sigma 构造 Normal

Normal 的 Mu 和 Sigma 描述的是原始观测值的分布。若业务数据的均值是 70、标准差是 8,那么阈值 86 就直接作为 x 传入;不需要先手动把 86 改成 z 分数。只有在你已经拿到标准化后的 z 分数,并且分布本身是标准正态分布时,才使用 Mu: 0、Sigma: 1。

package main

import (
    "fmt"

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

func main() {
    // 用业务数据的均值和标准差描述原始正态分布。
    dist := distuv.Normal{Mu: 70, Sigma: 8}
    threshold := 86.0

    // Survival 返回超过阈值的右尾概率。
    rightTail := dist.Survival(threshold)
    // CDF 返回不超过阈值的累计概率,和右尾互为补集。
    leftTail := dist.CDF(threshold)

    fmt.Printf("P(X>%.0f)=%.6f\n", threshold, rightTail)
    fmt.Printf("P(X

这段写法的重点不是把输出保留到多少位,而是让变量名和概率方向一致。实际项目中可以根据报表要求再做百分比格式化,但不要把小数直接当成百分数展示。

Mu、Sigma、阈值与正态分布两侧尾部的关系说明图
图2:参数关系说明图,展示 Mu、Sigma、阈值与左右尾部的静态关系;这是原创说明图,不代表实际运行结果。

单侧、左侧和双侧尾部怎么写

右尾是 dist.Survival(x),左尾是 dist.CDF(x)。双侧检验不能只看一边:先计算阈值距离均值的标准化距离,再把对称的两端概率相加。对于均值为 70、标准差为 8 的分布,观测值 86 距离均值两个标准差;如果要表达“离均值至少这么远”的双侧概率,可以计算下侧 70-16 和上侧 70+16 两个阈值的概率。

// 双侧尾部只对称适用;阈值必须按同一个 Mu 和 Sigma 换算回原始尺度。
lower := dist.Mu - 2*dist.Sigma
upper := dist.Mu + 2*dist.Sigma

// 两端概率分别取左尾和右尾,再合并为双侧概率。
twoTail := dist.CDF(lower) + dist.Survival(upper)
fmt.Printf("P(|X-Mu|>=2*Sigma)=%.6f\n", twoTail)

如果你的业务阈值不是围绕 Mu 对称,不能套用上面的双侧公式;那时应明确两个实际阈值,分别计算两端事件。更极端的 x 也不意味着一定报错,应该把概率解释为接近 0 或 1 的数值,并在业务层决定展示精度。

容易出错的边界

第一,Sigma 是标准差,必须为正;把方差直接填入会改变分布形状。第二,Prob(x) 是概率密度,不是“小于 x 的概率”,累计概率应使用 CDF。第三,Survival(x) 的语义是互补 CDF,写告警规则时要把“超过阈值”的自然语言和代码保持一致。第四,不要把静态说明图当成真实输出,数值结果仍应由你的输入数据、精度和业务定义决定。

常见问题

正态分布右尾概率应该调用哪个方法?

调用 distuv.Normal 的 Survival(x),它直接表达 P(X>x)。只有需要左侧累计概率时才调用 CDF(x)。

已经有 z 分数还要重新设置均值吗?

如果 z 分数对应标准正态分布,可以使用 Mu: 0、Sigma: 1。如果手里的值还是原始业务量,就应使用原始分布的均值和标准差。

为什么不统一写成 1 减 CDF?

数学上右尾是互补概率,但库提供的 Survival 更直接,也能避免把概率方向写反;文章和代码都更容易复查。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go Gonum 的 Variance 与 PopVariance 有什么区别Go Gonum 的 Variance 与 PopVariance 有什么区别
上一篇
Go Gonum 的 Variance 与 PopVariance 有什么区别
Go Gonum 分布的 Prob 与 CDF 有什么区别
下一篇
Go Gonum 分布的 Prob 与 CDF 有什么区别
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    797次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    788次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    877次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    847次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    678次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码