Quais devem ser os critérios para aceitar / rejeitar valores singulares?


8

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 10−19 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?

m×nm≫nA⋅X=BAA⊤AX=A⊤X

Estou julgando as respostas para minhas soluções pela forma como elas se aproximam dos meus dados ruidosos.

−1010


Se você mencionar quais tags você gostaria de criar na postagem ou em um comentário, alguém com maior reputação poderá cuidar disso.
— David Z

@ DavidKetcheson: Ainda não tenho certeza se realmente precisamos dessas tags específicas ... Talvez quando tenhamos muitas perguntas sobre SVD ... mas acho que a álgebra linear deva ser uma etiqueta suficiente por enquanto.
— JM

Respostas:


11

max(m,n)ϵ‖A‖2Am×nϵ‖A‖2A

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

[U,Σ,V]=svd(A)
A†=Vf(Σ)UH,
f(σ)={1/σ,σ≥max(m,n)ϵ‖A‖2,0,otherwise

A solução pode então ser calculada como

X=A†B.

2
Eu acho que é melhor ser explícito e dizer que a matriz 2 é exatamente o mesmo que o maior valor singular ... também, não precisa ser quadrado para aplicar o critério de limite (mas um substitui com para uma matriz ). Anmax(m,n)m×n
— JM

1
em vez de A † = U f (Σ) * VH não deveria ser A † = V f (Σ) * U '?
— drjrm3

Sim, obrigado a ambos. Acabei de escrever uma rotina pseudo-inversa paralela para matrizes hermitianas, alguns dias atrás, e aparentemente não pensei bastante nas diferenças relativas ao caso geral.
— precisa

2
As pseudoinversas não são a solução para problemas mal condicionados, embora tendam a ajudar. A interpolação polinomial de alta ordem é notoriamente mal condicionada e é melhor evitar. Eu recomendo que você leia o artigo da Wiki sobre o fenômeno de Runge e depois mude para uma base diferente para sua interpolação (por exemplo, polinômios ou splines por partes).
— Jack Poulson

1
Esta discussão não está mais relacionada à sua pergunta original; se a sua implementação de uma aproximação de mínimos quadrados questionável converge ou não é relevante para sua pergunta original. Sugiro que você publique outra pergunta se ainda estiver confuso.
— precisa

11

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⊤AA

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.


3
Não é possível aprovar isso o suficiente ... este é o ponto mais importante sobre o uso correto das técnicas SVD. Lembre-se de que os valores singulares de são os quadrados dos valores singulares de ! ATAA
— khinsen

Precisamente. Esquadrar um número minúsculo resulta em um número ainda menor. Considerando o fato de que o número de condição de 2 normas é a razão do maior para o menor valor singular, essa é uma maneira de ver por que a abordagem das equações normais pode ser uma má ideia para sistemas grandes.
— JM

2

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

xk=∑i=1kuiHbσivi
σiuiviUVUSVH=AbuHuHbproduz um escalar (dotproduct). Sua solução é, portanto, o vetor .xk

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.


obrigado, estou ciente da maior parte disso. pesquisei muitos recursos - o problema é que minhas soluções se tornam cada vez piores à medida que meu conjunto de bases aumenta. Cheguei à conclusão de que isso ocorre porque o número de valores singulares sendo rejeitados à medida que meu conjunto de bases aumenta aumenta em relação ao número de funções de base usadas. isto é, quando usei n = 100 funções básicas, devo descartar 95 dos valores singulares e isso gera um resultado pior do que se eu usasse 10 conjuntos de bases e jogasse apenas um valor singular.
— drjrm3

Certo - bem, como outros sugeriram, você deve examinar suas funções básicas e talvez encontrar uma base que melhor se aproxime de seus dados. As splines podem ser uma opção. O mesmo poderia acontecer com Kriging, embora essa seja uma abordagem totalmente diferente, que me proporcionou bons resultados em várias ocasiões.
— OscarB
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.