комплексные собственные значения в расчете PCA

Я пытаюсь вычислить PCA матрицы.

Иногда результирующие собственные значения/векторы являются комплексными значениями, поэтому при попытке спроецировать точку на план более низкого измерения путем умножения матрицы собственных векторов на координаты точки я получаю следующее предупреждение

ComplexWarning: Casting complex values to real discards the imaginary part

В этой строке кода np.dot(self.u[0:components,:],vector)

Весь код, который я использовал для расчета PCA

import numpy as np
import numpy.linalg as la

class PCA:
    def __init__(self,inputData):
        data = inputData.copy()
        #m = no of points
        #n = no of features per point
        self.m = data.shape[0]
        self.n = data.shape[1]
        #mean center the data
        data -= np.mean(data,axis=0)

        # calculate the covariance matrix
        c = np.cov(data, rowvar=0)

        # get the eigenvalues/eigenvectors of c
        eval, evec = la.eig(c)
        # u = eigen vectors (transposed)
        self.u = evec.transpose()

    def getPCA(self,vector,components):
        if components > self.n:
            raise Exception("components must be > 0 and <= n")
        return np.dot(self.u[0:components,:],vector)

person Ahmed Kotb    schedule 02.05.2012    source источник


Ответы (2)


Ковариационная матрица симметрична и, следовательно, имеет действительные собственные значения. Вы можете увидеть небольшую мнимую часть в некоторых собственных значениях из-за численной ошибки. Мнимые части вообще можно не учитывать.

person Michael J. Barber    schedule 05.05.2012
comment
@ Микаэль Дж. Барбер, какие числовые ошибки могут привести к такой аномалии? - person Shubham Singh rawat; 06.01.2018

Вы можете использовать библиотеку scikits python для PCA, это пример использования

person Khaled    schedule 05.05.2012