PCA через ковариационную матрицу и PCA через SVD в python - как получить равные результаты
Я хочу выполнить PCA и мой набор данных
XT.shape
->(2500,260)
Строки комплекса X содержат выборки (2500), столбцы X содержат переменные (260). Я выполняю SVD так: (Python)
u, s, vh = np.linalg.svd(XT)
proj_0 = np.dot(XT,vh)[:,0]
Думаю, это даст мне проекцию моих данных на первый принципиальный компонент. Однако, если я делаю PCA, используя ковариационную матрицу:
cov = np.cov(XT, rowvar=False)
eVals, eVecs = np.linalg.eigh(cov)
# Sort eigenvalues in decreasing order and eigenvectors alike
idx = np.argsort(np.abs(eVals))[::-1]
eVals = eVals[idx]
eVecs = eVecs[:,idx]
# Project data on eigenvectors
PCA_0 = np.dot(eVecs.T, XT.T).T[:,0]
Тогда PCA_0 и proj_0 не дают одинаковых результатов. Так что-то мне не хватает, но что?