O que são algoritmos eficientes para calcular a decomposição de valor singular (SVD)?

17

O artigo da Wikipedia sobre análise de componentes principais afirma que

Existem algoritmos eficientes para calcular o SVD de sem precisar formar a matriz , portanto, calcular o SVD agora é a maneira padrão de calcular uma análise de componentes principais a partir de uma matriz de dados, a menos que apenas alguns componentes sejam necessários.XXTX

Alguém poderia me dizer quais são os algoritmos eficientes sobre os quais o artigo está falando? Não há nenhuma referência fornecida (URL ou citação de um artigo que proponha esse método de cálculo seria bom).

svd
fonte
4
Uma pesquisa no Google sobre o algoritmo de decomposição de valor singular faz um bom trabalho ao destacar informações relevantes.
whuber
1
Não se esqueça de remover a média antes do SVD for PCA!
Memming
Experimente o Lanczos SVD!
CIRI

Respostas:

12

O principal trabalho por trás do cálculo do SVD é o algoritmo QR . Dito isto, existem muitos algoritmos diferentes para calcular a decomposição do valor singular de um genérico -by- matriz . Um ótimo esquema sobre o problema disponível aqui (na documentação do MKL da Intel ) é o seguinte:MNUMAinsira a descrição da imagem aqui

Como você vê, dependendo do seu caso de uso, existem abordagens diferentes (as convenções de nomenclatura de rotina podem ser encontradas aqui ). Isso ocorre porque, por exemplo, existem formulários matriciais em que uma redução de agregado familiar pode ser mais cara que uma rotação de Givens (para citar duas maneiras "óbvias" de obter QR). Uma referência padrão sobre o assunto é a Matrix Computations de Golub e Van Loan (eu sugeriria usar pelo menos a 3ª edição). Eu também encontrei Å. Métodos numéricos de Björck para problemas de mínimos quadrados recurso muito bom sobre esse assunto; enquanto SVD não é o foco principal do livro, ajuda a contextualizar o uso.

Se eu tiver que lhe dar um conselho geral sobre o assunto , não tente escrever seus próprios algoritmos SVD, a menos que você tenha realizado com êxito algumas aulas de Álgebra Linear Numérica e saiba o que está fazendo. Eu sei que isso soa contra-intuitivo, mas realmente existe uma tonelada de coisas que podem dar errado e você acaba com (na melhor das hipóteses) implementações sub-ótimas (se não estiver errado). Existem algumas suítes gratuitas muito boas sobre o assunto (por exemplo , Eigen , Tatu e Trilinos, para citar alguns.)

usεr11852 diz Reinstate Monic
fonte
XUMA
1
MNUMAXTX
2
Sim, eu estava errado: o QR não se restringe a matrizes quadradas. +1, a propósito. Essa pergunta foi uma das perguntas não respondidas mais votadas com a tag pca , portanto, é bom ver que ela finalmente foi respondida.
ameba diz Restabelecer Monica
Sua resposta não menciona toda uma variedade de algoritmos iterativos. Foi de propósito? Alguém fez uma pergunta sobre algoritmos iterativos de SVD, consulte Quais algoritmos rápidos existem para calcular SVD truncado? , e eu postei uma resposta lá, tentando fornecer uma visão geral. Talvez devêssemos pelo menos vincular nossas respostas. E certamente seria ótimo se você pudesse expandir o seu discutindo algoritmos QR versus algoritmos iterativos.
Ameba diz Reinstate Monica
Não, foi acidental. Você respondeu sua própria pergunta em sua postagem; SVD truncado são essencialmente composições automáticas truncadas (consulte, por exemplo, ARPACK ). Existem algumas diferenças finas, mas elas são boas ; alguns softwares (por exemplo, MATLAB svds) chegam ao ponto de simplesmente usar sua função SVD truncada como invólucro para suas eigsrotinas eigendecomposition ( ) truncadas .
usεr11852 diz Reinstate Monic