我的数据集是一个 60x10 矩阵。在通过减去每列的平均值来调整原始数据集后,我使用 matlab 使用 princomp(AdjustedData) 对该矩阵进行了主成分分析。因为我希望获得由前五个主成分描述的数据集,所以我选择了 COEFF 输出中的前五个向量作为我的特征向量。我首先将行特征向量(每行向量,5x10)乘以我的行调整数据矩阵(每行不同维度的转置调整数据矩阵,10x60)以获得所谓的最终数据。
FinalData (5x60)=Row feature vector(5x10) * row AdjustedData(10x60)
然后,我将转置的行特征向量 (10x5) 乘以 FinalData(5x60) 以获得与转置的原始数据集相同维度的矩阵。
TransOriginalAdjustedData(10x60)=TransposedRowFeatureVector(10x5)*FinalData(5x60) 最后,我转置输出矩阵并将每列的平均值加回去以检索最终的原始矩阵(PCA 数据,我认为只有 5 个主成分描述的数据集) 我想与我的原始数据集进行比较。
PCA data=OriginalAdjustedData(60x10)+ original column mean
我将原始数据集和 PCA 数据集的数据点之间的平方差相加,然后取和的平方根。结果约为 0.022。
但是,如果我将原始数据矩阵转置为 10x60 而不是 60x10,并执行相同的程序,则结果仅为 0.015。如果我转置原始矩阵,我知道在执行 PCA 时矩阵的维度会发生变化,但我无法弄清楚是什么导致了两者之间的巨大差异。我的数据集中的变量没有定义,所以我认为任何一种方式都应该是一样的。
我的程序基于这个 PCA 教程:http ://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf
谁能帮我解决这个问题?非常感谢。