用于估计统计中位数、众数、偏度、峰度的“在线”(迭代器)算法?

2023-11-24

是否有一种算法可以估计一组值的中值、众数、偏度和/或峰度,但不需要立即将所有值存储在内存中?

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

  • 平均数:算术平均数
  • 方差:与平均值的平方偏差的平均值
  • 标准差:方差的平方根
  • 中位数:将较大的一半数字与较小的一半数字分开的值
  • 众数:集合中出现次数最多的值
  • 偏度:tl;博士
  • 峰度:tl;博士

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

我的问题是我正在处理的集合中存在大量(数十亿)值:在Python中工作,我不能只创建包含数十亿个元素的列表或散列。即使我用 C 语言编写,十亿个元素的数组也不太实用。

数据未排序。它是由其他过程随机、即时生成的。每组的大小变化很大,并且无法提前知道大小。

我已经弄清楚如何很好地处理均值和方差,以任何顺序迭代集合中的每个值。 (实际上,就我而言,我按照它们生成的顺序获取它们。)这是我正在使用的算法,礼貌http://en.wikipedia.org/wiki/Algorithms_for_calculate_variance#On-line_algorithm:

  • 初始化三个变量:count、sum 和 sum_of_squares
  • For each value:
    • 增量计数。
    • 将值添加到总和中。
    • 将值的平方添加到 sum_of_squares。
  • 将总和除以计数,存储为变量平均值。
  • 将 sum_of_squares 除以计数,存储为变量mean_of_squares。
  • 均方,存储为 square_of_mean。
  • 从mean_of_squares中减去square_of_mean,存储为方差。
  • 输出均值和方差。

这种“在线”算法有弱点(例如,精度问题,因为 sum_of_squares 很快变得大于整数范围或浮点精度),但它基本上给了我我需要的东西,而不必存储每个集合中的每个值。

但我不知道是否存在类似的技术来估计附加统计数据(中位数、众数、偏度、峰度)。只要处理 N 个值所需的内存远小于 O(N),我就可以接受有偏差的估计器,甚至是在一定程度上损害准确性的方法。

如果该库具有“在线”计算其中一项或多项操作的功能,那么向我指出现有的统计库也会有所帮助。


我使用这些增量/递归均值和中值估计器,它们都使用常量存储:

mean += eta * (sample - mean)
median += eta * sgn(sample - median)

where eta是一个小的学习率参数(例如 0.001),并且sgn() 是返回 {-1, 0, 1} 之一的符号函数。 (使用常数eta如果数据不稳定并且您想要跟踪随时间的变化;否则,对于固定源,您可以使用类似的东西eta=1/n 对于均值估计器,其中 n 是迄今为止看到的样本数...不幸的是,这似乎不适用于中值估计器。)

这种类型的增量均值估计器似乎到处都在使用,例如在无监督的神经网络学习规则中,但中值版本似乎不太常见,尽管它有好处(对异常值的鲁棒性)。在许多应用中,中值版本似乎可以用作均值估计器的替代品。

我很想看到类似形式的增量模式估计器......

更新 (2011-09-19)

我刚刚修改了增量中值估计器来估计任意分位数。一般来说,一个分位数函数告诉您将数据分为两个分数的值:p 和 1-p。以下逐步估计该值:

quantile += eta * (sgn(sample - quantile) + 2.0 * p - 1.0)

p 值应在 [0,1] 范围内。这本质上改变了sgn() 函数的对称输出 {-1,0,1} 偏向一侧,将数据样本划分为两个大小不等的箱(数据的分数 p 和 1-p 分别小于/大于分位数估计值) )。请注意,对于 p=0.5,这会减少到中值估计量。

更新 (2021-11-19)

