【问题标题】:What do the differences mean between pyspark SVD Eigenvectors vs. PCA Eigenvectors?pyspark SVD 特征向量与 PCA 特征向量之间的差异是什么意思?
【发布时间】:2019-09-24 11:05:09
【问题描述】:

我在 (pyspark) mllib (Spark 2.2.0) 中使用 SVD 和 PCA 函数,如以下链接所述:https://spark.apache.org/docs/2.2.0/mllib-dimensionality-reduction.html

假设给定以下数据对象:

[(2, 2), (3, 1), (2, 2), (1, 3), (1.0, 1.0), (3.0, 3.0)]

应用computeSVD() 函数产生:

对于你: [DenseVector([-0.3922, -0.0]), DenseVector([-0.3922, -0.7071]), DenseVector([-0.3922, -0.0]), DenseVector([-0.3922, 0.7071]), DenseVector([-0.1961, -0.0]), DenseVector([-0.5883, -0.0])]

和局部密集矩阵V:

[[-0.70710678 -0.70710678]
 [-0.70710678  0.70710678]]

此时有一个问题:spark 中的特征向量实际上是什么?他们是U还是V?

现在与应用computePrincipalComponents() 的对比: 这产生:

DenseMatrix([[1., 0.],
            [0., 1.]])

根据 spark 文档,声明“主成分存储在局部密集矩阵中”。因此,PCA 的结果应该产生特征向量,但为什么它们与 SVD 的局部密集矩阵 V 的特征向量不同?他们最终被规范了吗?

提前感谢您对此问题的任何详细说明。

【问题讨论】:

    标签: pyspark pca svd


    【解决方案1】:

    对数据集执行computeSVD() 后的特征向量(密集矩阵V)表示一个向量[2x2 矩阵],它是数据集线性分解的标量倍数。

    SVD 找到使您的数据解释的方差最大化的恒等向量,而PCA 试图找到一组作为轴的正交向量(跨越任意 N功能),允许您的数据在二维中建模(由导致最大方差的一组轴确定,由SVD 解释)。

    这就是您的SVD 输出身份向量的原因:

    [[-0.70710678 -0.70710678]
     [-0.70710678  0.70710678]]
    

    computePrincipalComponents() 会产生以下向量[1,0][0,1],它们恰好与自然发生的X 轴和Y 轴重合。

    关于SVD 之间的关系以及它与PCA 之间的关系有很多文献,以及为什么SVD 是由于计算乘积导致舍入不准确而保持数据完整性的更稳定的解决方案通过其转置矩阵 (X*X⊤) 对您的数据集进行分析,但您最好使用下面列出的{math|stats}.stackexchange 上的许多高度赞成的帖子。

    有用的相关问题:

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2015-06-30
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多