【问题标题】:Getting old data back after executing PCA using SPARK使用 SPARK 执行 PCA 后取回旧数据
【发布时间】:2015-10-27 19:10:09
【问题描述】:

我正在使用PCA 将矩阵m*n 简化为矩阵m*2

我在我的项目中使用apache spark site 中的 sn-p,它可以工作。

import org.apache.spark.mllib.linalg.Matrix
import org.apache.spark.mllib.linalg.distributed.RowMatrix

val mat: RowMatrix = ...

    // Compute the top 2 principal components.
    val pc: Matrix = mat.computePrincipalComponents(2) // Principal components are stored in a local dense matrix.

    // Project the rows to the linear space spanned by the top 2 principal components.
    val projected: RowMatrix = mat.multiply(pc)

我还没有看到API 内部是否有获取旧数据的方法。 为了了解 PCA 选择了哪些列作为主成分。

是否有任何库函数可以做到这一点?

更新

如果 PCA 算法选择并转换了我的两列数据,我想知道如何验证此转换涉及的旧数据的哪些列?

示例

多维矩阵:

0 0 0 2 4 
2 4 9 1 3 
3 9 3 2 7 
9 6 0 7 7

在 PCA 算法减少 2 维之后,我会得到这个:

-1.4 3  
2 -4.0 
3 -2.9  
-0.9 6

也就是说,我如何了解 PCA 从原始数据中选择了哪些列 ,as principal components, 进行缩减?

提前致谢。

【问题讨论】:

    标签: algorithm scala apache-spark pca


    【解决方案1】:

    矩阵pc 包含作为其列的主成分。根据文档:

    行对应于观察值,列对应于变量。主成分存储在一个大小为 n×k 的局部矩阵中。每列对应一个主成分,各列按成分方差的降序排列。

    因此,您可以通过执行查看第 i

    val pc: Matrix = ...
    val i: Int = ...
    
    for(row <- 0 until pc.numRows) {
      println(pc(row, i))
    }
    

    更新

    如果你有输入矩阵mat =

    0 0 0 2 4 
    2 4 9 1 3 
    3 9 3 2 7 
    9 6 0 7 7
    

    如果每一行构成一个示例,每一列是一个变量,那么您可以计算 PCA。方差最大的两个主成分是pc =

    0.6072    0.2049
    0.3466    0.6626
    -0.4674    0.7098
    0.4343   -0.1024
    0.3225    0.0689
    

    每一列构成投影方向,以获得降维数据的单维。为了获得现在你计算的降维数据mat * pc,这给了你

    2.1588    0.0706
    -0.2041    9.5523
    6.6652    8.9843
    12.8425    5.5844
    

    这是您的数据在低维向量空间中投影时的样子。这里每行代表一个示例,每列代表一个变量。

    如果我正确理解了您的问题,那么您正在寻找矩阵 pc 的列,它告诉您每个原始维度对投影维度的贡献程度。投影只是原始数据与投影方向的标量积(pc 的列)。

    【讨论】:

    • 问题不是如何检索主成分,而是它们如何与旧数据相关联。例如。 if PCA selected for me column 5 , i want to retrieve the old data which it refer,你明白吗?
    • 那我不太明白你的问题。 PCA 为您做的是计算一个矩阵pc,其列包含具有最大方差的投影方向。您的旧数据仍存储在mat 中。只有将matpc 相乘,从而投影您的数据,您才能获得原始数据的降维表示。那么,您想在什么时候检索旧数据?
    • pc 的列会告诉你。但不一定选择 X1 或 X2。它也可能是它们两者的组合,因此是投影。这能回答你的问题吗?
    • @TillRohrmann 我认为这就是 OP 的误解,我对他的理解是 PCA 只是采用 k 维度并呈现它们
    • @MateuszDymczyk,感谢您的澄清 :-) 如果是这种情况,那么我可以推荐 en.wikipedia.org/wiki/Principal_component_analysis 上的优秀 PCA 文章。这应该让事情变得清晰。
    猜你喜欢
    • 2013-11-28
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多