He estado trabajando con algunos de los grandes positivo matrices para una máquina de aprendizaje problema que estoy tratando de resolver. El problema consiste en multiplicar una matriz $A$ que es un conjunto de usuarios y artículos, con una matriz de $B$ que es un conjunto de elementos y atributos. Cuando nos fijamos en las columnas de $B$, podemos ver un mínimo de correlaciones. Sin embargo, cuando vamos a crear una nueva matriz, $C=A \bullet B$, vemos que las columnas de a $C$ están altamente correlacionados. Esto es claramente un problema para el aprendizaje de máquina.
Lo que hemos tratado es el de la normalización. Parece que el centrado y la ampliación de las características de $B$ a una distribución normal estándar se soluciona el problema de las altas correlaciones. También, en el fin de mantener la positiva restricciones, si le $L1$ norma las filas de $A$ y las columnas de a $B$, entonces las correlaciones no aparecen en el producto final.
La rareza viene cuando tratamos de utilizar las $L2$ normalizaciones, que para mí no debería ser muy distinta de la de $L1$. Sin embargo, si se $L2$ norma las filas de $A$ y las columnas de a $B$, entonces las correlaciones aparecen todavía (aunque son un poco más débiles) ... Esto es intuitivamente muy extraño para mí y me parece que no puede averiguar qué es.
¿Alguien tiene alguna idea de lo que está pasando aquí? He incluido R código de abajo, que recrea el problema con matrices aleatorias.
library(corrplot)
# randomly generate strictly positive matrices
item_attributes <- matrix(runif(100000, min=0, max=1),1000,10)
users_items <- matrix(sample(0:1, 10000*1000, rep=T, prob=c(0.95, 0.05)),10000,1000)
# L1 Norm
item_attributes_l1 <- t(t(item_attributes)/abs(apply(item_attributes,2,sum)))
users_items_l1 <- users_items / abs(apply(users_items,1,sum))
# L2 Norm
item_attributes_l2 <- t(t(item_attributes)/sqrt(apply(item_attributes^2,2,sum)))
users_items_l2 <- users_items/sqrt(apply(users_items^2,1,sum))
# multiply the matrices
mat_prod <- users_items %*% item_attributes
mat_prod_l1 <- users_items_l1 %*% item_attributes_l1
mat_prod_l2 <- users_items_l2 %*% item_attributes_l2
# check for correlations in the final products
corrplot(cor(mat_prod), main='\ndot product')
corrplot(cor(mat_prod_l1), main='\nl1 norm')
corrplot(cor(mat_prod_l2), main='\nl2 norm')