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 1019 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×nmnAX=BAAAX=AX

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)ϵA2Am×nϵA2A

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)ϵA2,0,otherwise

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

X=AB.

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 .)AAA

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.