我在 Julia 包MultivariateStats.jl 中使用PCA。我正在尝试将旧的 Matlab 脚本转换为 Julia。但是,我不能再运行 Matlab 脚本了。我正在处理一系列图像。首先,我想确保输入矩阵正确。我将每个图像重新塑造为向量并将图像放入矩阵。我认为这些数据的格式是正确的,与 Matlab 相同。然后我生成了一个 PCA 模型。Matlab 会返回. 我如何在 Julia 中获得这些? nm x nM = fit(PCA, data)[coeff,score,latent]
上的数据矩阵A PCA X的m行和n预测仅是一个SVD上X,其定义为X = USV”。您可以使用 Julia 调用基于矩阵U、S和V重建这三个对象U, S, V = svd(X)。
如果我正确理解了MATLAB PCA 文档,那么
score是Ulatent是Scoeff是VS和一个恢复数据X = score * coeff'。
请注意,如果您调用svdPCA,那么 Julia 的svd函数将S作为向量返回,而在 Matlab 中则作为方阵svd返回S。X在 Julia 中重建时,调用是X = U * Diagonal(S) * V',而在 Matlab 中,您可以简单地编写X = U * S * V'. 因为pca在 Matlab 中,latent是一个向量。
不要忘记先将矩阵居中。假设你有足够的内存,然后Y = broadcast(-, X, mean(X,1))创建一个居中的X. 然后您可以运行U, S, V = svd(Y).
当然,这是假定你的预测是列的X。数学家就是这么想的。统计人员经常把预测作为行的X。Julia 中的 PCA 调用假定行对应于预测变量。在这种情况下,U和V矩阵被反转,并且必须X沿其行居中Y = broadcast(-, X, mean(X,2))。