Pregunta

Residencia en esta respuesta, sabemos que podemos realizar una matriz de covarianza de construcción de forma incremental cuando hay demasiadas observaciones, mientras que podemos realizar una SVD aleatorizada cuando hay demasiadas variables.

La respuesta que proporciona es clara y útil. Sin embargo, ¿qué pasa si tenemos una gran cantidad de observaciones? Y variables? por ejemplo, 500,000 muestras con 600,000 observaciones. En este caso, la matriz de covarianza será enorme (por ejemplo, 2,000 GB, suponiendo 8 bytes flotante, y si mi cálculo es correcto) y será imposible para nosotros encajarlo en la memoria.

En tal escenario, ¿hay algo que podamos hacer para calcular el PCA, suponiendo que solo queramos las PC superiores (por ejemplo, 15 PC)?

¿Fue útil?

Solución

Hay un par de cosas que puedes hacer.

  1. Muestra un representante, pero un pequeño conjunto de sus datos, que le permitirá calcular PCA en la memoria. Pero, ya que tiene 600,00 observaciones, esto probablemente no dará como resultado ningún resultado significativo.
  2. Use PCA incremental, aquí hay un enlace: http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.incementalpca.html#sklearn.decomposition.incrementalpca

Pero el principal problema que tiene es que varias muestras son menores que la cantidad de observaciones que tiene. Recomendaría un enfoque diferente para la reducción de la dimensionalidad. Autoencoders sería mi recomendación para usted. Los autoencoders pueden ser entrenados de manera iterativa, eludir su problema de memoria y pueden aprender proyecciones más complicadas que PCA (que es una transformación lineal). En caso de que desee una proyección lineal, puede tener un autoencoder con una capa oculta, y la solución encontrada por la red neuronal será igual a la solución encontrada por PCA.

Aquí hay un par de enlaces que encontrará útil:

Licenciado bajo: CC-BY-SA con atribución
scroll top