1、概念

接收具有连续特征的列,并输出具有合并分类特征的列。按分位数,对给出的数据列进行离散化分箱处理。
和Bucketizer(分箱处理)一样也是:将连续数值特征转换为离散类别特征。实际上Class QuantileDiscretizer extends Bucketizer 参数1:不同的是这里不再自己定义splits(分类标准),而是定义分几箱(段)就可以了。QuantileDiscretizer自己调用函数计算分位数,并完成离散化。
参数2: 另外一个参数是精度,如果设置为0,则计算最精确的分位数,这是一个高时间代价的操作。
另外上下边界将设置为正负无穷,覆盖所有实数范围。
分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。

2、code

package com.home.spark.ml

import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.QuantileDiscretizer
import org.apache.spark.sql.SparkSession /**
* @Description: 分位数离散器
* QuantileDiscretizer接收具有连续特征的列,并输出具有合并分类特征的列。按分位数,对给出的数据列进行离散化分箱处理。
* 箱数由numBuckets参数设置。
* 例如,如果输入的不同值太少而无法创建足够的不同分位数,则所使用的存储桶的数量可能会小于该值。
*
* NaN值:在QuantileDiscretizer拟合过程中,将从柱中除去NaN值。这将产生一个Bucketizer模型进行预测。
* 在转换期间,Bucketizer在数据集中找到NaN值时将引发错误,但是用户也可以通过设置handleInvalid选择保留还是删除数据集中的NaN值。
* 如果用户选择保留NaN值,则将对其进行特殊处理并将其放入自己的存储桶中,
* 例如,如果使用4个存储桶,则将非NaN数据放入存储桶[0-3]中,但NaN将被存储放在一个特殊的桶中[4]。
*
* 算法:分箱范围是使用近似算法选择的(有关详细说明,请参见aboutQuantile的文档)。
* 可以使用relativeError参数控制近似精度。设置为零时,将计算精确的分位数(注意:计算精确的分位数是一项昂贵的操作)。
* 分箱的上下边界将是-Infinity和+ Infinity,覆盖所有实数值。
*
**/
object Ex_QuantileDiscretizer {
def main(args: Array[String]): Unit = {
val conf: SparkConf = new SparkConf(true).setMaster("local[2]").setAppName("spark ml")
val spark = SparkSession.builder().config(conf).getOrCreate() val data = Array((0, 18.0), (1, 19.0), (2, 8.0), (3, 5.0), (4, 2.2))
val df = spark.createDataFrame(data).toDF("id", "hour") val discretizer = new QuantileDiscretizer()
.setInputCol("hour")
.setOutputCol("result")
.setNumBuckets(3) val result = discretizer.fit(df).transform(df)
result.show(false) spark.stop()
}
} +---+----+------+
|id |hour|result|
+---+----+------+
|0  |18.0|2.0   |
|1  |19.0|2.0   |
|2  |8.0 |1.0   |
|3  |5.0 |1.0   |
|4  |2.2 |0.0   |
+---+----+------+

最新文章

  1. iPhone系列设备媒体查询:
  2. [HDOJ5451]Best Solver(乱搞)
  3. AS技巧合集「编码技巧篇」
  4. CDN——到底用还是不用?
  5. jsoup Cookbook(中文版)--爬虫(java)
  6. Spring源码解析——如何阅读源码(转)
  7. Spring、Spring MVC、MyBatis
  8. 音乐TV2015校园招聘A第二大发行量(对中国科学院大学站)
  9. ADO.NET 参数化查询
  10. windows系统局域网内开启远程桌面图解
  11. 4本相见恨晚的Linux入门书籍
  12. 比较Fink, macports 跟 homebrew
  13. 2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析
  14. JSON和JSONP,浅析JSONP解决AJAX跨域问题
  15. qml: 多级窗口visible现象;
  16. 如何在github上搭建网站?
  17. bootcdn
  18. MySQL统计信息以及执行计划预估方式初探
  19. 【c#】6.0与7.0新特性介绍记录
  20. IDEA Maven Jetty Jrebel 热部署

热门文章

  1. BUUCTF-Web Comment
  2. 计划工程师dadafksjh
  3. PHPSTORM常用插件
  4. jmeter变量的声明和使用
  5. PHP 获取图像宽度与高度
  6. 7.9 NOI模拟赛 C.走路 背包 dp 特异性
  7. day6. while双项循环及for循环
  8. 好用的连接池-HikariCP
  9. Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependen
  10. swift 5.0 创建button方法