2017-08-24 69 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,並且它們在分解之前居中數據,但它仍然是相同的函數。 –