Language agnostic 是否有加权水库取样的算法?

Language agnostic 是否有加权水库取样的算法?,language-agnostic,sampling,Language Agnostic,Sampling,当数据流中的点具有相关权重时,是否有一种算法来执行储层采样?您可以从中尝试A-ES算法。编写代码非常简单,效率也非常高 希望这有帮助 贝努伊特帕夫洛斯·埃弗拉米迪斯(Pavlos Efraimidis)和保罗·斯皮拉基斯(Paul Spirakis)的算法正好解决了这个问题。在《2006年信息处理快报》上,有完整证据的原始论文以“水库加权随机抽样”为题发表,但你可以找到一个简单的摘要 该算法的工作原理如下。首先,请注意,解决未加权储层采样的另一种方法是为每个元素分配一个介于0和1之间的随机id

当数据流中的点具有相关权重时,是否有一种算法来执行储层采样?

您可以从中尝试A-ES算法。编写代码非常简单,效率也非常高

希望这有帮助


贝努伊特

帕夫洛斯·埃弗拉米迪斯(Pavlos Efraimidis)和保罗·斯皮拉基斯(Paul Spirakis)的算法正好解决了这个问题。在《2006年信息处理快报》上,有完整证据的原始论文以“水库加权随机抽样”为题发表,但你可以找到一个简单的摘要

该算法的工作原理如下。首先,请注意,解决未加权储层采样的另一种方法是为每个元素分配一个介于0和1之间的随机id R,并以增量方式(例如使用堆)跟踪前k个id。现在让我们看看加权版本,假设第i个元素的权重为w_i。然后,我们通过选择第i个元素的id为R^(1/w_i)来修改该算法,其中R再次均匀分布在(0,1)中


Cloudera的同事们发表了另一篇关于此算法的文章。

和一行python实现:
heapq.nlargest(k,items,key=lambda item:math.pow(random.random(),1/weight(item))
是否可以用replacement执行此操作?@eleanora使用replacement执行此操作没有意义,因为存在别名方法,您需要首先创建一个表,它需要O(n)个时间,然后每个选择都是O(1)。但是,Alias不会在选择时保持其运行时复杂性,除非您将其与替换一起使用。可以找到似乎是副本的内容。