2011-09-06 98 views
2

我得到一个0到1之间的(实时快速)实时数据点流,并需要将它们分类为“桶”。如何在实时流中平均出概率分布?

假设有一个0.6即将到来,我的桶分别覆盖了0.25的面积。这意味着0.6进入第三桶。但是,当0.6左右出现很多数字时,他们最终都会陷入第三桶,这很糟糕。

我想更改四个桶所覆盖的区域,以便每个桶具有相同的命中概率。例如,可能会更好地使第一个覆盖0-0.5,第二个0.5-0.6,一个0.6-0.65和最后一个0.65-1。

问题是,我无法存储值 - 只有哪些桶被多次击中。那么这是否有一个工作更新公式?!

非常感谢您提前!

+2

我想你想要一个等宽直方图的流式算法。以下是一份调查报告,以帮助您入门:http://paul.luon.net/papers/AA-Space-Efficient-Alg.pdf – Ron

+0

输入点数量是否有限制?水桶是否重置或丢弃旧点? – AShelly

+0

目标是准确的直方图还是简单的负载平衡? – AShelly

回答

0

如果没有存储的值,然后在一个时间点你已经是

多值x和y之间如何下降。

为了保持桶/桶之间的相等概率,值非常重要。 让我们从这个实时流开始,并假设它最初开始的时候是0.12 0.37 0.62和0.87 箱子每个箱子都有1个。

对于值0.24,0.49,0.74,0.99再次每个仓将获得1

对于值0.01,0.26,0.51,0.76再次每个仓将获得1

你最终会在每个3完事。现在如果0.6开始进来约6次制造第三个仓在9,而其余的是3。说现在你必须更新你的界限。如果您现在移动垃圾箱边界,那么每个垃圾桶的概率将不正确。

您不能根据计数甚至是平均值来移动箱子。我的示例值可以以任意顺序出现,因此甚至不可能在不知道所有先前值的情况下出现第一个值之后移动箱。

了解别人怎么看待这一点会有趣。

0

我认为你想保留一种桶的树。

这听起来像是Huffman codingArithmetic coding的变体的工作。

我知道有一个霍夫曼编码的流式变体。我不确定算术。但至少您可以定期定义一个新模型,并将旧值复制到新模型中。

由于您没有旧值,您可能必须在边界处猜测而不是计算它们。例如,你可以在0.6以下定义100个新的桶,然后将未使用的桶倒塌。