Wednesday, August 24, 2022

Calculate Principal Component Analysis (PCA) in Python

 В NumPy нет функции pca(), но мы можем легко рассчитать анализ основных компонентов шаг за шагом, используя функции NumPy.

В приведенном ниже примере определяется небольшая матрица 3 × 2, центрируются данные в матрице, вычисляется ковариационная матрица центрированных данных, а затем собственное разложение ковариационной матрицы. Собственные векторы и собственные значения берутся как главные компоненты и сингулярные значения и используются для проецирования исходных данных.

(.env) boris@boris-All-Series:~/MATRIXPCA$ cat matrixPCA2.py

from numpy import array

from numpy import mean

from numpy import cov

from numpy.linalg import eig


# Define a matrix

A = array([[4, 5], [6, 7], [8, 9]])

print("Defined a matrix = ","\n",A)


# calculate the mean of each column

M = mean(A.T, axis=1)

print("Calculate the mean of each column = ",M)


# center columns by subtracting column means

C = A - M

print("Center columns by subtracting column means = ","\n",C)


# calculate covariance matrix of centered matrix

V = cov(C.T)

print("Covariance matrix of centered matrix = ","\n",V)


# eigendecomposition of covariance matrix

values, vectors = eig(V)

print("Vectors = ","\n",vectors)

print("Values = ", values)


# project data

P = vectors.T.dot(C.T)

print("Project data = ","\n",P.T)

(.env) boris@boris-All-Series:~/MATRIXPCA$ python3 matrixPCA2.py

Defined a matrix =  

 [[4 5]

 [6 7]

 [8 9]]

Calculate the mean of each column =  [6. 7.]

Center columns by subtracting column means =  

 [[-2. -2.]

 [ 0.  0.]

 [ 2.  2.]]

Covariance matrix of centered matrix =  

 [[4. 4.]

 [4. 4.]]

Vectors =  

 [[ 0.70710678 -0.70710678]

 [ 0.70710678  0.70710678]]

Values =  [8. 0.]

Project data =  

 [[-2.82842712  0.        ]

 [ 0.          0.        ]

 [ 2.82842712  0.        ]]









Мы можем рассчитать анализ основных компонентов для набора данных, используя класс PCA() в библиотеке scikit-learn. Преимущество этого подхода заключается в том, что после расчета прогноза его можно довольно легко применять к новым данным снова и снова.
При создании класса в качестве параметра можно указать количество компонентов.Сначала класс подгоняется к набору данных, вызывая функцию fit(), а затем исходный набор данных или другие данные можно спроецировать в подпространство с выбранным числом измерений, вызывая функцию transform().После подгонки к собственным значениям и основным компонентам можно получить доступ в классе PCA через атрибуты Explain_variance_ и component_.

(.env) boris@boris-All-Series:~/MATRIXPCA$ cat reusablePCA.py
# Principal Component Analysis
from numpy import array
from sklearn.decomposition import PCA

# define a matrix
A = array([[4, 5], [6, 7], [8, 9]])
print(A)

# create the PCA instance
pca = PCA(2)

# fit on data
pca.fit(A)

# access values and vectors
print(pca.components_)
print(pca.explained_variance_)

# transform data
B = pca.transform(A)
print(B)

(.env) boris@boris-All-Series:~/MATRIXPCA$ python3 reusablePCA.py
[[4 5]
 [6 7]
 [8 9]]

[[ 0.70710678  0.70710678]
 [-0.70710678  0.70710678]]

[8. 0.]

[[-2.82842712e+00 -2.22044605e-16]
 [ 0.00000000e+00  0.00000000e+00]
 [ 2.82842712e+00  2.22044605e-16]]




No comments:

Post a Comment