【问题标题】:Random selection in reservoir sampling油藏取样中的随机选择
【发布时间】:2016-08-03 10:40:13
【问题描述】:

我的问题与此链接https://en.m.wikipedia.org/wiki/Reservoir_sampling“算法 R”部分中的示例代码有关

我从该部分复制了下面的代码 sn-p。为什么这段代码用逐渐降低的概率替换元素?根据问题,输入中的每个项目都应该具有相同的概率,对吧?

for i = k+1 to n
    j := random(1, i) 
    if j <= k
        R[j] := S[i]

例如,将以下三个输入的随机函数调用与我的水库大小 10 进行比较

  • 随机 (1,15) 获得低于 10 的随机数的机会很高
  • 随机 (1, 100) 获得低于 10 的随机数的机会非常低
  • 随机 (1, 1000) 获得低于 10 的随机数的机会非常低

因此,随着输入的增长,替换项目的机会非常少,那么我们怎么能说水库采样算法是在每个项目上选择具有相等概率的随机样本的解决方案呢?可能我遗漏了一些东西,请解释一下。

【问题讨论】:

    标签: algorithm random data-science sampling reservoir-sampling


    【解决方案1】:

    在算法后面的段落中进行了解释,但关键观察是:R中的样本候选可以被多次覆盖,但你只会看到最后一次写入的结果 .

    因此,当i 较小时,您用新样本替换样本的机会更高,但出于同样的原因,当您到达循环结束时,新样本仍然存在的机会 很小。

    而如果i 更接近n,一个值进入R 的机会就会更小,但如果它到达那里,以后可能不会被覆盖。

    如果你把所有的概率加起来,每个元素都会是k/n

    【讨论】:

    • 选择最后一个项目到水库的概率很小吧?那么我们怎么能说每个项目都有相同的概率被选择到存储库中呢?以及每个项目将如何获得 k/n 概率?请解释一下。
    • @Pradeep 只有它最后仍然被选中的概率是相等的。最后一项被选中的概率是k/n。最后一个项目被选中的概率是k/(n-1),但有一个1/n 的可能性是最后一个项目可能被选中到完全相同的位置。所以第 (n-1) 个项目被选中而不被覆盖的机会是k/(n-1) * (n-1)/n = k/n。以此类推,对于所有其他人。
    • 感谢您的耐心等待...您能否解释一下为什么在您的示例中未覆盖的概率为 (n-1)/n?我假设不被覆盖为 1-1/k 的概率,因为.. 例如:从水库中选择一个项目是 1/k,而不是选择是 1-1/k.. 可能是我在这里遗漏了一些上下文..请解释一下。
    • @Pradeep 你不清楚算法。再看一遍,你就会明白为什么概率不是1-1/k。特别是,@biziclop 正确的是,最后一个 (n-1) 项被最后一项 (n) 替换的概率是 1/n,因为在决定最后一项时,有 @ 987654332@ 个数字可供选择,其中只有一个数字将替换倒数第二个项目,因此概率为1/n
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2015-05-13
    • 2010-10-13
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2015-10-12
    相关资源
    最近更新 更多