QuantileDiscretizer

  QuantileDiscretizer输入连续的特征列,输出分箱的类别特征。分箱数是通过参数numBuckets来指定的。
箱的范围是通过使用近似算法(见approxQuantile )来得到的。
近似的精度可以通过relativeError参数来控制。当这个参数设置为0时,将会计算精确的分位数。箱的上边界和下边界分别是正无穷和负无穷时,
取值将会覆盖所有的实数值。

例子

  假设我们有下面的DataFrame,它的列名是id,hour

  1. id | hour
  2. ----|------
  3. 0 | 18.0
  4. ----|------
  5. 1 | 19.0
  6. ----|------
  7. 2 | 8.0
  8. ----|------
  9. 3 | 5.0
  10. ----|------
  11. 4 | 2.2

  hour是类型为DoubleType的连续特征。我们想将连续特征转换为一个分类特征。给定numBuckets为3,我们可以得到下面的结果。

  1. id | hour | result
  2. ----|------|------
  3. 0 | 18.0 | 2.0
  4. ----|------|------
  5. 1 | 19.0 | 2.0
  6. ----|------|------
  7. 2 | 8.0 | 1.0
  8. ----|------|------
  9. 3 | 5.0 | 1.0
  10. ----|------|------
  11. 4 | 2.2 | 0.0

  下面是代码实现的例子。

  1. import org.apache.spark.ml.feature.QuantileDiscretizer
  2. val data = Array((0, 18.0), (1, 19.0), (2, 8.0), (3, 5.0), (4, 2.2))
  3. var df = spark.createDataFrame(data).toDF("id", "hour")
  4. val discretizer = new QuantileDiscretizer()
  5. .setInputCol("hour")
  6. .setOutputCol("result")
  7. .setNumBuckets(3)
  8. val result = discretizer.fit(df).transform(df)
  9. result.show()