Dernière mise à jour le 9 août 2019
De nombreuses opérations matricielles complexes ne peuvent pas être résolues efficacement ou avec stabilité en utilisant la précision limitée des ordinateurs.
Les décompositions matricielles sont des méthodes qui réduisent une matrice en parties constitutives qui facilitent le calcul d’opérations matricielles plus complexes. Les méthodes de décomposition matricielle, également appelées méthodes de factorisation matricielle, sont une base de l’algèbre linéaire dans les ordinateurs, même pour des opérations de base telles que la résolution de systèmes d’équations linéaires, le calcul de l’inverse et le calcul du déterminant d’une matrice.
Dans ce tutoriel, vous découvrirez les décompositions de matrice et comment les calculer en Python.
Après avoir terminé ce tutoriel, vous saurez :
- Ce qu’est une décomposition de matrice et pourquoi ces types d’opérations sont importants.
- Comment calculer une décomposition de matrice LU etQR en Python.
- Comment calculer une décomposition de matrice Cholesky en Python.
Démarrez votre projet avec mon nouveau livre Linear Algebra for Machine Learning, comprenant des tutoriels étape par étape et les fichiers de code source Python pour tous les exemples.
Démarrons.
- Mise à jour Mar/2018 : Correction d’une petite coquille dans la description de la décomposition QR.
- Mise à jour Jul/2019 : Correction d’une petite coquille lors de la description des matrices définies positives.
Une douce introduction aux décompositions matricielles pour l’apprentissage automatique
Photo de mickey, certains droits réservés.
- Survol du tutoriel
- Vous avez besoin d’aide avec l’algèbre linéaire pour l’apprentissage automatique ?
- Qu’est-ce qu’une décomposition matricielle ?
- Décomposition de matrice LU
- Décomposition de matrice QR
- Décomposition de Cholesky
- Extensions
- Lectures complémentaires
- Livres
- API
- Articles
- Sommaire
- Maîtrisez l’algèbre linéaire pour l’apprentissage automatique !
- Développez une compréhension pratique de l’algèbre linéaire
- Comprenez enfin les mathématiques des données
Survol du tutoriel
Ce tutoriel est divisé en 4 parties ; ce sont :
- Qu’est-ce qu’une décomposition matricielle ?
- Décomposition matricielle LU
- Décomposition matricielle QR
- Décomposition Cholesky
Vous avez besoin d’aide avec l’algèbre linéaire pour l’apprentissage automatique ?
Prenez dès maintenant mon cours intensif gratuit de 7 jours par courriel (avec un exemple de code).
Cliquez pour vous inscrire et obtenir également une version PDF Ebook gratuite du cours.
Téléchargez votre mini-cours GRATUIT
Qu’est-ce qu’une décomposition matricielle ?
Une décomposition matricielle est une façon de réduire une matrice en ses parties constituantes.
C’est une approche qui peut simplifier des opérations matricielles plus complexes qui peuvent être effectuées sur la matrice décomposée plutôt que sur la matrice originale elle-même.
Une analogie commune pour la décomposition matricielle est la factorisation des nombres, comme la factorisation de 10 en 2 x 5. Pour cette raison, la décomposition matricielle est également appelée factorisation matricielle. Comme la factorisation des valeurs réelles, il existe de nombreuses façons de décomposer une matrice, d’où l’existence d’une gamme de différentes techniques de décomposition matricielle.
Deux méthodes de décomposition matricielle simples et largement utilisées sont la décomposition matricielle LU et la décomposition matricielle QR.
A la suite, nous allons examiner de plus près chacune de ces méthodes.
Décomposition de matrice LU
La décomposition LU concerne les matrices carrées et décompose une matrice en L et U composantes.
1
|
A = L . U
|
Ou, sans la notation par points.
1
|
A = LU
|
Où A est la matrice carrée que l’on souhaite décomposer, L est la matrice triangulaire inférieure et U est la matrice triangulaire supérieure.
Les facteurs L et U sont des matrices triangulaires. La factorisation qui résulte de l’élimination est A = LU.
– Page 97, Introduction à l’algèbre linéaire, cinquième édition, 2016.
La décomposition LU est trouvée en utilisant un processus numérique itératif et peut échouer pour les matrices qui ne peuvent pas être décomposées ou décomposées facilement.
Une variation de cette décomposition qui est numériquement plus stable à résoudre en pratique est appelée la décomposition LUP, ou la décomposition LU avec pivotement partiel.
1
|
A = P . L . U
|
Les lignes de la matrice mère sont réordonnées pour simplifier le processus de décomposition et la matrice P supplémentaire spécifie une façon de permuter le résultat ou de retourner le résultat à l’ordre original. Il existe également d’autres variations de la LU.
La décomposition LU est souvent utilisée pour simplifier la résolution de systèmes d’équations linéaires, comme trouver les coefficients d’une régression linéaire, ainsi que pour calculer le déterminant et l’inverse d’une matrice.
La décomposition LU peut être implémentée en Python avec la fonction lu(). Plus précisément, cette fonction calcule une décomposition LU.
L’exemple ci-dessous définit d’abord une matrice carrée 3×3. La décomposition LU est calculée, puis la matrice d’origine est reconstruite à partir des composantes.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Décomposition LU
from numpy import array
from scipy.linalg import lu
# définir une matrice carrée
A = array(, , ])
print(A)
# Décomposition LU
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruct
B = P.dot(L).dot(U)
print(B)
|
L’exécution de l’exemple imprime d’abord la matrice 3×3 définie, puis les composantes P, L et U de la décomposition, et enfin la matrice originale est reconstruite.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
Décomposition de matrice QR
La décomposition QR concerne les matrices m x n (non limitée aux matrices carrées) et décompose une matrice en composantes Q et R.
1
|
A = Q . R
|
Ou, sans la notation par points.
1
|
A = QR
|
Où A est la matrice que l’on souhaite décomposer, Q une matrice de taille m x m, et R une matrice triangulaire supérieure de taille m x n.
La décomposition QR est trouvée en utilisant une méthode numérique itérative qui peut échouer pour les matrices qui ne peuvent pas être décomposées, ou décomposées facilement.
Comme la décomposition LU, la décomposition QR est souvent utilisée pour résoudre des systèmes d’équations linéaires, bien qu’elle ne soit pas limitée aux matrices carrées.
La décomposition QR peut être implémentée dans NumPy en utilisant la fonction qr(). Par défaut, la fonction renvoie les matrices Q et R avec des dimensions plus petites ou ‘réduites’ qui sont plus économiques. Nous pouvons changer cela pour retourner les tailles attendues de m x m pour Q et m x n pour R en spécifiant l’argument mode comme ‘complet’, bien que cela ne soit pas nécessaire pour la plupart des applications.
L’exemple ci-dessous définit une matrice 3×2, calcule la décomposition QR, puis reconstruit la matrice originale à partir des éléments décomposés.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# QR decomposition
from numpy import array
from numpy.linalg import qr
# définir une matrice 3×2
A = array(, , ])
print(A)
# Décomposition QR
Q, R = qr(A, ‘complete’)
print(Q)
print(R)
# reconstruire
B = Q.dot(R)
print(B)
|
L’exécution de l’exemple imprime d’abord la matrice 3×2 définie, puis les éléments Q et R, et enfin la matrice reconstruite qui correspond à ce avec quoi on a commencé.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Décomposition de Cholesky
La décomposition de Cholesky concerne les matrices symétriques carrées dont toutes les valeurs propres sont supérieures à zéro, appelées matrices définies positives.
Pour nos intérêts en apprentissage automatique, nous nous concentrerons sur la décomposition de Cholesky pour les matrices à valeurs réelles et nous ignorerons les cas où l’on travaille avec des nombres complexes.
La décomposition est définie comme suit :
1
|
A = L . L^T
|
Ou sans la notation par points :
1
|
A = LL^T
|
où A est la matrice décomposée, L est la matrice triangulaire inférieure et L^T est la transposée de L.
La décomposition peut aussi s’écrire comme le produit de la matrice triangulaire supérieure, par exemple :
1
|
A = U^T . U
|
Où U est la matrice triangulaire supérieure.
La décomposition de Cholesky est utilisée pour résoudre les moindres carrés linéaires pour la régression linéaire, ainsi que des méthodes de simulation et d’optimisation.
Lors de la décomposition de matrices symétriques, la décomposition de Cholesky est presque deux fois plus efficace que la décomposition LU et devrait être préférée dans ces cas.
Bien que les matrices symétriques définies positives soient assez spéciales, elles apparaissent assez fréquemment dans certaines applications, donc leur factorisation spéciale, appelée décomposition de Cholesky, est bonne à connaître. Lorsque vous pouvez l’utiliser, la décomposition de Cholesky est environ un facteur de deux plus rapide que les méthodes alternatives pour résoudre les équations linéaires.
– Page 100, Numerical Recipes : The Art of Scientific Computing, troisième édition, 2007.
La décomposition de Cholesky peut être mise en œuvre dans NumPy en appelant la fonction cholesky(). La fonction ne renvoie que L car nous pouvons facilement accéder à la transposée L si nécessaire.
L’exemple ci-dessous définit une matrice 3×3 symétrique et définie positive et calcule la décomposition de Cholesky, puis la matrice originale est reconstruite.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Décomposition de Cholesky
from numpy import array
from numpy.linalg import cholesky
# définir une matrice 3×3
A = array(, , ])
print(A)
# Décomposition de Cholesky
L = cholesky(A)
print(L)
# reconstruire
B = L.dot(L.T)
print(B)
|
L’exécution de l’exemple imprime d’abord la matrice symétrique, puis la matrice triangulaire inférieure issue de la décomposition suivie de la matrice reconstruite.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Extensions
Cette section énumère quelques idées d’extension du tutoriel que vous pourriez souhaiter explorer.
- Créer 5 exemples utilisant chaque opération avec vos propres données.
- Rechercher des articles sur l’apprentissage automatique et trouver 1 exemple d’utilisation de chaque opération.
Si vous explorez l’une de ces extensions, j’aimerais le savoir.
Lectures complémentaires
Cette section fournit plus de ressources sur le sujet si vous cherchez à approfondir.
Livres
- Section 6.6 Décompositions de matrices. No Bullshit Guide To Linear Algebra, 2017.
- Lecture 7 QR Factorisation, Numerical Linear Algebra, 1997.
- Section 2.3 LU Decomposition and Its Applications, Numerical Recipes : The Art of Scientific Computing, troisième édition, 2007.
- Section 2.10 Décomposition QR, Recettes numériques : The Art of Scientific Computing, troisième édition, 2007.
- Section 2.9 Décomposition de Cholesky, Recettes numériques : L’art du calcul scientifique, troisième édition, 2007.
- Lecture 23, Décomposition de Cholesky, Algèbre linéaire numérique, 1997.
API
- scipy.linalg.lu() API
- numpy.linalg.qr() API
- numpy.linalg.API cholesky()
Articles
- Décomposition matricielle sur Wikipedia
- Décomposition LU sur Wikipedia
- Décomposition QR sur Wikipedia
- Décomposition cholesky sur Wikipedia
Sommaire
Dans ce tutoriel, vous avez découvert les décompositions de matrices et comment les calculer en Python.
Spécifiquement, vous avez appris :
- Ce qu’est une décomposition matricielle et pourquoi ces types d’opérations sont importants.
- Comment calculer une décomposition matricielle LU etQR en Python.
- Comment calculer une décomposition matricielle Cholesky en Python.
Avez-vous des questions ?
Posez vos questions dans les commentaires ci-dessous et je ferai de mon mieux pour y répondre.
Maîtrisez l’algèbre linéaire pour l’apprentissage automatique !
Développez une compréhension pratique de l’algèbre linéaire
…en écrivant des lignes de code en python
Découvrez comment dans mon nouvel Ebook:
Linear Algebra for Machine Learning
Il fournit des tutoriels d’auto-apprentissage sur des sujets tels que:
Normes vectorielles, multiplication matricielle, tenseurs, Eigendecomposition, SVD, PCA et bien plus encore…
Comprenez enfin les mathématiques des données
Skip les universitaires. Juste des résultats.
Voyez ce qu’il y a dedans