Preciso gerar matrizes não quadradas aleatórias com linhas e colunas , elementos distribuídos aleatoriamente com média = 0 e restritos de forma que o comprimento (norma L2) de cada linha seja e o comprimento de cada coluna seja . Equivalentemente, a soma dos valores quadrados é 1 para cada linha e para cada coluna.C 1 √ R
Até agora, encontrei uma maneira de conseguir isso: simplesmente inicialize os elementos da matriz aleatoriamente (por exemplo, a partir de uma distribuição uniforme, normal ou laplace com média zero e variação arbitrária) e normalize alternadamente linhas e colunas com , terminando com normalização de linha. Isso parece convergir rapidamente para o resultado desejado (por exemplo, para e , a variação do comprimento da coluna é tipicamente ~ após iterações), mas não tenho certeza se posso depender dessa taxa de convergência rápida em geral (para várias dimensões da matriz e distribuições de elementos iniciais).R = 40 C = 80 0,00001 2
Minha pergunta é a seguinte: existe uma maneira de alcançar o resultado desejado ( , ) diretamente sem iterar entre normalização de linha / coluna? Por exemplo, algo como o algoritmo para normalizar um vetor aleatório (inicialize elementos aleatoriamente, meça a soma dos valores quadrados e depois dimensione cada elemento por um escalar comum). Caso contrário, existe uma caracterização simples para a taxa de convergência (por exemplo, número de iterações até erro ) do método iterativo descrito acima?c o l u m n l e n g t h s = √ <ϵ
fonte
Respostas:
Como @cardinal disse em um comentário:
... parece que o algoritmo iterativo que sugeri na pergunta original é muito semelhante ao algoritmo de Sinkhorn-Knopp. Curiosamente, também parece muito semelhante ao ajuste proporcional iterativo (IPF), que, conforme descrito na página da IPF na Wikipédia, está relacionado ao método de Newton e à maximização de expectativas (todos têm o mesmo limite).
Esses métodos iterativos são frequentemente aplicados a problemas que não possuem uma solução de formulário fechado, portanto, assumirei que a resposta à pergunta é negativa: não há como alcançar a solução desejada sem a iteração de linha / coluna.
fonte