Tweet Share Share

Last Updated on August 9, 2019

Viele komplexe Matrixoperationen können mit der begrenzten Genauigkeit von Computern nicht effizient oder stabil gelöst werden.

Matrixzerlegungen sind Methoden, die eine Matrix in ihre Bestandteile zerlegen und so die Berechnung komplexerer Matrixoperationen erleichtern. Matrixzerlegungsmethoden, auch Matrixfaktorisierungsmethoden genannt, sind eine Grundlage der linearen Algebra im Computer, auch für grundlegende Operationen wie das Lösen von linearen Gleichungssystemen, die Berechnung der Inversen und die Berechnung der Determinante einer Matrix.

In diesem Tutorial lernen Sie Matrixzerlegungen kennen und wie man sie in Python berechnet.

Nach Abschluss dieses Tutorials wissen Sie:

  • Was eine Matrixzerlegung ist und warum diese Art von Operationen wichtig ist.
  • Wie man eine LU- undQR-Matrix-Zerlegung in Python berechnet.
  • Wie man eine Cholesky-Matrix-Zerlegung in Python berechnet.

Starten Sie Ihr Projekt mit meinem neuen Buch „Lineare Algebra für maschinelles Lernen“, das Schritt-für-Schritt-Tutorials und die Python-Quellcodedateien für alle Beispiele enthält.

Lassen Sie uns loslegen.

  • Update Mar/2018: Kleiner Tippfehler in der Beschreibung der QR-Zerlegung behoben.
  • Update Jul/2019: Kleiner Tippfehler bei der Beschreibung von positiv definitiven Matrizen behoben.
A Gentle Introduction to Matrix Decompositions for Machine Learning

A Gentle Introduction to Matrix Decompositions for Machine Learning
Foto von mickey, einige Rechte vorbehalten.

Übersicht über das Tutorial

Dieses Tutorial ist in 4 Teile gegliedert; sie sind:

  1. Was ist eine Matrixdekomposition?
  2. LU-Matrixzerlegung
  3. QR-Matrixzerlegung
  4. Cholesky-Zerlegung

Brauchen Sie Hilfe bei der Linearen Algebra für maschinelles Lernen?

Machen Sie jetzt meinen kostenlosen 7-tägigen E-Mail-Crashkurs (mit Beispielcode).

Klicken Sie, um sich anzumelden und auch eine kostenlose PDF-Ebook-Version des Kurses zu erhalten.

Laden Sie Ihren KOSTENLOSEN Minikurs herunter

Was ist eine Matrixzerlegung?

Eine Matrixzerlegung ist eine Möglichkeit, eine Matrix in ihre Bestandteile zu zerlegen.

Es ist ein Ansatz, der komplexere Matrixoperationen vereinfachen kann, die an der zerlegten Matrix statt an der ursprünglichen Matrix selbst durchgeführt werden können.

Eine häufige Analogie für die Matrixzerlegung ist die Faktorisierung von Zahlen, wie z.B. die Faktorisierung von 10 in 2 x 5. Aus diesem Grund wird die Matrixzerlegung auch Matrixfaktorisierung genannt. Wie bei der Faktorisierung von reellen Werten gibt es viele Möglichkeiten, eine Matrix zu zerlegen, daher gibt es eine Reihe verschiedener Matrixzerlegungsmethoden.

Zwei einfache und weit verbreitete Matrixzerlegungsmethoden sind die LU-Matrixzerlegung und die QR-Matrixzerlegung.

Nachfolgend werden wir uns jede dieser Methoden genauer ansehen.

LU-Matrixzerlegung

Die LU-Zerlegung ist für quadratische Matrizen und zerlegt eine Matrix in L- und U-Komponenten.

1
A = L . U

Oder, ohne die Punktschreibweise.

1
A = LU

Wobei A die Quadratmatrix ist, die wir zerlegen wollen, L ist die untere Dreiecksmatrix und U ist die obere Dreiecksmatrix.

Die Faktoren L und U sind Dreiecksmatrizen. Die Faktorisierung, die sich aus der Eliminierung ergibt, ist A = LU.

– Seite 97, Introduction to Linear Algebra, Fifth Edition, 2016.

Die LU-Zerlegung wird mit Hilfe eines iterativen numerischen Prozesses gefunden und kann bei solchen Matrizen scheitern, die nicht oder nur schwer zerlegt werden können.

Eine Variante dieser Zerlegung, die in der Praxis numerisch stabiler zu lösen ist, heißt LUP-Zerlegung oder LU-Zerlegung mit partieller Pivotisierung.

