使用矩计算整数流的近似分位数?


20

math.stackexchange迁移。

我正在处理一长串整数,并考虑跟踪片刻,以便能够大致计算出该流的各种百分位数而无需存储大量数据。从几分钟开始计算百分位数的最简单方法是什么。有没有一种更好的方法仅涉及存储少量数据?


2
您是否知道有关流的分发属性的任何具体信息?例如,他们是积极的吗?有界吗?您可以提供的任何其他详细信息将有所帮助。流的矩很容易计算和存储。这里还存在关于直接从流中估计分位数的先前问题,这听起来像是您真正要执行的操作。您可能会搜索并浏览这些内容。
主教

它们代表处理时间,因此它们是肯定的,并且通常紧密地聚集在一起,除非系统中存在某种技术问题或过载。我将寻找分位数问题;他们可能足够好。我仍然很好奇如何从瞬间开始计算与任意百分位数相关的值。我知道存储时刻很容易,这是我不知道的如何使用它们。
2011年

你看到这个问题了吗?
主教

Answers:


15

您没有明确说明这一点,但是从对问题的描述来看,您似乎正在追求一组高偏位数(例如,第50、90、95和99个百分位数)。

如果是这样的话,我在Cormode等人的“数据流上有偏分位数的有效计算”中所描述的方法就取得了很大的成功。这是一种快速算法,几乎不需要内存,并且易于实现。

该方法基于Greenwald和Khanna的较早算法,该算法维护输入流的一小部分样本以及样本中值等级的上限和下限。它比一小会儿的集合需要更多的空间,但在准确描述分布的有趣尾部区域方面会更好。


1
是的,这确实是要走的路。实际上,获得高分位数的估计要容易一些,尤其是如果您愿意容忍形式的错误,其中是项目总数,并且\ epsilon> 0 $是某些用户定义的误差项ϵññ
Suresh Venkatasubramanian

2

为此,有一种更新,更简单的算法,可以很好地估计极端分位数。

基本思想是,在极端情况下使用较小的bin,这样既可以限制数据结构的大小,又可以保证无论大小,准确性都更高。该算法有多种语言和许多软件包。MergingDigest版本不需要动态分配...一旦实例化了MergingDigest,就不需要进一步的堆分配了。q

参见https://github.com/tdunning/t-digest

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.