更新时间:2021-01-29 来源:黑马程序员 浏览量:
分层抽样法也叫类型抽样法,它是先将总体样本按照某种特征分为若干次级(层),然后再从每一一层内进行独立取样,组成一个样本的统计学计算方法。例如,某手机生产厂家估算当地潜在用户,可以将当地居民消费水平作为分层基础,减少样本中的误差,如果不采取分层抽样,仅在消费水平较高的用户中做调查,就不能准确地估算出潜在的用户。接下来,通过Spark-Shell演示分层抽样方法,具体代码如下。
#创建键值对RDD scala>val data =sc.parallelize( Seg((1, 'a'), (1, 'b'), (2,'c'), (2, 'a'), (2, 'e'), (3, 'f1))#设定抽样格式 scala>val fractions =Map(1->0.1, 2->0.6,3->0.3) 并从每层获取抽样样本 scala> val approxSample = data . sampleByKey (withReplacementfalse, fractions = fractions)并从每层获取精确样本 scala> val exactSample= 中招eyeyse otheptacee -fale, fractoo -ractoes#打印抽样样本 scala> approxsample.foreach (printin) (2,e) #打印精确样本 scala> exactsample. frech(printn) (2,d) (3,f) (1,b) (2,c)
在上述代码中用到了两种3分层抽样方法.其中sampleByKey()方法需要作用于一 一个键值对数组,其中Rroy用于分类Velu可以是任雅值,然后通过r.歌徒父分关茶件有收.K条件的采样比例1.0代表被率为o,qaun机农物物鲜光否sppyeyExrn)方法会对全量数据做采样计算。对于每个类别,都会产生(k.n)个样本,其中Ak是键为factos的Key的样本类别采样的比例:nk是Key所拥有的样本数。sampleByKeyExtra采样的结果会更准确,有99.9%的置信度,但耗费的计算资源也更多。
sampleByKey()方法和sampleByKeyExact()方法的区别在于sampleByKey()方法每次都得通过给定的概率以-种类似于掷硬币的方式来决定这个观察值是否被放入样本,因此-遍就可以过滤完所有数据,最后得到一个近似大小的样本,但往往并不够准确。
猜你喜欢: