Получение первого основного компонента и уменьшение дисперсии с PCA с использованием Numpy - PullRequest
0 голосов
/ 21 апреля 2020

Я следую этому примеру здесь: 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]]) 

Я просто боюсь, что перепутал терминологию, или я упрощаю вещи. Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...