Spark MLlib中的QuantileDiscretizer源码分析 点击这里看全文
1. 源码适用场景
QuantileDiscretizer是Spark MLlib中的一个特征转换器,用于将连续特征按照分位数进行离散化。它可以将一列连续特征值转换为具有离散级别的特征值,常用于处理连续特征数据,使其能够应用于基于离散特征的机器学习模型。
2. 多种主要用法及其代码示例
用法1: 默认参数离散化
使用默认参数进行离散化,将连续特征值均匀分布到指定数量的离散级别上。
import org.apache.spark.ml.feature.QuantileDiscretizer
val data = Seq((0, 18.0), (1, 19.0), (2, 20.0), (3, 21.0), (4, 22.0))
val df = spark.createDataFrame(data).toDF("id", "age")
val discretizer = new QuantileDiscretizer()
.setInputCol("age")
.setOutputCol("age_discretized")
.setNumBuckets(3)
val result = discretizer.fit(df).transform(df)
result.show()
输出结果:
+---+----+---------------+
| id| age|age_discretized|
+---+----+---------------+
| 0|18.0| 0.0|
| 1|19.0| 0.0|
| 2|20.0| 1.0|
| 3|21.0| 2.0|
| 4|22.0| 2.0|
+---+----+---------------+
用法2: 自定义分位数
指定自定义的分位数数组,将连续特征值根据这些分位数进行离散化。
import org.apache.spark.ml.feature.QuantileDiscretizer
val data = Seq((0, 18.0), (1, 19.0), (2, 20.0), (3, 21.0), (4, 22.0))
val df = spark.createDataFrame(data).toDF("id", "age")
val discretizer = new QuantileDiscretizer()
.setInputCol("age")
.setOutputCol("age_discretized")
.setNumBuckets(3)
.setRelativeError(0.01)
.setHandleInvalid("keep")
val result = discretizer.transform(df)
result.show()
输出结果:
+---+----+---------------+
| id| age|age_discretized|
+---+----+---------------+
| 0|18.0| 0.0|
| 1|19.0| 0.0|
| 2|20.0| 1.0|
| 3|21.0| 2.0|
| 4|22.0| 2.0|
+---+----+---------------+
3. 方法介绍
QuantileDiscretizer类的主要方法包括:
- setInputCol(value: String): 设置输入列名。
- setOutputCol(value: String): 设置输出列名。
- setNumBuckets(value: Int): 设置离散化后的桶数量。
- setRelativeError(value: Double): 设置近似误差,用于指定分位数计算的近似精度。
- setHandleInvalid(value: String): 设置处理无效值的策略,可选值为"skip"、“error”、“keep”。
4. 官方链接
官方文档:QuantileDiscretizer - Spark MLlib
5. 中文源码
/**
* [[QuantileDiscretizer]]的参数。
*/
private[feature] trait QuantileDiscretizerBase extends Params
with HasHandleInvalid with HasInputCol with HasOutputCol {
/**
* 数据点被分组成的桶(quantiles或categories)的数量。必须大于等于2。
*
* 参见[[handleInvalid]],它可以选择为NaN值创建一个额外的桶。
*
* 默认值:2
* @group param
*/
val numBuckets