我正在使用PCA将矩阵m * n减少到矩阵m * 2.
我正在使用apache spark site内的片段进入我的项目,它的工作原理.
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选择哪些列作为主要组件.
是否有任何库函数可以做到这一点?
UPDATE
如果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选择的哪些列作为主要成分,从原始数据中还原?
提前致谢.
最佳答案 矩阵pc包含主要组件作为其列.根据文件:
Rows correspond to observations and columns correspond to variables. The principal components are stored a local matrix of size n-by-k. Each column corresponds for one principal component, and the columns are in descending order of component variance.
因此,您可以通过执行来查看第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列)的标量积.