Random tep您有1001个元素,因此我们需要选择概率为1000/1001的每个元素。我们选择了第1001个元素,它的概率正好是这个,所以这很好。现在我们还需要证明,每个其他元素也有相同的概率存在于样本中

Random tep您有1001个元素,因此我们需要选择概率为1000/1001的每个元素。我们选择了第1001个元素,它的概率正好是这个,所以这很好。现在我们还需要证明,每个其他元素也有相同的概率存在于样本中,random,sampling,Random,Sampling,p(样本中剩余的任何其他元素)=[1-p(该元素为 从样本中删除)] 很好,现在我们已经证明每个元素在样本中的概率为1000/1001。这个精确的论点可以用归纳法扩展到第I步。我认为你使用了无限这个词有点松散,采样的前提是每个元素都有平等的机会出现在样本中,这只有在你至少遍历每个元素的情况下才有可能。因此,我将“无限”转化为一个大数字,表示您需要一个单过程解决方案,而不是多个过程 尽管@abipc的分析方向似乎正确,但并非完全正确,但油藏取样是一种方法 如果我们首先清楚自己想要什么,事情就容易多

p(样本中剩余的任何其他元素)=[1-p(该元素为 从样本中删除)]


很好,现在我们已经证明每个元素在样本中的概率为1000/1001。这个精确的论点可以用归纳法扩展到第I步。

我认为你使用了无限这个词有点松散,采样的前提是每个元素都有平等的机会出现在样本中,这只有在你至少遍历每个元素的情况下才有可能。因此,我将“无限”转化为一个大数字,表示您需要一个单过程解决方案,而不是多个过程

尽管@abipc的分析方向似乎正确,但并非完全正确,但油藏取样是一种方法

如果我们首先清楚自己想要什么,事情就容易多了。假设您有N个元素(N个未知元素),您需要选择1000个元素。这意味着我们需要设置一个抽样方案,其中任何元素在样本中的概率恰好为1000/N,因此每个元素在样本中的概率相同(根据其在原始列表中的位置,不优先于任何元素)。@abipc提到的方案运行良好,概率计算如下-

在第一步之后,你们有1001个元素,所以我们需要选择概率为1000/1001的每个元素。我们选择了第1001个元素,它的概率正好是这个,所以这很好。现在我们还需要证明,每个其他元素也有相同的概率存在于样本中

p(样本中剩余的任何其他元素)=[1-p(该元素为 从样本中删除)]


很好,现在我们已经证明每个元素在样本中的概率为1000/1001。这个精确的参数可以使用归纳法扩展到第I步。

据我所知,这类算法称为储层采样算法

我从数据挖掘中知道一个,但不知道它的名字:

  • 收集存储中的前S个元素,最大大小等于S
  • 假设流的下一个元素的编号为N
  • 用概率序列号捕捉新元素,否则丢弃
  • 如果捕捉到元素N,则替换sameple S中的一个元素,以统一方式拾取它
  • N=N+1,获取下一个元素,转到1
  • 从理论上可以证明,在这种流处理的任何步骤中,大小为S的存储器都包含您所看到的S/N概率相等的元素

    例如S=10

    N你所看到的=10^6

    S-是有限数;
    你所看到的,可以是无限数

    据我所知,这类算法称为储层采样算法

    我从数据挖掘中知道一个,但不知道它的名字:

  • 收集存储中的前S个元素,最大大小等于S
  • 假设流的下一个元素的编号为N
  • 用概率序列号捕捉新元素,否则丢弃
  • 如果捕捉到元素N,则替换sameple S中的一个元素,以统一方式拾取它
  • N=N+1,获取下一个元素,转到1
  • 从理论上可以证明,在这种流处理的任何步骤中,大小为S的存储器都包含您所看到的S/N概率相等的元素

    例如S=10

    N你所看到的=10^6

    S-是有限数;
    你所看到的,可以是无限数

    既然你不能存储一个无限的集合,那么假设你有一个无限的字符串序列,你一次只能看到一个,这公平吗?在这种情况下,它归结为在接收到每个字符串时对其进行二进制采样/不采样的决定,唯一的问题是您希望该选择的接受率是多少。@pjs。。“你有一个无限的字符串序列,你一次只能看到一个”似乎很好。在这种情况下,你的抛硬币方案看起来是正确的方法,只是你可能希望接受概率不是1/2。为了更好地理解这个问题,请看@abipc提供的!这个问题就像我想的那样…:“如何随机采样无限流(应选择1000个样本),这样你不知道它何时结束,但何时结束,你必须保存所有你选择的样本。你的内存只能存储1000个元素。”因为你不能存储无限集,假设一次只能看到一个无限的字符串序列,这公平吗?在这种情况下,它归结为在接收到每个字符串时对其进行二进制采样/不采样的决定,唯一的问题是您希望该选择的接受率是多少。@pjs。。“你有一个无限的字符串序列,你一次只能看到一个”似乎很好。在这种情况下,你的抛硬币方案看起来是正确的方法,只是你可能希望接受概率不是1/2。为了更好地理解这个问题,请看@abipc提供的!这个问题就像我想的那样…:“如何对无限流(应选择1000个样本)进行随机采样,这样您不知道它何时结束,但何时结束,您必须保存所选的所有样本。您的内存只能存储1000个元素。”
        =  [ 1 - p(1001st element is selected) * p(the element is picked to be removed)
        =  [ 1 - (1000/1001) * (1/1000)] =  1000/1001