我正在尝试实施加权水库采样的 A-Chao 版本,如https 所示:://en.wikipedia.org/wiki/Reservoir_sampling#Algorithm_A-Chao 但是我发现wiki中描述的伪代码似乎是错误的,尤其是在初始化部分。 我读了这篇论文,它提到我们需要处理过重 ...
我正在尝试实施加权水库采样的 A-Chao 版本,如https 所示:://en.wikipedia.org/wiki/Reservoir_sampling#Algorithm_A-Chao 但是我发现wiki中描述的伪代码似乎是错误的,尤其是在初始化部分。 我读了这篇论文,它提到我们需要处理过重 ...
我有一个大小为 n 的输入流,我想生成一个大小为 k 的输出流,其中包含输入流的不同随机元素,而不需要为样本选择的元素提供任何额外的内存。 我要使用的算法基本上如下: 函数 random() 在随机分布上从 [0..1) 生成一个数字,我相信该算法的操作原理很简单。 尽管该算法在选择最后一个 ...
我的问题与此链接https://en.m.wikipedia.org/wiki/Reservoir_sampling 的“算法 R”部分中的示例代码有关 我从该部分复制了以下代码片段。 为什么这段代码会以逐渐降低的概率替换元素? 根据问题,输入中的每个项目都应该具有相同的概率,对吗? 例如,将以 ...
我无法理解水库采样所涉及的概率。 下面是我在几乎所有地方都看到过的示例代码: 我的理解是否正确(?):假设我们有 k=3 和 input = [100, 200, 300, 400, 500] 并且 i 目前处于 500 索引。 500 替换 300 的概率(大小为 3) = 300 被选中的 ...
我尝试在http://jeremykun.com/2013/07/05/reservoir-sampling/ 之后在 haskell 中实现一个简单的水库采样(请注意,显示的算法可能在语义上不正确) 据此: 迭代或惰性水库采样惰性水库采样是不可能的,除非您提前知道人口规模。 即便如此,我还是不 ...
要明确以下是问题: 给定一个不确定长度的输入流,您如何返回该流的随机成员(每个成员的概率相等),因为您不允许存储超过恒定数量的输入,并且您只能通过输入一次 这个问题的解决方案似乎是水库采样,它说明如下。 “首先,您要创建一个包含 1,000 个元素的水库(数组),并用流中的前 1,000 个元素 ...
我正在尝试使用 java 实现水库采样算法。 我有 N 个未知大小的数据流(来自到达汇节点的传感器的读数)。 为了简单起见,假设我有一个未知大小的流。 因此,一种储层采样算法建议创建一个大小为储层大小的储层。 假设它是 5。您获得的前五个读数,将它们存储在您的水库中。 好的。 现在,随着您获得越来 ...
我需要实施加权水库采样。 我已经参考了这篇博客中提到的论文。 我想编写测试用例来对我的实现进行单元测试,并且对如何计算不同元素在水库中的预期概率感到困惑。 我认为它应该与(weight_of_element/weight_of_all_elements) ,但是这里提到的测试用例以不同的方式计算它 ...
我有一个数据挖掘课程的项目,我必须在其中编写文件的水库采样算法。 该程序将数字 k、输入文件的名称和要创建的输出文件的名称作为输入。 输出文件必须包含来自输入的 k 个随机行。 我尝试了一些东西,但输出是错误的。 这是我使用的代码: 这个程序试图做的是从文件中读取前 k 行并将其存储在一个 ...
我对 Reservoir Sampling 算法非常熟悉,我在想如果给定总大小N会怎样。 在这种情况下,我们能得到什么好处? 结果,这是算法: 乍一看似乎是正确的,但我发现很难证明。 任何人都可以帮助我以正式的方式证明这个算法吗? ...
我非常熟悉使用 Reservoir Sampling 从一组未确定长度的数据中一次性采样。 在我看来,这种方法的一个限制是它仍然需要遍历整个数据集才能返回任何结果。 从概念上讲,这是有道理的,因为必须允许整个序列中的项目有机会替换以前遇到的项目以实现统一样本。 有没有办法在评估整个序列之前产生一些 ...
我想了解水库采样算法,我们从给定的 S 元素集中选择 k 个元素,使得 k <= S。 在维基上给出的算法中: 如果我理解正确的话,我们首先从集合中选择 k 个元素,然后连续解析 S 的 i 个元素,生成 1 到 i 范围内的随机 no j,并将元素 j 替换为 S[i]。 如果要采样 ...
最近有人问了另一个问题: 给定一个未知长度的列表,只扫描 1 次就返回其中的随机项 我知道你不应该,我只是无法对为什么不进行规范的解释。 看示例代码: 为每个项目生成一个新随机数的适当水库采样的选择很好地均匀分布,因为它应该是: 而当您对所有项目重复使用相同的随机数时,您会得到一个偏向 ...
这篇MSDN文章证明了Reservoir Sampling算法的正确性如下: 基本情况是微不足道的。 对于第 k+1 种情况,位置 <= k 的给定元素 i 在 R 中的概率为 s/k。 i 被替换的概率是第 k+1 个元素被选中的概率乘以 i 被选中被替换的概率,即:s/(k ...