《Spark机器学习进阶实战》——2.3.3 分层抽样
2.3.3 分层抽样
分层抽样先将数据分为若干层,然后再从每一层内随机抽样组成一个样本。MLlib提供了对数据的抽样操作,分层抽样常用的函数是sampleByKey和sampleByKeyExact,这两个函数是在key-value对的RDD上操作,用key来进行分层。
其中,sampleByKey方法通过掷硬币的方式进行抽样,它需要指定所需数据大小;sampleByKeyExact抽取fkey·nkey个样本,fkey表示期望获取键为key的样本比例,nkey表示键为key的键值对的数量。sampleByKeyExact能够获取更准确的抽样结果,可以选择重复抽样和不重复抽样,当withReplacement为true时是重复抽样,为false时是不重复抽样。重复抽样使用泊松抽样器,不重复抽样使用伯努利抽样器。
分层抽样的代码如下:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.rdd.PairRDDFunctions
val sc: SparkContext = ...
// RDD[(K, V)]形式的键值对
val data = ...
//指定每个键所需的份数
val fractions: Map[K, Double] = ...
//从每个层次获取确切的样本
val approxSample = data.sampleByKey(withReplacement = false, fractions)
val exactSample = data.sampleByKeyExact(withReplacement = false, fractions)
通过用户特征、用户行为对用户进行分类分层,形成精细化运营、精准化业务推荐,进一步提升运营效率和转化率。
- 点赞
- 收藏
- 关注作者
评论(0)