数据采样、并行计算与MapReduce技术解析
1. 数据采样
在数据采样过程中,像“8888”这类数字常被预留作商业用途而非住宅用途,这会导致样本产生偏差。为减少这种现象发生的概率,可让 m 为足够大的质数,但避免采样偏差的唯一确定方法是使用随机化。
随机采样
随机以概率 p 采样记录,预期能选出 p · n 个项目,且无明显偏差。常见的随机数生成器会返回一个 0 到 1 之间、服从均匀分布的值。我们可将采样概率 p 作为阈值,在扫描每条新记录时,生成一个新的随机数 r。当 r ≤ p 时,将该记录纳入样本;当 r > p 时,则忽略该记录。
随机采样虽总体上是合理的方法,但存在一些技术问题。统计差异会使某些地区或人群相对于总体被过度采样,不过是以无偏差的方式且在可预测的范围内。多个随机样本并非互斥,且若无种子和随机生成器,随机采样无法重现。
若最终采样记录的数量取决于随机性,可能会出现样本数量过多或过少的情况。若需要恰好 k 个项目,可构建项目的随机排列并截取前 k 个。构建随机排列的算法较为简单,但需要大量不规则的数据移动,对于大文件可能不太适用。更简单的方法是为每条记录添加一个新的随机数字段,然后以此为键进行排序,选取排序后文件的前 k 条记录,相当于随机采样恰好 k 个记录。
流式随机采样
从流中获取固定大小的随机样本是个更棘手的问题,因为我们无法在结束前存储所有项目,甚至不知道最终 n 的大小。
为解决此问题,我们可在大小为 k 的数组中维护一个均匀选择的样本,随着流中每个新元素的到来进行更新。第 n 个流元素属于样本的概率为 k/n,因此当随机数 r ≤
超级会员免费看
订阅专栏 解锁全文
786

被折叠的 条评论
为什么被折叠?



