Estoy tratando de reducir la dimensionalidad y el ruido de un conjunto de datos al realizar PCA en el conjunto de datos y descartar las últimas PC. Después de eso, quiero usar algunos algoritmos de aprendizaje automático en las PC restantes y, por lo tanto, quiero normalizar los datos igualando la varianza de las PC para que los algoritmos funcionen mejor.
Una forma simple es simplemente normalizar la varianza a los valores unitarios. Sin embargo, la primera PC contiene más variaciones del conjunto de datos original que las siguientes, y todavía quiero darle más "peso". Por lo tanto, me preguntaba: ¿hay una manera simple de dividir su variación y compartirla con las PC con menos variaciones?
Otra forma es mapear las PC al espacio de características original, pero en ese caso la dimensionalidad también aumentaría al valor original.
Supongo que es mejor mantener las columnas resultantes ortogonales, pero no es necesario en este momento.
fuente
Respuestas:
Para mí no está completamente claro que lo que está preguntando es lo que realmente necesita: un paso de preprocesamiento común en el aprendizaje automático es la reducción de dimensionalidad + blanqueamiento, lo que significa hacer PCA y estandarizar los componentes, nada más. Sin embargo, me centraré en su pregunta, ya que está formulada, porque es más interesante.
Sea la matriz de datos n × d centrada con puntos de datos en filas y variables en columnas. PCA equivale a la descomposición de valores singulares X = U S V ⊤ ≈ U k S k V ⊤ k , donde para realizar la reducción de dimensionalidad solo conservamos k componentes. Un "factor de rotación" ortogonal de estos componentes implica elegir una matriz ortogonal k × k R y conectarla a la descomposición: X ≈ U k S k VX n×d
Ahora estamos listos para formular el problema en términos matemáticos: dadas cargas no rotadas , encuentre la matriz de rotaciónRtal que las cargas rotadas,LR, tengan la misma suma de cuadrados en cada columna.L=VkSk/n−1−−−−−√ R LR
Vamos a resolverlo Las sumas de cuadrados de la columna después de la rotación son iguales a los elementos diagonales de Esto tiene sentido: la rotación simplemente redistribuye las variaciones de los componentes, que originalmente se dan pors 2 i /(n-1), entre ellos, de acuerdo con esta fórmula. Necesitamos redistribuirlos para que todos sean iguales a su valor promedioμ.
No creo que haya una solución de forma cerrada para esto, y de hecho hay muchas soluciones diferentes. Pero una solución se puede construir fácilmente de manera secuencial:
Esto redistribuirá todas las variaciones por igual por una secuencia de rotaciones 2D. Multiplicar todas estas matrices de rotación juntas producirá la R general .( k - 1 ) R
Ejemplo
Considere la siguiente matriz : ( 10 0 0 0 0 6 0 0 0 0 3 0 0 0 0 1 ) . La varianza media es 5 . Mi algoritmo procederá de la siguiente manera:S2/ (n-1)
Hecho.
Escribí el script de Matlab que implementa este algoritmo (ver más abajo). Para esta matriz de entrada, la secuencia de ángulos de rotación es:
Desviaciones de componentes después de cada paso (en filas):
La matriz de rotación final (producto de tres matrices de rotación 2D):
Aquí está el código:
Aquí está el código en Python proporcionado por @feilong:
fuente
mu
.pero no ha demostrado de dónde viene esta ecuación; Probablemente pensando que es obvio sin explicación. Obvio o no, creo que vale la pena dilucidar, de alguna manera. Mi respuesta se presenta de una manera.
fuente
Si interpreto las cosas correctamente, quiere decir que el primer componente principal (valor propio) explica la mayor parte de la varianza en los datos. Esto puede suceder cuando su método de compresión es lineal. Sin embargo, puede haber dependencias no lineales en su espacio de características.
Aquí hay un ejemplo de scikit donde hacen una búsqueda de cuadrícula para encontrar el número óptimo de componentes principales para mantener (hiperparámetro) usando PCA. Finalmente, aplican la Regresión logística en el espacio dimensional inferior: http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html#example-plot-digits-pipe-py
Protip: los codificadores automáticos no tienen una solución de forma cerrada (afaik), por lo que si su contexto está transmitiendo datos, esto significa que puede actualizar continuamente su codificador automático (representación comprimida) y, por lo tanto, puede compensar cosas como la deriva del concepto. Con pca, debe volver a entrenar el modo por lotes de vez en cuando a medida que ingresan nuevos datos.
En cuanto a dar algunas características más "peso", vea la regularización (comenzaría por las normas https://en.wikipedia.org/wiki/Norm_(mathematics) ). También te sorprenderá cuán similar es la regresión logística al perceptrón.
fuente