2017-08-24 107 views

回答

1

你可以使用numpy.linalg.svd这些矩阵如下:

a=np.array([[1,2,3],[4,5,6],[7,8,9]]) 
U, S, V = np.linalg.svd(a, full_matrices=True) 

S是一个1D数组,表示在Sigma对角线项。 UV是来自分解的对应矩阵。请注意,当您使用PCA时,数据会在应用svd之前居中(与numpy.linalg.svd不同,其中svd直接应用于矩阵本身,请参见第409-410行here行)。

+0

当数据有噪音时,这与PCA等效吗? ''np.linalg.svd'只会抛出一个异常,而'PCA'估计器仍然会运行? – Dims

+1

我不明白为什么它应该是等效的。 GitHub中的PCA代码也使用numpy.linalg.svd(这在我在答案中提供的链接中显示)。唯一的区别是在PCA代码中它们使用full_matrices = False,并且它们在分解之前居中数据,但它仍然是相同的函数。 –