Iam пытается вычислить 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)
@ Micael J. Barber, какие числовые ошибки могут привести к такой аномалии? –