Necesito generar matrices aleatorias no cuadradas con filas y columnas , elementos distribuidos aleatoriamente con media = 0, y restringidos de modo que la longitud (norma L2) de cada fila sea y la longitud de cada columna sea . De manera equivalente, la suma de los valores cuadrados es 1 para cada fila y para cada columna.
Hasta ahora, he encontrado una manera de lograr esto: simplemente inicialice los elementos de la matriz al azar (por ejemplo, desde una distribución uniforme, normal o laplace con media cero y varianza arbitraria), luego normalice alternativamente filas y columnas a , terminando con la normalización de fila. Esto parece converger al resultado deseado con bastante rapidez (por ejemplo, para y , la varianza de la longitud de la columna es típicamente ~ después de iteraciones), pero no estoy seguro si puedo depender de esta rápida tasa de convergencia en general (para varias dimensiones de matriz y distribuciones de elementos iniciales).
Mi pregunta es esta: ¿hay alguna manera de lograr el resultado deseado ( , ) directamente sin iterar entre normalización de fila / columna? Por ejemplo, algo así como el algoritmo para normalizar un vector aleatorio (inicializar elementos aleatoriamente, medir la suma de valores cuadrados, luego escalar cada elemento por un escalar común). Si no, ¿hay una caracterización simple para la tasa de convergencia (por ejemplo, iteraciones numéricas hasta el error ) del método iterativo descrito anteriormente?
fuente
Respuestas:
Como @cardinal dijo en un comentario:
... parece que el algoritmo iterativo que sugerí en la pregunta original es muy similar al algoritmo Sinkhorn-Knopp. Curiosamente, también parece muy similar al ajuste proporcional iterativo (IPF), que, como se describe en la página de Wikipedia de IPF, está relacionado con el método de Newton y la maximización de expectativas (todos tienen el mismo límite).
Estos métodos iterativos a menudo se aplican a problemas que carecen de una solución de forma cerrada, por lo que supongo tentativamente que la respuesta a la pregunta es negativa: no hay forma de lograr la solución deseada sin la iteración de fila / columna.
fuente