美文网首页
Spark -- 数据的特征缩放

Spark -- 数据的特征缩放

作者: k_wzzc | 来源:发表于2018-12-06 14:07 被阅读0次

Spark -- 数据的特征缩放(Feature scaling)

特征缩放:有的叫数据归一化,有的叫数据标准化,其实两者有着一些差别,但是大多数时候都是表达的一个意思,它的目的就是使数据缩小范围。具体的介绍请参照维基百科。

spark中就提供了常用的这几种特征缩放方法

  • Normalizer
  • StandardScaler
  • MinMaxScaler
  • MaxAbsScaler
 // 使用 StandardScaler 标准化:  计算公式  X'=(Xi-u)/δ
  val scaler = new StandardScaler()
      .setInputCol("features")  .setOutputCol("scaledfts")
      .setWithStd(true)  .setWithMean(true)

      
// 创建一个 dataframe
    val dataFrame = spark.createDataFrame(Seq(
      (0, Vectors.dense(1.0, 0.5, -1.0)),
      (1, Vectors.dense(2.0, 1.0, 1.0)),
      (2, Vectors.dense(4.0, 10.0, 2.0))
    )).toDF("id", "features")

    dataFrame.printSchema()

  val scalerModel = scaler.fit(dataFrame)
    val scaledData = scalerModel.transform(dataFrame)
    scaledData.show(truncate = false)

spark提供的方法要求输入的数据类型是 Vector格式

root
 |-- id: integer (nullable = false)
 |-- features: vector (nullable = true)
结果查看
+---+--------------+--------------------------------------------------------------+
|id |features      |scaledfts                                                     |
+---+--------------+--------------------------------------------------------------+
|0  |[1.0,0.5,-1.0]|[-0.8728715609439696,-0.6234796863885498,-1.0910894511799618] |
|1  |[2.0,1.0,1.0] |[-0.21821789023599245,-0.5299577334302673,0.21821789023599242]|
|2  |[4.0,10.0,2.0]|[1.0910894511799618,1.1534374198188169,0.8728715609439697]    |
+---+--------------+--------------------------------------------------------------+

很多时候我们拿到的数据的特征不是向量形式。因此在做标准化之前需要将各个特征合并转化成向量。可以有两种方式解决 (本案例以鸢尾花数据集为例)

方法一 spark提供的API

  val iris = spark.read.option("header", true)
      .option("inferSchema", true)
      .csv("F:/DataSource/iris.csv")

  val fts = Array("sepalLength", "sepalWidth", "petalLength", "petalWidth")
    
    // 将多个列合并成向量列的特性转换器
  val amountVectorAssembler: VectorAssembler = new VectorAssembler()
      .setInputCols(fts)
      .setOutputCol("features")
      

    val df1 = amountVectorAssembler.transform(iris)
      .select($"class", $"features")
      
    scaler.fit(df1).transform(df1).show(3 )

方法二 自定义函数

  // 自定义函数合并列并转化为向量
   val vectorUdf = udf((fts: Seq[Double]) => {
     Vectors.dense(fts.toArray)
   })

   val df2 = iris.withColumn("features",
     vectorUdf(array("sepalLength", "sepalWidth", "petalLength", "petalWidth")))
     .select($"class",$"features")

   scaler.fit(df2).transform(df2).show(3)
   
两个方法的结果是一致的
+-----------+-----------------+--------------------+
|      class|         features|           scaledfts|
+-----------+-----------------+--------------------+
|Iris-setosa|[5.1,3.5,1.4,0.2]|[-0.8976738791967...|
|Iris-setosa|[4.9,3.0,1.4,0.2]|[-1.1392004834649...|
|Iris-setosa|[4.7,3.2,1.3,0.2]|[-1.3807270877331...|
+-----------+-----------------+--------------------+

剩下的几种方式就不再一一介绍,用法基本一致,具体的使用方法,适用范围以及计算方法可以参照spark官方提供的文档以及代码;也可以查看相关资料了解更详细的信息。

相关文章

  • Spark -- 数据的特征缩放

    Spark -- 数据的特征缩放(Feature scaling) 特征缩放:有的叫数据归一化,有的叫数据标准化,...

  • 梯度下降算法中的优化途径

    特征缩放: 特征缩放:特征缩放是用来标准化数据特征的范围。 特征缩放还可以使机器学习算法工作的更好。比如在K近邻算...

  • 实现特征缩放/归一化和标准化

    什么是特征缩放 特征缩放是用来标准化数据特征的范围 机器学习为什么需要特征缩放 在处理多维特征问题的时候,需要保证...

  • 决策树-Python

    1、特征缩放与欧氏距离 决策树算法没有用到过欧氏距离,不需要做特征缩放,用原本的数据判断,会更好的反应数据的特征。...

  • 主要成分分析算法(Principal Component Ana

    预处理数据,均值化,特征缩放: 计算协方差:

  • 机器学习笔记(18):特征缩放

    本文来自之前在Udacity上自学机器学习的系列笔记。这是第18篇,介绍了数据前处理的方法—特征缩放。 特征缩放(...

  • 金融风控之贷款违约预测挑战赛 Task3

    1、导入数据 略 2、查看数据 略 3、特征工程 补充部分之前常用的特征缩放是StandardScaler,搜了一...

  • 逻辑回归

    逻辑回归(Linear Regression) 第1步:数据预处理 导入库 导入数据集 这里 获取数据集 特征缩放...

  • Feature Scaling-特征缩放

    特征缩放 机器学习项目中,我们需要应用于数据的最重要的转换之一是特征缩放。除了少数例外,当输入数字属性具有非常不同...

  • 决策树-R

    1、特征缩放 特征缩放是为了图形可视化的方便,决策树没有用到欧式距离不需要特征缩放 2、代码 关键代码:libra...

网友评论

      本文标题:Spark -- 数据的特征缩放

      本文链接:https://www.haomeiwen.com/subject/vxcocqtx.html