有关此处描述的中值估计量的更多详细信息,我想重点介绍以下评论中链接的这篇论文:Bylander & Rosen,1997,用于跟踪中位数的类似感知器的在线算法。这里有一个后记版本来自作者的网站。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于估计统计中位数、众数、偏度、峰度的“在线”(迭代器)算法? 的相关文章

  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • 将嵌套字典中的所有键从camelCase转换为snake_case

    我有一本类似这样的字典 firstName abc lastName xyz favoriteMovies Star Wars The lone ranger favoriteCountries country China capitalC
  • 通过分布式数据库聚合作业优化网络带宽

    我有一个分布式 联合数据库 结构如下 数据库分布在三个地理位置 节点 每个节点集群有多个数据库 关系数据库是 PostgreSQL MySQL Oracle 和 MS SQL Server 的混合体 非关系数据库是 MongoDB 或 Ca
  • 高维最近邻搜索的最佳数据结构

    我实际上正在处理高维数据 50 000 100 000 个特征 并且必须对其执行最近邻搜索 我知道随着维度的增长 KD 树的性能很差 而且我还了解到 一般来说 所有空间分区数据结构都倾向于对高维数据执行详尽的搜索 此外 还有两个重要事实需要
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 我需要一个支持高效随机访问和 O(k) 插入和删除的容器

    我再次尝试问同样的问题question https stackoverflow com questions 3808708 delete parts of a dynamic array and grow other 但我最终提出了一个不同
  • 点集子集的最小周长凸包

    给定平面上的 n 个点 没有 3 个共线 给定数字 k 找到 k 个点的子集 使得 k 个点的凸包在 k 个点的子集的任何凸包中具有最小周长 我可以想到一个简单的方法 运行时间为 O n k k log k 找到大小为 k 的每个子集的凸包
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 如何检查是否存在可能的路径?

    我正在开发一个基于 javascript 的实验性游戏 玩家必须在二维平铺地图上移动才能退出 请随意检查这个小提琴并演奏 http jsfiddle net moonlife 74vLd 我只是随机放置障碍物 但有时障碍物会挡住玩家和出口之
  • 如何重现 Ridge(normalize=True) 的行为?

    这段代码 from sklearn pipeline import make pipeline from sklearn preprocessing import StandardScaler from sklearn linear mod
  • 需要一种将网络块范围折叠为超集范围列表的算法

    我的数学不及格 我需要一种有效的方法将网络范围缩小为超集 例如如果我输入 IP 范围列表 1 1 1 1至2 2 2 5 1 1 1 2至2 2 2 4 10 5 5 5至155 5 5 5 10 5 5 6至10 5 5 7 我想返回以下
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 从一种数字系统转换为另一种数字系统后会有多少位数字

    主要问题 有多少位数字 让我解释 我有一个二进制数 11000000 十进制数是192 转换为十进制后 它有多少位 以十进制表示 在我的示例中 它是 3 位数字 但是 这不是问题 我在互联网上搜索并找到了一种用于整数部分的算法和一种用于小数
  • Florian 的 Grisu2 算法如何工作?

    我遇到了一个关于将 double 转换为 ascii 的问题 经过搜索 我得到了 Florian 的论文 使用整数快速准确地打印浮点数 http www cs tufts edu nr cs257 archive florian loits
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它

