数据分桶

数据分桶是一种数据预处理技术,用于减少次要观察误差的影响,是一种将多个连续值分组为较少数量的“桶”的方法。
例如,例如我们有一组关于人年龄的数据,如下图所示:
在这里插入图片描述
现在我们希望将他们的年龄分组到更少的间隔中,可以通过设置一些条件来实现:
在这里插入图片描述
分桶的数据不一定必须是数字,它们可以是任意类型的值,如“猫”、“狗”等。分桶也可用于图像处理,通过将相邻像素组合成单个像素,可用于减少数据量。
一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险。比如在建立申请评分卡模型时用logistic作为基模型就需要对连续变量进行离散化,离散化通常采用分桶法。

为什么要进行数据分桶?
  1. 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储容易扩展
  2. 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
  3. LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
  4. 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
  5. 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;
  6. 可以将缺失作为独立的一类带入模型;
  7. 将所有的变量变换到相似的尺度上。
分桶方法

分桶方法分为无监督分桶和有监督分桶。
(1)常用的无监督分桶方法有等频分桶、等距分桶和聚类分桶。
(2) 有监督分桶主要有best-ks分桶和卡方分桶。

卡方分桶

卡方分箱是自底向上的(即基于合并的)数据离散化方法。
它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。
基本思想:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
分桶步骤
第0步:预先设定一个卡方的阈值;
第一步:初始化
根据要离散的属性对实例进行排序:每个实例属于一个区间
第二步:合并区间
(1)计算每一对相邻区间的卡方值;
(2)将卡方值最小的一对区间合并
X 2 = ∑ 2 i = 1 ∑ 2 j = 1 ( A i j − E i j ) 2 E i j X 2 = ∑ i = 12 ∑ j = 12 ( A i j − E i j ) 2

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark 分桶 join 是一种在 Spark 中使用的 join 策略,用于提高 join 操作的性能。 在 Spark 中,数据可以被分桶(也称为分桶)存储在磁盘上,每个桶包含某个键的所有数据。分桶具有以下几个优点: 1. 增强读取性能:当我们进行 join 操作时,分桶可以减少需要读取的数据量。只有具有相同桶号的键才能进行 join,因此可以避免不必要的数据传输。 2. 提高处理速度:因为每个桶都只包含一个键的数据,所以分桶 join 可以极大地减少 join 操作需要比较的键的数量。这样可以大大提高 join 的速度。 3. 减少数据倾斜:在分布式环境中,可能会出现某些键的数据量远大于其他键的情况,这种情况被称为数据倾斜。通过使用分桶 join,可以将数据分布得更加均匀,减少数据倾斜的发生。 使用 Spark 分桶 join 需要进行以下几个步骤: 1. 将数据按照 join key 进行分桶存储。可以使用 Spark 的 `bucketBy` 函数指定分桶列和分桶数。例如:`df1.bucketBy(10, "join_column")`。 2. 在进行 join 操作时,需要使用 `bucketedJoin` 函数,指定要进行 join 的两个数据集和 join 列。例如:`df1.bucketedJoin(df2, "join_column")`。 3. 完成 join 后,可以继续对结果数据集进行其他操作,如过滤、聚合等。 总结来说,Spark 分桶 join 是一种通过数据分桶存储来提高 join 操作性能的技术。它可以减少需要读取的数据量、提高处理速度,并且可以降低数据倾斜的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值