Я следую этому примеру здесь: https://machinelearningmastery.com/calculate-principal-component-analysis-scratch-python/
A = array([[1, 2], [3, 4], [5, 6]])
print(A)
# calculate the mean of each column
M = mean(A.T, axis=1)
print(M)
# center columns by subtracting column means
C = A - M
print(C)
# calculate covariance matrix of centered matrix
V = cov(C.T)
print(V)
# eigendecomposition of covariance matrix
values, vectors = eig(V)
print(vectors)
print(values)
# project data
P = vectors.T.dot(C.T)
print(P.T)
, что дает:
original data
[[1 2]
[3 4]
[5 6]]
column mean
[ 3. 4.]
centered matrix
[[-2. -2.]
[ 0. 0.]
[ 2. 2.]]
covariance matrix
[[ 4. 4.]
[ 4. 4.]]
vectors
[[ 0.70710678 -0.70710678]
[ 0.70710678 0.70710678]]
values
[ 8. 0.]
projected data
[[-2.82842712 0. ]
[ 0. 0. ]
[ 2.82842712 0. ]]
Если я хочу найти первое основное направление, я просто беру собственное значение, которое соответствует наибольшему собственному вектору? Следовательно: [0.70710678, 0.70710678]
?
Основываясь на этом, является ли первый главный компонент самым высоким собственным вектором, спроецированным на данные? Что-то вроде:
vectors[:,:1].T.dot(C.T)
, что дает:
array([[-2.82842712, 0. , 2.82842712]])
Я просто боюсь, что перепутал терминологию, или я упрощаю вещи. Заранее спасибо!