无法理解Spark(Scala)中的MLlib PCA输出
我尝试使用Spark MLlib RowMatrix库在小样本数据集上运行PCA,得到的矩阵输出与使用其他程序(Excel和Weka)运行PCA时不同。我正在使用的代码:无法理解Spark(Scala)中的MLlib PCA输出,scala,apache-spark,machine-learning,apache-spark-mllib,Scala,Apache Spark,Machine Learning,Apache Spark Mllib,我尝试使用Spark MLlib RowMatrix库在小样本数据集上运行PCA,得到的矩阵输出与使用其他程序(Excel和Weka)运行PCA时不同。我正在使用的代码: val rows = textFile.map { line => val values = line.split(",").map(_.toDouble) Vectors.dense(values) val mat = new RowMatrix(rows) val pc: Matrix = mat.computeP
val rows = textFile.map { line =>
val values = line.split(",").map(_.toDouble)
Vectors.dense(values)
val mat = new RowMatrix(rows)
val pc: Matrix = mat.computePrincipalComponents(mat.numCols().toInt)
val c = mat.multiply(pc)
println(pc)
以下是输入数据集(文本文件):
以及输出:
-0.690617646131419 -0.42474982540272854 0.585350196610755
-0.04140208648197004 -0.7848198589261455 -0.6183394345099498
0.7220340255741673 -0.4512708442338108 0.5244249146042417
但是,在excel/weka上运行PCA时的输出是:
0.717 -0.081 0.692
0.191 -0.932 -0.308
-0.67 -0.353 0.653
我相信这两种情况下的输出都与原始数据集的每一列对新主成分列的贡献有关(我知道我可以将这些成分乘以原始数据,得到沿新主成分轴的投影),但是我不确定为什么在使用不同的平台执行PCA时输出不同
有人能解释为什么Spark会产生不同的PCA输出矩阵吗?此外,是否有任何方法将此输出矩阵转换为特征向量/值
谢谢提示:特征向量不是唯一的。
0.717 -0.081 0.692
0.191 -0.932 -0.308
-0.67 -0.353 0.653