1 votos

Realización de PCA en python

Matriz de entrada M x N, M filas (número de muestras), N cols (dimesionalidad de los datos).

Pero no entiendo por qué debemos transponer la matriz cuando la ponemos en np.cov?

def pca():
    #M x N
    xs= np.loadtxt("data_3d.txt",delimiter=" ", skiprows=1, usecols=(0,1,2))
    print xs.shape
    # print xs

    #get mean
    mean= np.mean(xs,axis=0)
    # print mean.shape
    # print mean

    #N x M
    data= (xs-mean).T # why need transpose?
    print data.shape
    # print data

    #N x N
    covData=np.cov(data)#calculate covariance matrix
    print covData.shape

    eigenvalues, eigenvectors = np.linalg.eig(covData)
    print eigenvalues.shape # N long
    print eigenvectors.shape # N x N
    print eigenvalues
    print eigenvectors

¿Y cómo proyectar y reconstruir entonces los datos? Por proyección necesitamos obtener la matriz M x k donde k< N. Por reconstrucción debemos obtener los datos antes de ponerlos en np.cov , por lo que debe ser N x M.

#sort and get k largest eigenvalues
k=2
idx = eigenvalues.argsort()[-k:][::-1]
print idx

eigenvalues = eigenvalues[idx] # k long 
eigenvectors = eigenvectors[:,idx] # N x k
print eigenvalues.shape
print eigenvectors.shape
print eigenvalues
print eigenvectors

#projection and reconstruction
pr= np.dot(data.T,eigenvectors) # (M N) * (N k) => (M k)
rec= np.dot(eigenvectors, pr.T) #(N k) * (k M) => (N M)
print (data-rec) # test reconstruction error

3voto

kynan Puntos 1181

Si echa un vistazo a la documentación de np.cov ( http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html ) puedes ver que tu matriz de entrada tendrá cada fila correspondiente a una variable y cada columna correspondiente a una muestra diferente, y eso es exactamente la transposición de tu matriz.

Para el error de reconstrucción, ¿puede precisar más qué tipo de error está viendo?

Pero para reconstruir hay que multiplicar la matriz (M k) por la inversa de su matriz de vectores propios.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X