• Spark StandardScaler 特征标准化


    1、概念

    zscore规范化,又叫零均值规范化 
    将某个特征向量(由所有样本某一个特征组成的向量)进行标准化,使数据均值为0,方差为1。Spark中可以选择是带或者不带均值和方差。

    StandardScaler转换Vector行的数据集,将每个要素归一化以具有单位标准差(和/或)零均值。它带有参数: withStd:默认为True。将数据缩放到单位标准偏差,将方差缩放到1。 withMean:默认为False。在缩放之前,将数据以均值居中。它将生成密集的输出,因此在应用于稀疏输入时要小心。
    将均值移到0,注意对于稀疏输入矩阵不可以用。默认为false StandardScaler是一个Estimator,可以适合数据集以生成StandardScalerModel。这相当于计算摘要统计信息。然后,该模型可以将数据集中的Vector列转换为具有单位标准差和/或零均值特征。 请注意,如果要素的标准偏差为零,它将在向量中返回该要素的默认0.0值。
    对于同一个特征,不同的样本中的取值可能会相差非常大,一些异常小或异常大的数据会误导模型的正确训练;另外,如果数据的分布很分散也会影响训练结果。以上两种方式都体现在方差会非常大。
    此时,我们可以将特征中的值进行标准差标准化,即转换为均值为0,方差为1的正态分布。如果特征非常稀疏,并且有大量的0(现实应用中很多特征都具有这个特点),Z-score 标准化的过程几乎就是一个除0的过程,结果不可预料。
    所以在训练模型之前,一定要对特征的数据分布进行探索,并考虑是否有必要将数据进行标准化。基于特征值的均值(mean)和标准差(standard deviation)进行数据的标准化。
    它的计算公式为:标准化数据=(原数据-均值)/标准差。标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

    2、code

    package com.home.spark.ml
    
    import org.apache.spark.SparkConf
    import org.apache.spark.ml.feature.StandardScaler
    import org.apache.spark.sql.SparkSession
    
    /**
      * @Description: 通过删除平均值并使用列摘要对训练集中的样本进行统计,将其缩放为单位方差来标准化功能
      **/
    object Ex_StandardScaler {
      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 = spark.read.format("libsvm").load("input/sample_libsvm_data.txt")
    
        val scaler = new StandardScaler().setInputCol("features").setOutputCol("scaledFeatures")
          .setWithStd(true).setWithMean(false)
    
        // Compute summary statistics by fitting the StandardScaler.
        val scalerModel = scaler.fit(data)
    
        // Normalize each feature to have unit standard deviation.
        val result = scalerModel.transform(data)
    
        result.show()
        
        spark.stop()
      }
    
    }
  • 相关阅读:
    sql DATEDIFF 函数
    电控宝 命令
    dart 函数练习
    json对象和json字符串有啥区别啊
    windows 下 node 入门
    windows 下Nginx 入门
    SQL十进制和十六进制相互转换
    Action向视图传值的6种方式(转)
    从匿名方法到 Lambda 表达式的推演过程
    vue 入门1 组件管理
  • 原文地址:https://www.cnblogs.com/asker009/p/12202142.html
Copyright © 2020-2023  润新知