Dada una matriz de datos de digamos 1000000 observaciones 100 características, ¿hay una manera rápida de construir una aproximación tridiagonal
?
Entonces uno podría factorizar ,
todos 0 excepto y , y realizar una rápida descorrelación (blanqueamiento) resolviendo
. (Por "rápido" me refiero a .)
(Agregado, tratando de aclarar): estoy buscando un blanqueador rápido y sucio que sea más rápido que el completo pero mejor que la diagonal. Digamos que es puntos de datos características, por ejemplo, 1000000 100, con características 0-mean.
1) construya , factor Cholesky como , resuelva para blanquear nuevas s. Esto es cuadrático en la cantidad de características.
2) diagonal: ignora las correlaciones cruzadas por completo.
Se podría obtener una matriz tridiagonal de simplemente a cero todas las entradas fuera del tridiagonal, o no acumulándolas en primer lugar. Y aquí empiezo a hundirme: ¿debe haber una mejor aproximación, quizás jerárquica, diagonal de bloque → tridiagonal?
(Agregado el 11 de mayo): Déjame dividir la pregunta en dos:
1) ¿hay un aproximado rápido ?
No (whuber), uno debe mirar todos los {N \ choose 2} pares (o tener estructura o muestra).
2) dado un , ¿qué tan rápido se puede blanquear nuevos s?
Bueno, factorizando , triangular inferior, una vez, luego resolver
es bastante rápido; scipy.linalg.solve_triangular, por ejemplo, usa Lapack.
Estaba buscando un blanqueamiento aún más rápido (), todavía buscando.
Respuestas:
Simplemente calcular la matriz de covarianza, que necesitará para comenzar en cualquier caso, es , por lo que, asintóticamente en , no se gana nada eligiendo un algoritmo para el blanqueo.O((Nf)2) N O(Nf)
Hay aproximaciones cuando las variables tienen una estructura adicional, como cuando forman una serie temporal o realizaciones de un proceso estocástico espacial en varias ubicaciones. Éstos se basan efectivamente en suposiciones que nos permiten relacionar la covarianza entre un par de variables y la existente entre otros pares de variables, como entre pares separados por los mismos retrasos de tiempo. Esta es la razón convencional para suponer que un proceso es estacionario o intrínsecamente estacionario , por ejemplo. Los cálculos pueden ser en tales casos ( p . Ej. , Utilizando la Transformada rápida de Fourier como en Yao & Journel 1998 ). En ausencia de tal modelo, no veo cómo puede evitar calcular todas las covarianzas por pares.O(Nflog(Nf)
fuente
Por capricho, decidí intentar calcular (en R) la matriz de covarianza para un conjunto de datos de aproximadamente el tamaño mencionado en el OP:
Esto tomó menos de un minuto en total, en una computadora portátil bastante genérica con Windows XP de 32 bits. Probablemente tomó más tiempo generar
z
en primer lugar que calcular la matrizvcv
. Y R no está particularmente optimizado para operaciones matriciales listas para usar.Dado este resultado, ¿es tan importante la velocidad? Si N >> p, el tiempo necesario para calcular su aproximación probablemente no será mucho menor que para obtener la matriz de covarianza real.
fuente