【问题标题】:Updating quantiles rather than recomputing更新分位数而不是重新计算
【发布时间】:2012-10-07 23:57:01
【问题描述】:

是否有一个 java 库允许我通过添加/删除数据点来更新而不是重新计算大量数据样本集的分位数?我的猜测是,一个有效的算法应该需要一个恒定的更新时间(不是已经存在的点数的函数)。

列出了已知的算法,但没有办法从样本集中删除点:

这是一个示例问题:假设我想计算一组风车的任意但恒定的百分位风扇速度(作为风速的估计值)。风扇速度每隔几毫秒异步更新一次。这个库应该允许我一次更新一个风车的风速,而无需重新计算中位数。

【问题讨论】:

    标签: java math statistics colt


    【解决方案1】:

    您可以拥有多批数据。您可以结合这些批次的百分位数/四分位数来估算总和。好处是您可以有效地丢弃多个批次,而无需重新计算其他批次。

    【讨论】:

    • 批处理的想法适用于同一对象的统计信息,但这是对象集合的统计信息...为问题添加了一个示例。
    • 您想一次添加/删除一个吗?您可以通过保留一个环形缓冲区和样本数来做到这一点。删除减量删除值的计数并增加增加值的计数。
    • 是的,可以,但是每次都必须计算百分位数?
    • 如果四分位数不经常变化,可能有一种方法可以减少重新计算的频率。
    【解决方案2】:

    如果您维护数据的可更新排序表示,只需使用数组的长度即可轻松高效地获取分位数。例如,如果您有 N 个元素,则中位数将位于 N/2 位置,依此类推。当你在你的数据结构中插入一个新元素时,它仍然成立。那么效率就取决于插入一个新元素了。

    【讨论】:

    • 是的,这在理论上很容易,但我觉得很麻烦。那么,是否有一个库或这样做的东西......想要避免编写代码和测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2016-04-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多