spark sql 类型转换array_Spark 机器学习算法Binarizer代码实战及源码剖析

一.概述

  Binarizer二值化器是将数字特征阈值化为二进制(0/1)特征的过程。Binarizer采用通用参数inputCol和outputCol,以及threshold【默认值0.0】 用于二值化。

  对于二值化器而言,最好前面承接的是包含正负数的数据,因为对于二值化器而言,只要是大于0.0【当然可以使用setThreshold重置阈值】的数据都会被转换为1.0,因此这对于全是正数或全是负数的数据来说是没有意义的。重置阈值可以改变判断规则,进而可以承接像归一化之类的数据,二值化器主要应用于把离散数据转换为分类数据,进而作为分类算法的前置数据,对于多分类数据,可以多次使用二值化器进行逐次拆分,生成多分类数据。

二.代码实现

object BinarizerAnalyse {  /**    * 设置日志级别    */  Logger.getLogger("org").setLevel(Level.WARN)  def main(args: Array[String]) {    val spark = SparkSession.builder().appName(s"${this.getClass.getSimpleName}")      .master("local[2]")      .getOrCreate()    val data = Array((0, 0.1), (1, 0.8), (2, 1.2), (3, 13.14))    val dataFrame = spark.createDataFrame(data).toDF("id", "feature")    val binarizer : Binarizer = new Binarizer()      .setInputCol("feature")      .setOutputCol("binarized")    val binarizedDataFrame = binarizer.transform(dataFrame)    println(s"默认阈值 :${binarizer.getThreshold}")    binarizedDataFrame.show()    /**      * 重置阈值      */    val binarizer2 : Binarizer = new Binarizer()      .setInputCol("feature")      .setOutputCol("binarized")      .setThreshold(0.8)    val binarizedDataFrame2 = binarizer2.transform(dataFrame)    println(s"新阈值 :${binarizer2.getThreshold}")    binarizedDataFrame2.show()  }}

三.执行结果

02a3c2a83b46429cb9e887bac9427187.png

四.源码剖析

9383a0c0f2163d92ff3ad5f7075469d9.png

  从源码中可以看出,threshold默认设置为0.0,大于阈值的特征值将转化为1.0;等于或小于阈值的值将转化为0.0。使用setThreshold(value)和getThreshold()函数分别设置和获取阈值。

6a8fb4508cdf34567cdf6936b5fcb177.png

  Binarizer支持支持Vector和Double类型数据。根据类型的不同分别定义binarizerDouble和binarizerVector两个自定义函数,函数的逻辑比较简单,最后使用模式匹配实现类型转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值