首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >估计统计中值、模式、偏度、峰度的“在线”(迭代)算法?

估计统计中值、模式、偏度、峰度的“在线”(迭代)算法?
EN

Stack Overflow用户
提问于 2009-06-29 15:02:44
回答 14查看 30.1K关注 0票数 88

是否有一种算法来估计值集的中值、模式、偏斜度和/或峰度,但这不需要同时将所有值存储在内存中?

我想计算一下基本统计数字:

  • 平均数:算术平均数
  • 方差:与平均值的平方偏差的平均值
  • 标准差:方差的平方根
  • 中位数:将较大的一半与较小的一半分开的数值。
  • 模式:在集合中找到的最频繁的值
  • 偏度: tl;dr
  • 峰度: tl;dr

计算这些数字的基本公式是小学算术,我确实知道它们.也有许多实现它们的统计库。

我的问题是我正在处理的集合中有大量(数十亿)的值:在Python中工作,我不能仅仅用数十亿个元素创建一个列表或散列。即使我用C写了这篇文章,十亿元素数组也不太实用。

没有对数据进行排序。它是随机产生的,在飞行中,由其他过程。每个集合的大小都是高度可变的,而且大小不会事先知道。

我已经知道了如何很好地处理均值和方差,以任意顺序迭代集合中的每个值。(实际上,在我的例子中,我按照生成它们的顺序来看待它们。)这是我使用的算法,礼貌算法

  • 初始化三个变量: count、sum和sum_of_squares
  • 对于每个值:
    • 增量计数
    • 将值加到和中。
    • 将值的平方添加到sum_of_squares。

  • 将和除以计数,存储为变量平均值。
  • 将sum_of_squares除以计数,存储为变量mean_of_squares。
  • 正方形的意思是,存储为square_of_mean。
  • 从square_of_mean中减去mean_of_squares,作为方差存储。
  • 输出均值和方差

这种“在线”算法有缺点(例如,当sum_of_squares比整数范围或浮动精度增长得快时,精度问题),但它基本上给了我所需的东西,而不必存储每一组中的每个值。

但我不知道是否有类似的技术来估计额外的统计数据(中位数、模式、偏度、峰度)。只要处理N值所需的内存大大小于O(N),我就可以使用有偏估计器,甚至是在一定程度上折衷精度的方法。

如果库具有“在线”计算这些操作中的一个或多个操作的功能,那么指向现有的stats库也会有帮助。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1058813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档