1
A = P . L . U

Die Zeilen der übergeordneten Matrix werden neu geordnet, um den Zerlegungsprozess zu vereinfachen, und die zusätzliche P-Matrix gibt eine Möglichkeit an, das Ergebnis zu permutieren oder das Ergebnis in die ursprüngliche Reihenfolge zurückzubringen. Es gibt auch andere Variationen der LU.

Die LU-Zerlegung wird oft verwendet, um das Lösen von Systemen linearer Gleichungen zu vereinfachen, wie z.B. das Finden der Koeffizienten in einer linearen Regression, sowie bei der Berechnung der Determinante und der Inversen einer Matrix.

Die LU-Zerlegung kann in Python mit der Funktion lu() implementiert werden. Genauer gesagt, berechnet diese Funktion eine LPU-Zerlegung.

Das folgende Beispiel definiert zunächst eine 3×3 Quadratmatrix. Die LU-Zerlegung wird berechnet, dann wird die ursprüngliche Matrix aus den Komponenten rekonstruiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# LU-Zerlegung
from numpy import array
from scipy.linalg import lu
# define a square matrix
A = array(, , ])
print(A)
# LU decomposition
P, L, U = lu(A)
print(P)
print(L)
print(U)
# rekonstruieren
B = P.dot(L).dot(U)
print(B)

Das Ausführen des Beispiels gibt zuerst die definierte 3×3-Matrix aus, dann die P-, L- und U-Komponenten der Zerlegung, und schließlich wird die ursprüngliche Matrix rekonstruiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

]
]
]
]
]

QR-Matrixzerlegung

Die QR-Zerlegung ist für m x n Matrizen (nicht auf quadratische Matrizen beschränkt) und zerlegt eine Matrix in Q- und R-Komponenten.

1
A = Q . R

Oder, ohne die Punktschreibweise.

1
A = QR

Wobei A die Matrix ist, die wir zerlegen wollen, Q eine Matrix mit der Größe m x m und R eine obere Dreiecksmatrix mit der Größe m x n ist.

Die QR-Zerlegung wird mit Hilfe einer iterativen numerischen Methode gefunden, die bei Matrizen, die nicht oder nur schwer zerlegt werden können, fehlschlagen kann.

Wie die LU-Zerlegung wird die QR-Zerlegung häufig zur Lösung von Systemen linearer Gleichungen verwendet, ist aber nicht auf quadratische Matrizen beschränkt.

Die QR-Zerlegung kann in NumPy mit der Funktion qr() implementiert werden. Standardmäßig gibt die Funktion die Q- und R-Matrizen mit kleineren oder „reduzierten“ Dimensionen zurück, was ökonomischer ist. Wir können dies ändern, um die erwarteten Größen von m x m für Q und m x n für R zurückzugeben, indem wir das Argument mode als ‚complete‘ angeben, obwohl dies für die meisten Anwendungen nicht erforderlich ist.

Das folgende Beispiel definiert eine 3×2-Matrix, berechnet die QR-Zerlegung und rekonstruiert dann die ursprüngliche Matrix aus den zerlegten Elementen.

1
2
3
4
5
6
7
8
9
10
11
12
13

# QR-Zerlegung
from numpy import array
from numpy.linalg import qr
# define a 3×2 matrix
A = array(, , ])
print(A)
# QR decomposition
Q, R = qr(A, ‚complete‘)
print(Q)
print(R)
# reconstruct
B = Q.Punkt(R)
print(B)

Das Ausführen des Beispiels druckt zuerst die definierte 3×2-Matrix, dann die Elemente Q und R und schließlich die rekonstruierte Matrix, die mit der Ausgangsmatrix übereinstimmt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

]
]
]
]

Cholesky-Zerlegung

Die Cholesky-Zerlegung gilt für quadratsymmetrische Matrizen, bei denen alle Eigenwerte größer als Null sind, sogenannte positiv definite Matrizen.

Für unser Interesse am maschinellen Lernen werden wir uns auf die Cholesky-Zerlegung für reellwertige Matrizen konzentrieren und die Fälle, in denen wir mit komplexen Zahlen arbeiten, ignorieren.

Die Zerlegung ist wie folgt definiert:

1
A = L . L^T

Oder ohne die Punktschreibweise:

1
A = LL^T

Wobei A die zu zerlegende Matrix ist, L ist die untere Dreiecksmatrix und L^T ist die Transponierte von L.

Die Zerlegung kann auch als Produkt der oberen Dreiecksmatrix geschrieben werden, zum Beispiel:

