Última actualización el 9 de agosto de 2019
Muchas operaciones matriciales complejas no pueden resolverse de forma eficiente o con estabilidad utilizando la limitada precisión de los ordenadores.
Las descomposiciones matriciales son métodos que reducen una matriz en partes constituyentes que facilitan el cálculo de operaciones matriciales más complejas. Los métodos de descomposición de matrices, también llamados métodos de factorización de matrices, son un fundamento del álgebra lineal en los ordenadores, incluso para operaciones básicas como la resolución de sistemas de ecuaciones lineales, el cálculo de la inversa y el cálculo del determinante de una matriz.
En este tutorial, descubrirás las descomposiciones matriciales y cómo calcularlas en Python.
Después de completar este tutorial, sabrás:
- Qué es una descomposición matricial y por qué son importantes este tipo de operaciones.
- Cómo calcular una descomposición matricial LU yQR en Python.
- Cómo calcular una descomposición matricial Cholesky en Python.
Comienza tu proyecto con mi nuevo libro Linear Algebra for Machine Learning, que incluye tutoriales paso a paso y los archivos de código fuente de Python para todos los ejemplos.
Comencemos.
- Actualización Mar/2018: Se ha corregido una pequeña errata en la descripción de la descomposición QR.
- Actualización Jul/2019: Se ha corregido una pequeña errata al describir las matrices definidas positivas.
Una suave introducción a las descomposiciones matriciales para el aprendizaje automático
Foto de mickey, algunos derechos reservados.
- Resumen del tutorial
- ¿Necesita ayuda con Álgebra Lineal para el Aprendizaje Automático?
- ¿Qué es una descomposición de la matriz?
- Descomposición matricial LU
- Descomposición de la matriz QR
- Descomposición de Cholesky
- Extensiones
- Lectura adicional
- Libros
- API
- Artículos
- Resumen
- ¡Descubre el Álgebra Lineal para el Aprendizaje Automático!
- Desarrolla una comprensión práctica del álgebra lineal
- Entiende por fin las Matemáticas de los Datos
Resumen del tutorial
Este tutorial está dividido en 4 partes; son:
- ¿Qué es una descomposición matricial?
- Descomposición de matrices LU
- Descomposición de matrices QR
- Descomposición de Cholesky
¿Necesita ayuda con Álgebra Lineal para el Aprendizaje Automático?
Tome mi curso intensivo gratuito de 7 días por correo electrónico ahora (con código de muestra).
Haga clic para inscribirse y también obtenga una versión gratuita del curso en PDF Ebook.
Descargue su minicurso gratuito
¿Qué es una descomposición de la matriz?
Una descomposición de la matriz es una forma de reducir una matriz en sus partes constituyentes.
Es un enfoque que puede simplificar operaciones matriciales más complejas que se pueden realizar en la matriz descompuesta en lugar de en la propia matriz original.
Una analogía común para la descomposición matricial es la factorización de números, como la factorización de 10 en 2 x 5. Por esta razón, la descomposición matricial también se llama factorización de la matriz. Al igual que la factorización de valores reales, hay muchas maneras de descomponer una matriz, por lo que hay una gama de diferentes técnicas de descomposición matricial.
Dos métodos de descomposición matricial simples y ampliamente utilizados son la descomposición matricial LU y la descomposición matricial QR.
A continuación, vamos a echar un vistazo más de cerca a cada uno de estos métodos.
Descomposición matricial LU
La descomposición LU es para matrices cuadradas y descompone una matriz en componentes L y U.
1
|
A = L . U
|
O, sin la notación de puntos.
1
|
A = LU
|
Donde A es la matriz cuadrada que queremos descomponer, L es la matriz triangular inferior y U es la matriz triangular superior.
Los factores L y U son matrices triangulares. La factorización que resulta de la eliminación es A = LU.
– Página 97, Introducción al Álgebra Lineal, Quinta Edición, 2016.
La descomposición LU se encuentra utilizando un proceso numérico iterativo y puede fallar para aquellas matrices que no se pueden descomponer o que se descomponen fácilmente.
Una variación de esta descomposición que es numéricamente más estable para resolver en la práctica se llama la descomposición LUP, o la descomposición LU con pivoteo parcial.
1
|
A = P . L . U
|
Las filas de la matriz padre se reordenan para simplificar el proceso de descomposición y la matriz P adicional especifica una forma de permutar el resultado o devolver el resultado al orden original. También hay otras variaciones de la LU.
La descomposición LU se utiliza a menudo para simplificar la resolución de sistemas de ecuaciones lineales, como encontrar los coeficientes en una regresión lineal, así como en el cálculo del determinante y la inversa de una matriz.
La descomposición LU se puede implementar en Python con la función lu(). Más concretamente, esta función calcula una descomposición LU.
El ejemplo siguiente define primero una matriz cuadrada de 3×3. Se calcula la descomposición LU y luego se reconstruye la matriz original a partir de los componentes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Descomposición LU
from numpy import array
from scipy.linalg import lu
# definir una matriz cuadrada
A = array(, , ])
print(A)
# descomposición LU
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruir
B = P.dot(L).dot(U)
print(B)
|
Al ejecutar el ejemplo se imprime primero la matriz 3×3 definida, luego los componentes P, L y U de la descomposición, y finalmente se reconstruye la matriz original.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
Descomposición de la matriz QR
La descomposición QR es para matrices m x n (no se limita a matrices cuadradas) y descompone una matriz en componentes Q y R.
1
|
A = Q . R
|
O, sin la notación de punto.
1
|
A = QR
|
Donde A es la matriz que queremos descomponer, Q una matriz de tamaño m x m, y R una matriz triangular superior de tamaño m x n.
La descomposición QR se encuentra utilizando un método numérico iterativo que puede fallar para aquellas matrices que no pueden ser descompuestas, o descompuestas fácilmente.
Al igual que la descomposición LU, la descomposición QR se utiliza a menudo para resolver sistemas de ecuaciones lineales, aunque no se limita a las matrices cuadradas.
La descomposición QR se puede implementar en NumPy utilizando la función qr(). Por defecto, la función devuelve las matrices Q y R con dimensiones más pequeñas o «reducidas», lo que resulta más económico. Podemos cambiar esto para devolver los tamaños esperados de m x m para Q y m x n para R especificando el argumento de modo como ‘completo’, aunque esto no es necesario para la mayoría de las aplicaciones.
El ejemplo siguiente define una matriz de 3×2, calcula la descomposición QR y luego reconstruye la matriz original a partir de los elementos descompuestos.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# Descomposición QR
from numpy import array
from numpy.linalg import qr
# definir una matriz 3×2
A = array(, , ])
print(A)
# descomposición QR
Q, R = qr(A, ‘completa’)
print(Q)
print(R)
# reconstruir
B = Q.dot(R)
print(B)
|
Al ejecutar el ejemplo se imprime primero la matriz definida de 3×2, luego los elementos de Q y R, y finalmente la matriz reconstruida que coincide con la que empezamos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Descomposición de Cholesky
La descomposición de Cholesky es para matrices simétricas cuadradas donde todos los valores propios son mayores que cero, las llamadas matrices positivas definidas.
Para nuestros intereses en el aprendizaje automático, nos centraremos en la descomposición de Cholesky para matrices de valor real e ignoraremos los casos cuando se trabaje con números complejos.
La descomposición se define como sigue:
1
|
A = L . L^T
|
O sin la notación de puntos:
1
|
A = LL^T
|
Donde A es la matriz que se descompone, L es la matriz triangular inferior y L^T es la transposición de L.
La descomposición también puede escribirse como el producto de la matriz triangular superior, por ejemplo:
1
|
A = U^T . U
|
Donde U es la matriz triangular superior.
La descomposición de Cholesky se utiliza para resolver mínimos cuadrados lineales para la regresión lineal, así como métodos de simulación y optimización.
Cuando se descomponen matrices simétricas, la descomposición Cholesky es casi dos veces más eficiente que la descomposición LU y debe ser preferida en estos casos.
Aunque las matrices simétricas y definidas positivas son bastante especiales, ocurren con bastante frecuencia en algunas aplicaciones, por lo que es bueno conocer su factorización especial, llamada descomposición Cholesky. Cuando se puede utilizar, la descomposición de Cholesky es aproximadamente un factor de dos más rápido que los métodos alternativos para resolver ecuaciones lineales.
– Página 100, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
La descomposición de Cholesky se puede implementar en NumPy llamando a la función cholesky(). La función sólo devuelve L ya que podemos acceder fácilmente a la transposición L según sea necesario.
El ejemplo siguiente define una matriz simétrica y definida positiva de 3×3 y calcula la descomposición Cholesky, luego se reconstruye la matriz original.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Descomposición Cholesky
from numpy import array
from numpy.linalg import cholesky
# definir una matriz 3×3
A = array(, , ])
print(A)
# descomposición Cholesky
L = cholesky(A)
print(L)
# reconstruir
B = L.dot(L.T)
print(B)
|
Al ejecutar el ejemplo se imprime primero la matriz simétrica, luego la matriz triangular inferior de la descomposición seguida de la matriz reconstruida.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Extensiones
Esta sección enumera algunas ideas para ampliar el tutorial que tal vez desee explorar.
- Crea 5 ejemplos usando cada operación con tus propios datos.
- Busca artículos de aprendizaje automático y encuentra 1 ejemplo de cada operación siendo usada.
Si exploras alguna de estas extensiones, me encantaría saberlo.
Lectura adicional
Esta sección ofrece más recursos sobre el tema si buscas profundizar.
Libros
- Sección 6.6 Descomposiciones de matrices. No Bullshit Guide To Linear Algebra, 2017.
- Lectura 7 QR Factorization, Numerical Linear Algebra, 1997.
- Sección 2.3 LU Decomposition and Its Applications, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Sección 2.10 Descomposición QR, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Sección 2.9 Descomposición de Cholesky, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Lectura 23, Cholesky Decomposition, Numerical Linear Algebra, 1997.
API
- scipy.linalg.lu() API
- numpy.linalg.qr() API
- numpy.linalg.cholesky() API
Artículos
- Descomposición matricial en Wikipedia
- Descomposición LU en Wikipedia
- Descomposición QR en Wikipedia
- Descomposición Cholesky en Wikipedia
Resumen
En este tutorial, has descubierto las descomposiciones matriciales y cómo calcularlas en Python.
Específicamente, aprendiste:
- Qué es una descomposición matricial y por qué son importantes este tipo de operaciones.
- Cómo calcular una descomposición matricial LU yQR en Python.
- Cómo calcular una descomposición matricial Cholesky en Python.
¿Tienes alguna pregunta?
Haz tus preguntas en los comentarios de abajo y haré todo lo posible para responder.
¡Descubre el Álgebra Lineal para el Aprendizaje Automático!
Desarrolla una comprensión práctica del álgebra lineal
…escribiendo líneas de código en python
Descubre cómo en mi nuevo Ebook:
Álgebra Lineal para el Aprendizaje Automático
Proporciona tutoriales de autoestudio sobre temas como:
Normas Vectoriales, Multiplicación de Matrices, Tensores, Eigendecomposición, SVD, PCA y mucho más…
Entiende por fin las Matemáticas de los Datos
Olvida lo académico. Sólo resultados.
Vea lo que hay en el interior