Estou resolvendo um sistema usando decomposição de valor singular. Os valores singulares (antes da escala) são:
1.82277e+29
1.95011e+27
1.15033e+23
1.45291e+21
4.79336e+17
7.48116e+15
8.31087e+12
1.71838e+11
5.63232e+08
2.17863e+08
9.02783e+07
1.72345e+07
1.73889e+05
8.09382e+02
2.16644e+00
Eu descobri que aceitar todos os valores singulares e sua contribuição associada ao meu vetor de solução gera resultados ruins. Eu dimensiono todos eles pelo maior número, produzindo valores singulares de:
1.0
1.06986e-02
6.31091e-07
7.97089e-09
2.62971e-12
4.10428e-14
4.55948e-17
9.42732e-19
3.08998e-21
1.19523e-21
4.95281e-22
9.45510e-23
9.53980e-25
4.44040e-27
1.18854e-29
A melhor solução só começa a ficar ruim se eu incluir os dois últimos, e só se torna bom em todo o prazo.
Há uma queda acentuada na precisão quando incluo os dois últimos termos. Por que é que? Quais são os critérios para incluir / não incluir valores singulares?
Estou julgando as respostas para minhas soluções pela forma como elas se aproximam dos meus dados ruidosos.
linear-algebra
regression
svd
drjrm3
fonte
fonte
Respostas:
Dito isto, como JM mencionou, é muito mais estável evitar formar :AHA
Primeiro, precisamos calcular a decomposição do valor singular seguida, podemos definir o pseudoinverso através de onde
A solução pode então ser calculada como
fonte
Augh !! Não, não , mil vezes, não !
A razão pela qual as pessoas usam SVD é justamente para evitar a formação da matriz de produtos cruzados , pois a formação dessa matriz é uma boa receita para formar sistemas lineares mal condicionados! Decomposição deve ser aplicada diretamente a . (Veja também algumas das minhas respostas anteriores .)A⊤A A
Já mencionei a você que o critério usual para zerar valores singulares é compará-los com o produto do maior valor singular e da máquina epsilon. No entanto, isso é discutido pela sua formação da matriz de produtos cruzados. Tente executar a decomposição novamente, mas desta vez na própria matriz de design, em vez da matriz de produtos cruzados. Qualquer outra forma é flagrante abuso da decomposição.
fonte
Acho que várias pessoas aqui forneceram dicas valiosas para o seu problema.
Para referência futura, no entanto, sua pergunta sobre como resolver um problema de mínimos quadrados lineares incorretos pode ser respondida examinando o imenso corpo de literatura sobre esse problema.
Especificamente, você pode usar o TSVD (Decomposição de Valor Singular Truncado) como um método simples de obter a solução: onde é o i-ésimo valor singular, e são a i-ésima coluna nas matrizes e da fatoração , é o lado direito do seu problema, e a notação significa o conjugado complexo das entradas e depois é girada para uma linha vetor, tal que
O principal problema nesse cenário, além de ser forçado a calcular o SVD, que é bastante caro, é como escolher o número de valores singulares a serem usados, ou seja, . Novamente, existem várias maneiras de fazer isso, mas as mais populares seriam o princípio da discrepância, o método de validação cruzada generalizada e a curva L.k
Tudo isso (e muito mais) é implementado, no Matlab, na excelente caixa de ferramentas Regularization Tools , escrita pelo professor Per Christian Hansen, que também publicou vários trabalhos e alguns livros sobre problemas inversos. A caixa de ferramentas é fácil de usar e deve ser bastante fácil de traduzir para outras linguagens de programação.
Em conclusão, enquanto outros forneceram informações importantes sobre o seu aplicativo que sugerem que outras abordagens são mais apropriadas, o acima é um resumo rápido de como você pode resolver o problema, se ainda precisar.
fonte