1
A = U^T . U

Wobei U die obere Dreiecksmatrix ist.

Die Cholesky-Zerlegung wird zur Lösung der linearen kleinsten Quadrate für die lineare Regression sowie für Simulations- und Optimierungsverfahren verwendet.

Bei der Zerlegung von symmetrischen Matrizen ist die Cholesky-Zerlegung fast doppelt so effizient wie die LU-Zerlegung und sollte in diesen Fällen bevorzugt werden.

Symmetrische, positiv definite Matrizen sind zwar etwas Besonderes, kommen aber in einigen Anwendungen recht häufig vor, so dass ihre spezielle Faktorisierung, die Cholesky-Zerlegung, gut zu kennen ist. Wenn man sie verwenden kann, ist die Cholesky-Zerlegung etwa um den Faktor zwei schneller als alternative Methoden zum Lösen linearer Gleichungen.

– Seite 100, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.

Die Cholesky-Zerlegung kann in NumPy durch Aufruf der Funktion cholesky() implementiert werden. Die Funktion gibt nur L zurück, da wir bei Bedarf leicht auf die L-Transponierte zugreifen können.

Das folgende Beispiel definiert eine 3×3 symmetrische und positiv definite Matrix und berechnet die Cholesky-Zerlegung, anschließend wird die ursprüngliche Matrix rekonstruiert.

1
2
3
4
5
6
7
8
9
10
11
12

# Cholesky-Zerlegung
from numpy import array
from numpy.linalg import cholesky
# define a 3×3 matrix
A = array(, , ])
print(A)
# Cholesky decomposition
L = cholesky(A)
print(L)
# reconstruct
B = L.dot(L.T)
print(B)

Das Ausführen des Beispiels gibt zuerst die symmetrische Matrix aus, dann die untere Dreiecksmatrix aus der Zerlegung, gefolgt von der rekonstruierten Matrix.

1
2
3
4
5
6
7
8
9
10
11

]
]
]

Erweiterungen

Dieser Abschnitt listet einige Ideen zur Erweiterung des Tutorials auf, die Sie vielleicht erkunden möchten.

  • Erstelle 5 Beispiele für jede Operation mit deinen eigenen Daten.
  • Suche nach Arbeiten zum maschinellen Lernen und finde 1 Beispiel für die Verwendung jeder Operation.

Wenn du eine dieser Erweiterungen ausprobierst, würde ich das gerne wissen.

Weitere Lektüre

Dieser Abschnitt bietet weitere Ressourcen zum Thema, wenn Sie tiefer einsteigen wollen.

Bücher

  • Abschnitt 6.6 Matrixzerlegungen. 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: The Art of Scientific Computing, Third Edition, 2007.
  • Abschnitt 2.10 QR-Zerlegung, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
  • Abschnitt 2.9 Cholesky-Zerlegung, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
  • Lecture 23, Cholesky Decomposition, Numerical Linear Algebra, 1997.

API

  • scipy.linalg.lu() API
  • numpy.linalg.qr() API
  • numpy.linalg.cholesky() API

Artikel

  • Matrixzerlegung auf Wikipedia
  • LU-Zerlegung auf Wikipedia
  • QR-Zerlegung auf Wikipedia
  • Cholesky-Zerlegung auf Wikipedia

Zusammenfassung

In diesem Tutorial, haben Sie Matrizenzerlegungen kennengelernt und erfahren, wie man sie in Python berechnet.

Insbesondere haben Sie gelernt:

  • Was eine Matrixzerlegung ist und warum diese Arten von Operationen wichtig sind.
  • Wie man eine LU- undQR-Matrixzerlegung in Python berechnet.
  • Wie man eine Cholesky-Matrixzerlegung in Python berechnet.

Haben Sie Fragen?
Stellen Sie Ihre Fragen in den Kommentaren unten und ich werde mein Bestes tun, um zu antworten.

Get a Handle on Linear Algebra for Machine Learning!

Lineare Algebra für maschinelles Lernen

Entwickeln Sie ein funktionierendes Verständnis der linearen Algebra

…durch das Schreiben von Codezeilen in Python

Entdecke wie in meinem neuen Ebook:
Lineare Algebra für maschinelles Lernen

Es bietet Tutorials zum Selbststudium zu Themen wie:
Vektornormen, Matrixmultiplikation, Tensoren, Eigendekomposition, SVD, PCA und vieles mehr…

Verstehe endlich die Mathematik der Daten

Überspringe die Akademiker. Just Results.

See What’s Inside

Tweet Share Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.