Mapreduce 利用Map-Reduce实现油藏采样
此链接“”介绍如何使用map reduce框架实现储层采样。我觉得他们的解决方案很复杂,下面的简单方法会奏效 问题: 给定非常多的样本,生成一组大小为k的样本,使每个样本在该集合中存在的概率相等 建议的解决方案:Mapreduce 利用Map-Reduce实现油藏采样,mapreduce,sampling,Mapreduce,Sampling,此链接“”介绍如何使用map reduce框架实现储层采样。我觉得他们的解决方案很复杂,下面的简单方法会奏效 问题: 给定非常多的样本,生成一组大小为k的样本,使每个样本在该集合中存在的概率相等 建议的解决方案: 映射操作:对于每个输入数字n,输出(i,n),其中i在0到k-1范围内随机选择 减少操作:在所有具有相同键的数字中,随机选择一个 声明: k大小集合中任何数字的概率为k/n(其中n为样本总数) 证明直觉: 由于映射操作将每个输入样本随机分配给bucket number i(0您的参数中
由于映射操作将每个输入样本随机分配给bucket number i(0您的参数中有一个小缺陷。您的算法可能不会返回大小为k的样本,因为可能会发生元素没有映射到特定键的情况。在极端情况下(即使可能性很小),所有输入元素可能只映射到一个键,在这种情况下,算法只返回一个元素
“丢失”特定密钥的事件具有概率((k-1)/k)^n=(1-1/k)^n,这大约是(使用泰勒近似)e^{-n/k}。如果k远小于n,这是可以忽略的,但是如果k与n成比例,比如k=n/2,那么这个坏事件实际上是以恒定的概率发生的。您的论点中有一个小缺陷。您的算法可能不会返回大小为k的样本,因为可能会发生没有元素映射到特定键的情况。在极端情况下(即使可能性很小),所有输入元素可能只映射到一个键,在这种情况下,算法只返回一个元素 “丢失”一个特定键的事件具有概率((k-1)/k)^n=(1-1/k)^n,这大约是(使用泰勒近似)e^{-n/k}。如果k远小于n,这是可以忽略的,但是如果k与n成比例,比如k=n/2,那么这个坏事件实际上以恒定的概率发生