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 не дают одинаковых результатов. Так что-то мне не хватает, но что?

0 ответов

Другие вопросы по тегам