Last Bijgewerkt op 9 augustus 2019
Vele complexe matrixbewerkingen kunnen niet efficiënt of stabiel worden opgelost met behulp van de beperkte precisie van computers.
Matrixdecomposities zijn methoden die een matrix reduceren in samenstellende delen die het eenvoudiger maken om complexere matrixbewerkingen te berekenen. Matrixdecompositiemethoden, ook wel matrixfactorisatiemethoden genoemd, vormen de basis van lineaire algebra in computers, zelfs voor basisbewerkingen zoals het oplossen van stelsels lineaire vergelijkingen, het berekenen van de inverse, en het berekenen van de determinant van een matrix.
In deze tutorial ontdekt u matrixdecomposities en hoe u deze kunt berekenen in Python.
Na het voltooien van deze tutorial weet u:
- Wat een matrixdecompositie is en waarom dit soort bewerkingen belangrijk zijn.
- Hoe u een LU- en QR-matrixdecompositie in Python berekent.
- Hoe u een Cholesky-matrixdecompositie in Python berekent.
Kick-start je project met mijn nieuwe boek Linear Algebra for Machine Learning, inclusief stap-voor-stap tutorials en de Python broncodebestanden voor alle voorbeelden.
Let’s get started.
- Update Mar/2018: Kleine typfout in de beschrijving van QR Decompositie opgelost.
- Update Jul/2019: Kleine typfout bij het beschrijven van positief definiete matrices opgelost.
A Gentle Introduction to Matrix Decompositions for Machine Learning
Foto door mickey, sommige rechten voorbehouden.
- Tutorial Overzicht
- Hulp nodig bij Lineaire Algebra voor Machine Leren?
- Wat is een Matrix Decompositie?
- LU-matrixdecompositie
- QR Matrix Decompositie
- Cholesky-decompositie
- Uitbreidingen
- Verder lezen
- Boeken
- API
- Artikelen
- Samenvatting
- Krijg grip op lineaire algebra voor Machine Learning!
- Ontwikkel een werkend begrip van lineaire algebra
- Begrijp eindelijk de wiskunde van data
Tutorial Overzicht
Deze tutorial is onderverdeeld in 4 delen; deze zijn:
- Wat is een Matrix Decompositie?
- LU Matrix Decompositie
- QR Matrix Decompositie
- Cholesky Decompositie
Hulp nodig bij Lineaire Algebra voor Machine Leren?
Doe nu mijn gratis 7-daagse e-mail stoomcursus (met voorbeeldcode).
Klik om in te schrijven en ontvang ook een gratis PDF Ebook versie van de cursus.
Download Uw GRATIS Mini-Cursus
Wat is een Matrix Decompositie?
Een matrix decompositie is een manier om een matrix te verkleinen in zijn samenstellende delen.
Het is een aanpak die complexere matrixbewerkingen kan vereenvoudigen, die kunnen worden uitgevoerd op de ontbonden matrix in plaats van op de oorspronkelijke matrix zelf.
Een veelgebruikte analogie voor matrixdecompositie is de ontbinding van getallen, zoals de ontbinding van 10 in 2 x 5. Om deze reden wordt matrixdecompositie ook wel matrixfactorisatie genoemd. Net als bij ontbinden in factoren van reële waarden, zijn er vele manieren om een matrix te ontbinden, vandaar dat er een reeks verschillende matrixontledingstechnieken zijn.
Twee eenvoudige en veelgebruikte matrixontbindingsmethoden zijn de LU matrixontbinding en de QR matrixontbinding.
Volgende zullen we elk van deze methoden nader bekijken.
LU-matrixdecompositie
De LU-decompositie is voor vierkante matrices en ontleedt een matrix in L- en U-componenten.
1
|
A = L . U
|
Of, zonder de puntnotatie.
1
|
A = LU
|
Waarbij A de vierkante matrix is die we willen ontleden, L de onderste driehoeksmatrix is en U de bovenste driehoeksmatrix.
De factoren L en U zijn driehoekige matrices. De factorisatie die uit de eliminatie komt is A = LU.
– Blz. 97, Introduction to Linear Algebra, Fifth Edition, 2016.
De LU-decompositie wordt gevonden met behulp van een iteratief numeriek proces en kan mislukken voor die matrices die niet of moeilijk te ontleden zijn.
Een variant van deze decompositie die in de praktijk numeriek stabieler op te lossen is, wordt de LUP-decompositie genoemd, of de LU-decompositie met partiële pivoting.
1
|
A = P . L . U
|
De rijen van de bovenliggende matrix worden opnieuw geordend om het ontbindingsproces te vereenvoudigen en de extra P-matrix specificeert een manier om het resultaat te permuteren of het resultaat terug te brengen naar de oorspronkelijke volgorde. Er zijn ook andere variaties van de LU.
De LU-decompositie wordt vaak gebruikt om het oplossen van stelsels lineaire vergelijkingen te vereenvoudigen, zoals het vinden van de coëfficiënten in een lineaire regressie, maar ook bij het berekenen van de determinant en de inverse van een matrix.
De LU-decompositie kan in Python worden geïmplementeerd met de lu() functie. Meer specifiek berekent deze functie een LU-decompositie.
Het onderstaande voorbeeld definieert eerst een vierkante matrix van 3×3. De LU-decompositie wordt berekend, waarna de oorspronkelijke matrix wordt gereconstrueerd uit de componenten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# LU decompositie
from numpy import array
from scipy.linalg import lu
# definieer een vierkante matrix
A = array(, , ])
print(A)
# LU-decompositie
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruct
B = P.punt(L).punt(U)
print(B)
|
Het uitvoeren van het voorbeeld drukt eerst de gedefinieerde 3×3 matrix af, dan de P, L, en U componenten van de decompositie, en tenslotte wordt de originele matrix gereconstrueerd.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
QR Matrix Decompositie
De QR decompositie is voor m x n matrices (niet beperkt tot vierkante matrices) en ontleedt een matrix in Q- en R-componenten.
1
|
A = Q . R
|
Of, zonder de puntnotatie.
1
|
A = QR
|
Waarbij A de matrix is die we willen ontleden, Q een matrix met de grootte m x m, en R een bovenste driehoeksmatrix met de grootte m x n.
De QR ontleding wordt gevonden met behulp van een iteratieve numerieke methode die kan falen voor matrices die niet of moeilijk te ontleden zijn.
Zoals de LU ontleding, wordt de QR ontleding vaak gebruikt om stelsels van lineaire vergelijkingen op te lossen, hoewel het niet beperkt is tot vierkante matrices.
De QR ontleding kan in NumPy geïmplementeerd worden met behulp van de qr() functie. Standaard retourneert de functie de Q- en R-matrices met kleinere of ‘gereduceerde’ dimensies, wat zuiniger is. We kunnen dit veranderen om de verwachte afmetingen van m x m voor Q en m x n voor R terug te geven door het modusargument als ‘compleet’ op te geven, hoewel dit voor de meeste toepassingen niet nodig is.
Het onderstaande voorbeeld definieert een 3×2 matrix, berekent de QR decompositie, en reconstrueert vervolgens de originele matrix uit de ontlede elementen.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# QR decompositie
from numpy import array
from numpy.linalg import qr
# definieer een 3×2 matrix
A = array(, , ])
print(A)
# QR decompositie
Q, R = qr(A, ‘compleet’)
print(Q)
print(R)
# reconstrueer
B = Q.dot(R)
print(B)
|
Het uitvoeren van het voorbeeld drukt eerst de gedefinieerde 3×2 matrix af, dan de Q en R elementen, en tenslotte de gereconstrueerde matrix die overeenkomt met waar we mee begonnen zijn.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Cholesky-decompositie
De Cholesky-decompositie is voor vierkante symmetrische matrices waarvan alle eigenwaarden groter zijn dan nul, zogenaamde positief definiete matrices.
Voor onze interesse in machinaal leren zullen we ons concentreren op de Cholesky-decompositie voor matrices met reële waarden en de gevallen negeren wanneer we met complexe getallen werken.
De decompositie is als volgt gedefinieerd:
1
|
A = L . L^T
|
Of zonder de puntnotatie:
1
|
A = LL^T
|
Waarbij A de matrix is die wordt ontleed, L de onderste driehoekige matrix is en L^T de getransponeerde van L.
De ontleding kan ook worden geschreven als het product van de bovenste driehoeksmatrix, bijvoorbeeld:
1
|
A = U^T . U
|
Waarbij U de bovenste driehoekige matrix is.
De Cholesky-decompositie wordt gebruikt voor het oplossen van lineaire kleinste kwadraten voor lineaire regressie, en ook voor simulatie- en optimalisatiemethoden.
Bij het ontbinden van symmetrische matrices is de Cholesky-ontbinding bijna twee keer zo efficiënt als de LU-ontbinding en verdient in deze gevallen de voorkeur.
Symmetrische, positief bepaalde matrices zijn weliswaar vrij speciaal, maar ze komen in sommige toepassingen vrij vaak voor, zodat hun speciale factorisatie, de Cholesky-ontbinding genaamd, goed is om te kennen. Als je het kunt gebruiken, is Cholesky-decompositie ongeveer een factor twee sneller dan alternatieve methoden om lineaire vergelijkingen op te lossen.
– Bladzijde 100, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
De Cholesky-decompositie kan in NumPy worden geïmplementeerd door de functie cholesky() aan te roepen. De functie retourneert alleen L, omdat we gemakkelijk toegang hebben tot de L-transponering als dat nodig is.
Het onderstaande voorbeeld definieert een 3×3 symmetrische en positief bepaalde matrix en berekent de Cholesky-decompositie, waarna de oorspronkelijke matrix wordt gereconstrueerd.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Cholesky decompositie
from numpy import array
from numpy.linalg import cholesky
# definieer een 3×3 matrix
A = array(, , ])
print(A)
# Cholesky decompositie
L = cholesky(A)
print(L)
# reconstrueer
B = L.dot(L.T)
print(B)
|
Het uitvoeren van het voorbeeld drukt eerst de symmetrische matrix af, dan de lagere driehoeksmatrix uit de decompositie gevolgd door de gereconstrueerde matrix.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Uitbreidingen
In deze sectie vindt u een aantal ideeën om de handleiding uit te breiden, die u wellicht wilt onderzoeken.
- Maak 5 voorbeelden van elke bewerking met je eigen data.
- Zoek machine learning papers en vind 1 voorbeeld van elke bewerking die gebruikt wordt.
Als je een van deze uitbreidingen verkent, zou ik dat graag willen weten.
Verder lezen
Hier vindt u meer bronnen over dit onderwerp als u dieper op het onderwerp wilt ingaan.
Boeken
- Sectie 6.6 Matrixontbindingen. No Bullshit Guide To Linear Algebra, 2017.
- Lecture 7 QR Factorization, Numerical Linear Algebra, 1997.
- Sectie 2.3 LU Decomposition and Its Applications, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Sectie 2.10 QR Decompositie, Numerieke Recepten: The Art of Scientific Computing, Third Edition, 2007.
- Sectie 2.9 Cholesky Decomposition, 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
Artikelen
- Matrixontleding op Wikipedia
- LU-ontleding op Wikipedia
- QR-ontleding op Wikipedia
- Cholesky-ontleding op Wikipedia
Samenvatting
In deze tutorial, ontdekte je matrixdecomposities en hoe je ze in Python kunt berekenen.
In het bijzonder hebt u geleerd:
- Wat een matrixdecompositie is en waarom dit soort bewerkingen belangrijk zijn.
- Hoe u een LU- en QR-matrixdecompositie in Python berekent.
- Hoe u een Cholesky-matrixdecompositie in Python berekent.
Heeft u nog vragen?
Stel uw vragen in de commentaren hieronder en ik zal mijn best doen om ze te beantwoorden.
Krijg grip op lineaire algebra voor Machine Learning!
Ontwikkel een werkend begrip van lineaire algebra
…door regels code te schrijven in python
Ontdek hoe in mijn nieuwe Ebook:
Linear Algebra for Machine Learning
Het biedt zelfstudie tutorials over onderwerpen als:
Vector Norms, Matrix Multiplication, Tensors, Eigendecompositie, SVD, PCA en nog veel meer…
Begrijp eindelijk de wiskunde van data
Skip de academici.
Zie wat er in staat