Разница в PCA с Scikit-Learn и SVD - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над примером PCA с Scikit-Learn и SVD в следующем наборе данных.Однако я подумал, что должен получить одинаковые компоненты PCA с обоими методами в конце, но я обнаружил, что знаки поменялись местами.Я следил за разными ресурсами, но правильно предполагаю.Не совсем понял, зачем получаю этот знак разворота.Ниже то, что я сделал.Xpca и Xsvd должны быть одинаковыми, как я думал.

Полезные ссылки 1 , 2

import pandas as pd
data = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", header=None)
data.columns = ["V"+str(i) for i in range(1, len(data.columns)+1)]  # rename column names to be similar to R naming convention
data.V1 = data.V1.astype(str)
X = data.loc[:, "V2":]  # independent variables data
y = data.V1  # dependent variable data

# Using Scikit-Learn

from sklearn.preprocessing import scale
from sklearn.decomposition import PCA

standardisedX = scale(X)
standardisedX = pd.DataFrame(standardisedX, index=X.index, columns=X.columns)

pca = PCA().fit(standardisedX)
Xpca = pd.DataFrame(pca.transform(standardisedX))

# Using SVD

U, S, V = np.linalg.svd(standardisedX, full_matrices=False, compute_uv=True)
Xsvd = pd.DataFrame(U.dot(np.diag(S)))

...