Go Gonum distuv 怎样计算正态分布尾部概率
在 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。

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

单侧、左侧和双侧尾部怎么写
右尾是 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 更直接,也能避免把概率方向写反;文章和代码都更容易复查。
Go Gonum 的 Variance 与 PopVariance 有什么区别
- 上一篇
- Go Gonum 的 Variance 与 PopVariance 有什么区别
- 下一篇
- Go Gonum 分布的 Prob 与 CDF 有什么区别
-
- Golang · Go教程 | 22分钟前 | JSON · 错误处理 · 数据校验 · Go教程 · Go 嵌套错误 JSONSchema JSON Schema ValidationError 校验错误 JSON Pointer
- Go jsonschema 怎样展开嵌套字段的校验错误
- 357浏览 收藏
-
- Golang · Go教程 | 22分钟前 |
- Go gojq 怎样为查询表达式绑定外部变量
- 258浏览 收藏
-
- Golang · Go教程 | 27分钟前 |
- Go Gonum graph 怎样查询加权图的单源最短路径
- 497浏览 收藏
-
- Golang · Go教程 | 28分钟前 |
- Go go-flags 怎样把 INI 配置加载进命令参数
- 149浏览 收藏
-
- Golang · Go教程 | 31分钟前 |
- Go Kong 怎样让环境变量提供命令行选项默认值
- 251浏览 收藏
-
- Golang · Go教程 | 38分钟前 |
- Go Gonum optimize 怎样最小化自定义标量函数
- 493浏览 收藏
-
- Golang · Go教程 | 43分钟前 |
- Go Gonum interp 怎样拟合分段线性插值器
- 357浏览 收藏
-
- Golang · Go教程 | 47分钟前 |
- Go Gonum quad 怎样计算有限区间上的定点数值积分
- 288浏览 收藏
-
- Golang · Go教程 | 55分钟前 |
- Go Gonum stat 怎样计算带权重的均值和方差
- 368浏览 收藏
-
- Golang · Go教程 | 58分钟前 |
- Go Gonum mat 怎样解线性方程组而不显式求逆
- 388浏览 收藏
-
- Golang · Go教程 | 1小时前 |
- Go Starlark Go 怎样向脚本注册宿主函数
- 327浏览 收藏
-
- Golang · Go教程 | 1小时前 |
- Go Hamba Avro 怎样把结构体编码成记录
- 235浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 797次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 788次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 877次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 847次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 678次使用
-
- Java 性能优化上线清单:从定位、改造到灰度发布
- 2026-06-11 860浏览
-
- Spring Boot 压测验证:Gatling、JMeter 与性能回归门禁
- 2026-06-11 843浏览
-
- Java NMT 非堆内存排查:Direct Buffer、线程栈与 Metaspace 分析
- 2026-06-11 826浏览
-
- Spring Boot 容器内存优化:JVM 堆、非堆与 MaxRAMPercentage
- 2026-06-11 809浏览
-
- Tomcat 连接与线程参数调优:maxThreads、acceptCount 与 KeepAlive
- 2026-06-11 792浏览

