I’m implementing my own version of PCA and comparing it with scikit-learn's PCA. However, I’m noticing a discrepancy in the signs of the principal components. Using scikit-learn scaler = StandardScaler() scaled_data = scaler.fit_transform(data) pca_scaled = PCA(n_components=2) pca_scaled.fit(scaled_data) principal_components = pca_scaled.components_ Output: [[ 0.70710678 0.70710678] [-0.70710678 0.70710678]] Custom PCA def custom_PCA(data, num_components): mean = np.mean(data, axis=0) std = np.std(data, axis=0) X_standardized = (data - mean) / std cov_matrix = np.cov(X_standardized, rowvar=False) eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) return eigenvectors Output: [[ 0.70710678 -0.70710678] [ 0.70710678 0.70710678]] Why the signs are flipped? scikit-learn: [[ 0.70710678 0.70710678] [-0.70710678 0.70710678]] Custom PCA: [[ 0.70710678 -0.70710678] [ 0.70710678 0.70710678]] Continue reading...