Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo obtener los componentes principales de Python PCA

Cómo obtener los componentes principales de Python PCA

Pasos generales para implementar el algoritmo PCA

(1) Promedio cero

Si el conjunto de datos original es un dataMat matricial, entonces cada fila de dataMat representa una muestra , cada columna representa la misma característica. El promedio cero consiste simplemente en encontrar la media de cada columna y luego restar todos los números de esa columna de esa media. El código de implementación es el siguiente:

[python]?view Plain?copy

def?zeroMean(dataMat):

meanVal=np.mean( dataMat , eje = 0)?# ¿Encontrar la media por columna, es decir, encontrar la media de cada característica?

newData=dataMat-meanVal?

retorno?

La función devuelve dos variables newData son los datos después de que la media es cero y meanVal es el valor. de cada característica y el valor medio se utiliza para luego reconstruir los datos.

(2) Encuentre la matriz de covarianza

[python]?view Plain?copy

newData, meanVal=zeroMean(dataMat)?

covMat=np.cov(newData, rowvar=0)?

La función cov en numpy se usa para encontrar la matriz de covarianza, ¡y el parámetro rowvar es muy importante! Si rowvar = 0, significa que la fila de los datos de entrada representa una muestra. Si no es 0, significa que la columna de los datos de entrada representa una muestra. Dado que cada fila de newData representa una muestra, rowvar se establece en 0.

covMat es la matriz de covarianza buscada.

(3) Encuentre valores propios y matrices propias

Llame a la función eig en el módulo de álgebra lineal numpy linalg para encontrar valores propios y vectores propios directamente desde covMat:

[python]?view Plain?copy

eigVals, eigVects =np.linalg.eig(np.mat(covMat))?

eigVals guarda valores propios y vectores de fila .

eigVects almacena vectores de características, uno para cada columna.

Los valores propios y los vectores propios están en correspondencia uno a uno

(4) Conservar los componentes principales [es decir, conservar las primeras n características con valores propios más grandes]

El tercer paso es obtener el vector de valores propios eigVals. Supongamos que hay m valores propios. Podemos ordenarlos. Los vectores propios correspondientes a los primeros n valores propios son los vectores propios que queremos retener. Espacio de funciones. Conceptos básicos del grupo. Multiplicamos los datos de promedio cero por n_eigVect para obtener los datos de reducción de dimensionalidad.

El código es el siguiente:

[python]?view Plain?copy

eigValIndice=np.argsort(eigVals)#¿Ordenar valores propios de menor a mayor?

n_eigValIndice= eigValIndice[-1:-(n 1):-1]#¿El subíndice de los n valores propios más grandes?

n_eigVect=eigVects[:, n_eigValIndice]# ¿El vector propio correspondiente a los n valores propios más grandes?

lowDDataMat=newData*n_eigVect# ¿Datos en un espacio de características de baja dimensión?

reconMat=(lowDDataMat*n_eigVect.T) meanVal#¿Reconstruir datos?

return?lowDDataMat, reconMat?

Hay varios puntos en el código que deben explicarse. Primero, argsort ordena los valores propios de pequeño a grande y luego ordena los valores propios. Los n valores propios más grandes, por lo que eigValIndice[-1:-(n 1):-1] eliminarán n valores propios y sus subíndices correspondientes. En Python, lista[a:b:c] significa comenzar desde el subíndice a, ir a b y luego a c.