Last Updated on August 9, 2019
Muitas operações complexas de matriz não podem ser resolvidas eficientemente ou com estabilidade usando a precisão limitada dos computadores.
Decomposições matriciais são métodos que reduzem uma matriz em partes constituintes que facilitam o cálculo de operações matriciais mais complexas. Métodos de decomposição matricial, também chamados de métodos de factorização matricial, são uma base da álgebra linear em computadores, mesmo para operações básicas como resolver sistemas de equações lineares, calcular o inverso, e calcular o determinante de uma matriz.
Neste tutorial, você descobrirá decomposições matriciais e como calculá-las em Python.
Após completar este tutorial, você saberá:
- O que é uma decomposição matricial e porque estes tipos de operações são importantes.
- Como calcular uma decomposição de matriz LU e QR em Python.
- Como calcular uma decomposição de matriz Cholesky em Python.
Pick start your project with my new book Linear Algebra for Machine Learning, incluindo tutoriais passo-a-passo e os arquivos de código fonte Python para todos os exemplos.
Vamos começar.
- Atualização Mar/2018: Corrigido um pequeno erro de digitação na descrição da Decomposição QR.
- Atualização Jul/2019: Corrigido um pequeno erro de digitação ao descrever matrizes positivas definidas.
A Gentle Introduction to Matrix Decompositions for Machine Learning
Foto por mickey, alguns direitos reservados.
- Síntese tutorial
- Ajuda de alimentação com Álgebra Linear para Aprendizagem de Máquinas?
- O que é uma Decomposição de Matriz?
- Decomposição da matriz LU
- Decomposição da matriz QR
- Decomposição Cholesky
- Extensões
- Outras Leituras
- Livros
- API
- Artigos
- Resumo
- Pega na Álgebra Linear para Aprendizagem de Máquinas!
- Desenvolve uma compreensão funcional da álgebra linear
- Compreender a Matemática dos Dados
Síntese tutorial
Este tutorial está dividido em 4 partes; elas são:
- O que é uma Decomposição Matricial?
- Decomposição Matricial da LU
- Decomposição Matricial do QR
- Decomposição da Cholesky
Ajuda de alimentação com Álgebra Linear para Aprendizagem de Máquinas?
Realizar meu curso de 7 dias grátis por e-mail (com código de exemplo).
Clique para se inscrever e também obter uma versão PDF Ebook grátis do curso.
Download Your FREE Mini-Course
O que é uma Decomposição de Matriz?
Uma decomposição de matriz é uma forma de reduzir uma matriz em suas partes constituintes.
É uma abordagem que pode simplificar operações de matriz mais complexas que podem ser realizadas na matriz decomposta e não na própria matriz original.
Uma analogia comum para a decomposição matricial é o factoring de números, como o factoring de 10 em 2 x 5. Por esta razão, a decomposição matricial também é chamada factorização matricial. Como o factoring de valores reais, existem muitas maneiras de decompor uma matriz, portanto há uma gama de diferentes técnicas de decomposição matricial.
Dois métodos simples e amplamente utilizados de decomposição matricial são a decomposição matricial LU e a decomposição matricial QR.
Próximo, vamos dar uma olhada mais detalhada em cada um destes métodos.
Decomposição da matriz LU
A decomposição LU é para matrizes quadradas e decompõe uma matriz em componentes L e U.
1
> |
A = L . U
|
Or, sem a notação de pontos.
1
|
A = LU
|
Onde A é a matriz quadrada que desejamos decompor, L é a matriz triangular inferior e U é a matriz triangular superior.
Os fatores L e U são matrizes triangulares. A factorização que vem de eliminação é A = LU.
– Página 97, Introdução à Álgebra Linear, Quinta Edição, 2016.
A decomposição do LU é encontrada usando um processo numérico iterativo e pode falhar para aquelas matrizes que não podem ser decompostas ou decompostas facilmente.
Uma variação desta decomposição que é numericamente mais estável para resolver na prática é chamada de decomposição LUP, ou decomposição LU com pivô parcial.
1
|
A = P . L . U
|
As linhas da matriz pai são reordenadas para simplificar o processo de decomposição e a matriz P adicional especifica uma forma de permutar o resultado ou retornar o resultado para a ordem original. Existem também outras variações da LU.
A decomposição da LU é frequentemente usada para simplificar a resolução de sistemas de equações lineares, tais como encontrar os coeficientes numa regressão linear, bem como no cálculo do determinante e inverso de uma matriz.
A decomposição da LU pode ser implementada em Python com a função lu(). Mais especificamente, esta função calcula uma decomposição da LPU.
O exemplo abaixo define primeiro uma matriz quadrada 3×3. A decomposição LU é calculada, depois a matriz original é reconstruída a partir dos componentes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> |
# decomposição LU
de matriz de importação numérica
de scipy.linalg import lu
# define uma matriz quadrada
A = array(, , ])
print(A)
# LU decomposição
# P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruir
> B = P.dot(L).dot(U)
print(B)
|
Executar o exemplo primeiro imprime a matriz 3×3 definida, depois os componentes P, L, e U da decomposição, depois finalmente a matriz original é reconstruída.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
Decomposição da matriz QR
A decomposição QR é para matrizes m x n (não limitada a matrizes quadradas) e decompõe uma matriz em componentes Q e R.
1
|
A = Q . R
|
Or, sem a notação de pontos.
1
|
A = QR
|
Onde A é a matriz que desejamos decompor, Q a matriz com o tamanho m x m, e R é uma matriz triangular superior com o tamanho m x n.
A decomposição QR é encontrada usando um método numérico iterativo que pode falhar para aquelas matrizes que não podem ser decompostas, ou se decompõem facilmente.
Como a decomposição LU, a decomposição QR é frequentemente usada para resolver sistemas de equações lineares, embora não esteja limitada a matrizes quadradas.
A decomposição QR pode ser implementada em NumPy usando a função qr(). Por padrão, a função retorna as matrizes Q e R com dimensões menores ou ‘reduzidas’, o que é mais econômico. Podemos alterar isso para retornar os tamanhos esperados de m x m para Q e m x n para R especificando o argumento do modo como ‘completo’, embora isso não seja necessário para a maioria das aplicações.
O exemplo abaixo define uma matriz 3×2, calcula a decomposição QR e depois reconstrói a matriz original a partir dos elementos decompostos.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# Decomposição QR
de matriz de importação numérica
de matriz de importação numérica.linalg import qr
# define uma matriz 3×2
A = matriz(, , ])
print(A)
# decomposição QR
# Q, R = qr(A, ‘completo’)
print(Q)
print(R)
# reconstruir
# B = Q.dot(R)
print(B)
> |
Executar o exemplo primeiro imprime a matriz 3×2 definida, depois os elementos Q e R, depois finalmente a matriz reconstruída que corresponde àquilo com que começámos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Decomposição Cholesky
A decomposição Cholesky é para matrizes quadradas simétricas onde todos os valores próprios são maiores que zero, as chamadas matrizes positivas definitivas.
Para nossos interesses na aprendizagem de máquinas, vamos focar na decomposição Cholesky para matrizes de valor real e ignorar os casos quando se trabalha com números complexos.
A decomposição é definida da seguinte forma:
1
|
A = L . L^T
|
Or sem a notação de pontos:
1
|
A = LL^T
|
Onde A está a matriz a ser decomposta, L é a matriz triangular inferior e L^T é a transposição de L.
A decomposição também pode ser escrita como o produto da matriz triangular superior, por exemplo:
1
|
>
A = U^T . U
|
Onde U é a matriz triangular superior.
A decomposição Cholesky é usada para resolver mínimos quadrados lineares para regressão linear, assim como métodos de simulação e otimização.
Quando se decompõem matrizes simétricas, a decomposição Cholesky é quase duas vezes mais eficiente do que a decomposição LU e deve ser preferida nestes casos.
Embora matrizes simétricas e positivas definidas sejam bastante especiais, elas ocorrem com bastante frequência em algumas aplicações, por isso a sua factorização especial, chamada decomposição Cholesky, é boa de se conhecer. Quando você pode usá-la, a decomposição Cholesky é cerca de um fator de dois mais rápido que métodos alternativos para resolver equações lineares.
– Página 100, Receitas Numéricas: The Art of Scientific Computing, Terceira Edição, 2007.
A decomposição Cholesky pode ser implementada em NumPy chamando a função cholesky(). A função só retorna L pois podemos facilmente acessar a transposição de L conforme necessário.
O exemplo abaixo define uma matriz 3×3 simétrica e definida positivamente e calcula a decomposição Cholesky, então a matriz original é reconstruída.
1
2
3
4
5
6
7
8
9
10
11
12
> |
# Decomposição com colisão
de matriz de importação numérica
de matriz de importação numérica.linalg import cholesky
# define uma matriz 3×3
A = matriz(, , ])
print(A)
# decomposição cholesky
L = cholesky(A)
print(L)
# reconstruir
# B = L.dot(L.T)
print(B)
|
Executar o exemplo primeiro imprime a matriz simétrica, depois a matriz triangular inferior a partir da decomposição seguida da matriz reconstruída.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Extensões
Esta secção lista algumas ideias para estender o tutorial que poderá querer explorar.
- Criar 5 exemplos usando cada operação com seus próprios dados.
- Procurar papéis de aprendizagem de máquina e encontrar 1 exemplo de cada operação sendo usada.
Se você explorar qualquer uma dessas extensões, eu adoraria saber.
Outras Leituras
Esta seção fornece mais recursos sobre o tópico se você estiver procurando ir mais fundo.
Livros
- Secção 6.6 Decomposições matriciais. No Bullshit Guide To Linear Algebra, 2017.
- Lecture 7 QR Factorization, Numerical Linear Algebra, 1997.
- Section 2.3 LU Decomposition and Its Applications, Numerical Recipes: A Arte da Computação Científica, Terceira Edição, 2007.
- Secção 2.10 Decomposição QR, Receitas Numéricas: A Arte da Computação Científica, Terceira Edição, 2007.
- Secção 2.9 Decomposição Cholesky, Receitas Numéricas: The Art of Scientific Computing, Terceira Edição, 2007.
- Palestra 23, Decomposição Cholesky, Álgebra Numérica Linear, 1997.
API
- cipy.linalg.lu() API
- numpy.linalg.qr() API
- numpy.linalg.linalg.cholesky() API
Artigos
- Decomposição matricial na Wikipédia
- Decomposição do LU na Wikipédia
- Decomposição do QR na Wikipédia
- Decomposição do Cholesky na Wikipédia
Resumo
Neste tutorial, você descobriu decomposições matriciais e como calculá-las em Python.
Especificamente, você aprendeu:
- O que é uma decomposição matricial e porque estes tipos de operações são importantes.
- Como calcular uma decomposição matricial LU e QR em Python.
- Como calcular uma decomposição matricial Cholesky em Python.
Você tem alguma pergunta?
Ponha as suas questões nos comentários abaixo e farei o meu melhor para responder.
Pega na Álgebra Linear para Aprendizagem de Máquinas!
Desenvolve uma compreensão funcional da álgebra linear
…escrevendo linhas de código em python
Descobre como no meu novo Ebook:
Álgebra Linear para Aprendizagem de Máquinas
Provê tutoriais de auto-estudo em tópicos como:
Normas Vectoriais, Multiplicação de Matrizes, Tensores, Eigendecomposição, SVD, PCA e muito mais…
Compreender a Matemática dos Dados
Skip the Academics. Just Results.
Ver o que há dentro