내가 뭔가를 오해하고 있습니까? 이것은 내 코드입니다
sklearn을 사용하여
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import decomposition
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
pca = decomposition.PCA(n_components=3)
x = np.array([
[0.387,4878, 5.42],
[0.723,12104,5.25],
[1,12756,5.52],
[1.524,6787,3.94],
])
pca.fit_transform(x)
산출:
array([[ -4.25324997e+03, -8.41288672e-01, -8.37858943e-03],
[ 2.97275001e+03, -1.25977271e-01, 1.82476780e-01],
[ 3.62475003e+03, -1.56843494e-01, -1.65224286e-01],
[ -2.34425007e+03, 1.12410944e+00, -8.87390454e-03]])
numpy 메소드 사용
x_std = StandardScaler().fit_transform(x)
cov = np.cov(x_std.T)
ev , eig = np.linalg.eig(cov)
a = eig.dot(x_std.T)
산출
array([[ 0.06406894, 0.94063993, -1.62373172],
[-0.35357757, 0.7509653 , 0.63365168],
[ 0.29312477, 0.6710958 , 1.11766206],
[-0.00361615, -2.36270102, -0.12758202]])
I have kept all 3 components but it doesnt seem to allow me to retain my original data.
왜 그런지 알 수 있습니까?
원래의 매트릭스를 되 찾으려면 어떻게해야합니까?
ipython 노트북을 사용하고 있으므로 셀로만 복사 할 수 있습니다. 내 수학이 틀렸어? @ Anony-Mousse
—
aceminer
@ Anony-Mousse 네, 내 실수를 깨달았지만 여전히 일치하지 않습니다
—
aceminer
@aceminer 왜 x_std가 아닌 x_std.T의 공분산 행렬을 계산하는지 궁금합니다.
—
Evgeni Nabokov
@EvgeniNabokov 너무 오래되었습니다. Sry 나는 이미 기억할 수 없다
—
aceminer
X
정의되지 않은 코드를 사용합니다 ). 수학을 다시 확인하십시오 .