56 votos

¿El mejor algoritmo PCA para un gran número de características (>10K)?

Anteriormente pregunté esto en StackOverflow, pero parece que podría ser más apropiado aquí, dado que no obtuvo ninguna respuesta en SO. Es una especie de intersección entre la estadística y la programación.

Necesito escribir un código para hacer PCA (Análisis de Componentes Principales). He navegado por los algoritmos conocidos y he implementado este que, por lo que sé, es equivalente al algoritmo NIPALS. Funciona bien para encontrar los primeros 2-3 componentes principales, pero luego parece volverse muy lento para converger (del orden de cientos a miles de iteraciones). Aquí están los detalles de lo que necesito:

  1. El algoritmo debe ser eficiente cuando se trata de un gran número de características (del orden de 10.000 a 20.000) y de tamaños de muestra del orden de unos pocos cientos.

  2. Debe ser razonablemente implementable sin una biblioteca de álgebra lineal/matriz decente, ya que el lenguaje de destino es D, que aún no tiene una, e incluso si la tuviera, preferiría no añadirla como dependencia al proyecto en cuestión.

Como nota al margen, en el mismo conjunto de datos R parece encontrar todos los componentes principales muy rápidamente, pero utiliza la descomposición del valor singular, que no es algo que quiera codificar yo mismo.

1voto

Omar Kooheji Puntos 384

Véase el documento de Sam Roweis, Algoritmos EM para PCA y SPCA .

1voto

Tyl Puntos 18

También existe la método bootstrap de Fisher et al , diseñado para varios cientos de muestras de alta dimensión.

La idea principal del método se formula como "el remuestreo es una transformación de baja dimensión". Así, si se tiene un número pequeño (varios cientos) de muestras de alta dimensión, no se pueden obtener más componentes principales que el número de sus muestras. Por tanto, tiene sentido considerar las muestras como una base parsimoniosa, proyectar los datos en el subespacio lineal abarcado por estos vectores y calcular el ACP dentro de este subespacio más pequeño. También proporcionan más detalles sobre cómo tratar el caso de que no todas las muestras estén almacenadas en la memoria.

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