随机推荐

  • 理解 jq JOIN()

    我试图理解JOIN 内置于jq 来自 jq 手册 https stedolan github io jq manual JOIN idx stream idx expr join expr This builtin joins the va
  • 如何处理`Reader` monad 和`Try`?

    我正在读这篇关于使用 Reader monad 在 scala 中进行依赖注入 原始示例运行良好 但我对返回类型做了一些更改UserRepository get find 它是User 但我把它改成了Try User 然后代码就无法编译 我
  • 取消列出数据框中的所有列表元素

    我有一个数据框 每列包含以下变量类别 date numeric numeric list list numeric 每行的数据如下所示 1978 01 01 12 5 6 3 c 0 0 0 25 0 45 0 3 c 0 0 0 0 1
  • 如何检查特定表的 MySQL 引擎类型?

    我的 MySQL 数据库包含多个使用不同存储引擎的表 特别是 myisam 和 innodb 我如何找出哪些表 使用哪个引擎 SHOW TABLE STATUS WHERE Name xxx 这将为您 除其他外 提供Engine列 这就是您
  • 比较两个表行,如果匹配则删除

    任何人都可以在 JQuery 中帮助我吗 我的网站上有两张桌子左表 and 右表具有相同的列名 这左表我从数据库填充 但是右表它只包含一些行 我想做的是不在中显示 或删除 左表那些存在于右表 我试过这个 tableLeft tr each
  • C++删除不带括号的数组内存仍然有效吗? [复制]

    这个问题在这里已经有答案了 int arr new int count delete arr 为什么这有效 我检查过 它实际上释放了内存 根据我读到的内容 我需要delete arr 否则它实际上不会释放所有内存 区别不在于分配的内存是否被
  • 参数位于词汇环境中的什么位置?

    以下代码始终打印传递给参数的参数a 无论是否存在同名变量 大概是因为参数标识符单独绑定到范围内的变量 他们的位置在哪里 它们处于词汇环境中吗 function foo a b gt a var a 1 console log b foo u
  • Jackson JSON 某些字段的自定义序列化

    有没有办法使用 Jackson JSON Processor 进行自定义字段级序列化 例如 我想要上课 public class Person public String name public int age public int fav
  • 接受邀请多人连接

    我希望我发布这个问题没有违反保密协议 我正在使用新的多点连接通过蓝牙将一些文件发送到附近的设备 我已成功发送邀请 但我似乎不知道如何显示 UIAlertView 用户可以在其中接受或拒绝邀请 现在 当用户发送时 文件会自动保存 并且没有接受
  • 使用C中的快速排序进行反向排序(降序)?

    为了排序我打电话qsort myArray 100 sizeof int comp int comp const int a const int b if a b return 0 else if a
  • Spark 广播变量在 Amazon EMR 集群中运行时返回 NullPointerException

    我通过广播共享的变量在集群中为空 我的应用程序非常复杂 但我编写了这个小示例 当我在本地运行它时它可以完美地工作 但它在集群中失败 package com gonzalopezzi bigdata bicing import org apa
  • 身份验证后如何从 Yahoo 重定向到我的 IOS 应用程序?

    我正在开发一个必须使用雅虎帐户登录的应用程序 我曾经经历过这个链接并按照那里的程序进行操作 但是身份验证后我无法返回到我的应用程序 谷歌搜索后我找到了答案here在这里 他说 使用 YOUR APP ID OR BUNDLE ID 在您的
  • HTML5 视频的 z-index 分层 (ipad) [重复]

    这个问题在这里已经有答案了 可能的重复 iPad Safari 移动版似乎忽略了 html5 视频元素的 z 索引位置 我正在使用 BrightCove smartplayer 代码将 HTML5 视频标签写入页面 此代码将对象标签替换为视
  • 输出消失Javascript简单innerHTML

    我对 javascript 很陌生 在每一个简单的事情上我都会遇到一些问题 但这对我来说似乎无法解决 我用谷歌搜索了一下 没有类似的东西 当我将数据输入文本框并将其存储到变量中后 我打印出段落中的变量 问题是我打印出来的输出在不到一秒的时间
  • 内联onclick是如何评估的?

    我很好奇内联元素属性事件的内容在幕后是如何工作的 我们从一个简单的函数开始 function handler e console log e 使用案例1 如果我们想将此处理程序添加到我们的按钮中 我们可以这样做
  • 适用于 Google Chrome 的 Google Cast 扩展程序是否支持 1080p? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 在 选项卡投影质量 下的 Google Cast 扩展选项中 有三个选项 至尊 720p 高码率 高 720p 标准 480p 1080p 未列出 我假设如果我播放 1080p 视频
  • 如何在运行时添加 UIButton

    我正在尝试添加一个UIButton但在运行时它是不可见的 我究竟做错了什么 id initWithFrame CGRect frame if self super initWithFrame frame UIButton btn UIBut
  • Airflow 任务失败/重试工作流程

    我有任务的重试逻辑 但不清楚重试打开时 Airflow 如何处理任务失败 Their 文档只是指出on failure callback当任务失败时被触发 但是如果该任务失败并且也被标记为重试 这是否意味着on failure callba
  • ExtJS 4“始终位于顶部”窗口

    我需要实现可以始终位于顶部的窗口 我该怎么做呢 我对 WindowManager 的所有尝试都没有给我结果 在 Ext window Window 中 有一个名为 modal 将其设置为 true 否则 请使用窗口管理器管理您的窗口 在这种
  • 用于估计统计中位数、众数、偏度、峰度的“在线”(迭代器)算法?

    是否有一种算法可以估计一组值的中值 众数 偏度和 或峰度 但不需要立即将所有值存储在内存中 我想计算一下基本统计数据 平均数 算术平均数 方差 与平均值的平方偏差的平均值 标准差 方差的平方根 中位数 将较大的一半数字与较小的一半数字分开的