当前位置:首页 > 文章列表 > Golang > Go教程 > Go Gonum stat 怎样计算带权重的均值和方差

Go Gonum stat 怎样计算带权重的均值和方差

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

Go Gonum stat 可用 stat.Mean(x, weights) 计算带权均值,用 stat.MeanVariance 同时取得均值与样本方差;需要总体方差时用 stat.PopMeanVariance 或 stat.PopVariance。真正需要先决定的是权重含义:频数、概率比例和可靠性权重不能默认使用同一套方差修正。

项目官方地址:https://github.com/gonum/gonum

先确定权重代表频数还是比例

我会先在数据字段旁写清“这一列是次数还是比例”,再选函数。例如某个观测值出现两次,频数为2;把三个分组的重要程度写成20%、30%、50%,则是另一种权重含义。它们都能参与加权平均,但样本方差的分母不能靠字段名猜测。

本文的完整程序只处理非负整数频数。这样,x 中的一项与 counts 中同下标的一项构成“数值及其重复次数”,无需把相同数据重复存储。可靠性加权、复杂抽样设计以及其他无偏修正不包含在该程序的约定里。

数值切片与频数切片的静态对应关系
静态结构图:输入分组中的x与counts按下标对应,接口分组展示均值和方差函数的依赖关系,不代表执行流程。

确认接口支持与分母口径

令总权重为W,均值为m,加权离差平方和为S。加权均值是加权数值总和除以W;Gonum的 MeanVariance 使用 S/(W-1),PopMeanVariance 使用 S/W。在本文的频数场景,前者对应展开重复观测后的样本方差,后者描述这组数据自身的总体方差。

接口返回内容选择场景
Mean加权均值只需要中心位置
MeanVariance均值与样本方差频数样本,总频数大于1
PopMeanVariance均值与总体方差描述当前数据的加权离散程度
Variance / PopVariance对应口径的方差只需要方差

这里是Go包接口,不涉及浏览器兼容表。接入项目时固定Gonum模块版本,并使用该版本文档确认接口;不要把仓库主分支等同于已部署版本。

编写最小完整示例

下面的入口代码可放进已经配置Gonum依赖的Go模块。输入限制是本文自己的业务封装,目的是把频数数据的问题尽早转成error;不声称库会替调用方检查所有业务条件。

package main

import (
    "fmt"
    "math"
    "gonum.org/v1/gonum/stat"
)

// frequencyStats专用于非负整数频数;不替代调查权重的统计设计。
func frequencyStats(x, counts []float64) (mean, sample, population float64, err error) {
    if len(x) == 0 || len(x) != len(counts) {
        return 0, 0, 0, fmt.Errorf("数据不能为空且必须与频数等长")
    }
    total := 0.0
    for i, value := range x {
        count := counts[i]
        // 在业务入口拒绝非法数值,避免把NaN当作统计结果保存。
        if math.IsNaN(value) || math.IsInf(value, 0) ||
            math.IsNaN(count) || math.IsInf(count, 0) ||
            count 

示例数据等价于四个观测值:4、10、10、16。按算术推导,均值为10,离差平方和为72,所以样本方差为24,总体方差为18。这里给的是预期数值说明,本文没有执行程序或生成运行截图。

如果只需要均值和一种方差,保留相应的组合接口即可;例子额外计算总体方差,是为了让两种统计口径能够直接对照,并非要求每个业务都计算两遍。

加权离差平方和与两种方差分母的静态组成图
静态结构图:样本口径与总体口径共享S和W的定义,但分母分别为W-1和W;图中没有性能数据或运行输出。

兼容普通等权数据与异常输入

原始样本每行只出现一次时,可以直接传 nil 作为权重,库按每项权重1处理。非nil权重必须与数据切片等长;空切片和nil不是可互换的业务输入。如果把数据排序或筛选,权重也必须跟着同一条记录移动,不能只操作x。

本文封装拒绝空数据、负频数、非整数频数以及非有限数值,并要求总频数大于1。零频数允许存在,但所有频数为零不能计算均值。只有一个有效观测时,可以有总体方差口径,却不能套用本例同时返回样本方差的入口,应由业务单独设计只求总体统计的函数。

库函数通常直接返回浮点结果,并不提供与本文封装相同的error接口。因此在业务层决定哪些输入可接受,比在计算后把所有异常结果替换成0更容易保留真实含义。0方差本来就可能是合法结果,不应同时代表“没有数据”。

处理数值范围和常见疑问

我不建议先把频数归一化到总和1,再直接交给样本方差接口。归一化保持了加权均值和总体方差,却改变了 W-1 这个分母。总权重为1时分母为零,已经失去本文频数样本的统计解释。

大量重复观测可以用频数表示来减少输入条目,但不要据此承诺具体加速倍数。浮点数也有精度和范围限制:非常大的次数无法保证整数精确表示,极大数值的乘积或平方可能溢出。遇到这类数据应先决定合适的数值尺度、计数存储和误差容忍度;有限结果检查也不等于精度保证。

权重必须加起来等于1吗?

计算加权均值不需要。频数应保留次数含义;概率分布的离散程度可选择总体口径,但不要把概率权重当作重复样本数。

把所有频数乘二,为什么样本方差变了?

在频数解释下,这相当于重复了整批观测,总样本量发生变化,样本修正也改变。均值和总体方差保持不变并不要求样本方差也保持不变。

只保存均值够不够以后计算总方差?

通常不够。分组均值会丢失组内离散信息。合并统计需要保留总频数和相应离差统计量,不能把组均值当作原始观测直接套用本例。

技术依据:Gonum stat官方接口文档、官方均值与方差实现。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go Gonum Dense 的 Slice 为什么会与原矩阵共享数据Go Gonum Dense 的 Slice 为什么会与原矩阵共享数据
上一篇
Go Gonum Dense 的 Slice 为什么会与原矩阵共享数据
Go Gonum 的 Variance 与 PopVariance 有什么区别
下一篇
Go Gonum 的 Variance 与 PopVariance 有什么区别
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码