《Spark机器学习进阶实战》——2.3.3 分层抽样

举报
华章计算机 发表于 2019/05/31 01:26:48 2019/05/31
【摘要】 本书摘自《Spark机器学习进阶实战》——书中的第2章,第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)

通过用户特征、用户行为对用户进行分类分层,形成精细化运营、精准化业务推荐,进一步提升运营效率和转化率。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。