Spark PCA

1、概念

主成分分析(PCA)

特征抽取通常用于提高计算效率,降低维度灾难。 主成分分析(PCA)是一种用于探索高维数据结构的技术。PCA可以把具有相关性的高维变量合成线性无关的低维变量。新的低维数据集尽可能保留原始数据的变量。 

当数据集不同维度上的方差分布不均匀的时候,PCA最有用。(如果是一个球壳型数据集,PCA不能有效的发挥作用,因为各个方向上的方差基本相等。若一个维度没有丢失大量的信息的话,该维度一定不能忽略。)


主成分分析(Principal component analysis,PCA): 是一种广泛应用于不同领域的无监督线性数据转换技术,作用是降维。

常用领域:信号去噪、生物信息学领域的基因组和基因表达水平数据分析

PCA可以基于特征之间的关系识别出数据内在模式

PCA的目标:在高维数据中找到最大方差的方向,并将数据映射到一个维度不大于原始数据的新的子空间上。
原理解释

所谓的主成分分析,不过是在高维的空间中寻找一个低维的正交坐标系,比如说在三维空间中寻找一个二维的直角坐标系。那么这个二维的直角坐标系就会构成一个平面,将三维空间中的各个点在这个二维平面上做投影,就得到了各个点在二维空间中的一个表示,由此数据点就从三维降成了二维。

这个过程的关键在于,我们如何选取这个低维的坐标系,即坐标系原点在哪?各个轴朝哪个方向?一个原则就是使得各个点到到这个平面的距离平方和达到最小。由此,通过简单地数学推导,就能得到原点的表达公式和坐标系的各个基向量的表达公式。

2、code

package com.home.spark.ml

import org.apache.spark.SparkConf
import org.apache.spark.ml.feature.PCA
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSession

/**
  * @Description: TODO
  * PCA是一种统计过程,它使用正交变换将一组可能相关的变量的观测值转换为一组线性不相关的变量值(称为主成分)。
  * PCA类训练模型以使用PCA将向量投影到低维空间。
  * 下面的示例显示了如何将5维特征向量投影到3维主成分中。
  **/
object Ex_pca {
  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(
      Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),
      Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
      Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0)
    )
    val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")

    val pca = new PCA().setInputCol("features").setOutputCol("pcaFeatures")
      .setK(3)
    val model = pca.fit(df)
    val result = model.transform(df)

    result.show(false)
    spark.stop()
  }
}
原文地址:https://www.cnblogs.com/asker009/p/12197685.html