Tweet Share Share
Ultima actualizare la 9 august 2019
Multe operații matriciale complexe nu pot fi rezolvate eficient sau cu stabilitate folosind precizia limitată a calculatoarelor.
Decompunerile matriciale sunt metode care reduc o matrice în părți constitutive care facilitează calcularea unor operații matriciale mai complexe. Metodele de descompunere a matricelor, numite și metode de factorizare a matricelor, reprezintă un fundament al algebrei liniare în calculatoare, chiar și pentru operații de bază, cum ar fi rezolvarea sistemelor de ecuații liniare, calculul inversei și calculul determinantului unei matrice.
În acest tutorial, veți descoperi descompunerea matricelor și cum să le calculați în Python.
După terminarea acestui tutorial, veți ști:
- Ce este o descompunere de matrice și de ce sunt importante aceste tipuri de operații.
- Cum să calculați o descompunere a matricei LU șiQR în Python.
- Cum să calculați o descompunere a matricei Cholesky în Python.
Dă startul proiectului tău cu noua mea carte Linear Algebra for Machine Learning, care include tutoriale pas cu pas și fișierele de cod sursă Python pentru toate exemplele.
Să începem.
- Update Mar/2018: Fixed small typo in the description of QR Decomposition.
- Update Jul/2019: Fixed a small typo when describing positive definite matrices.
A Gentle Introduction to Matrix Decompositions for Machine Learning
Photo by mickey, some rights reserved.
- Tutorial Overview
- Necesitați ajutor cu Linear Algebra for Machine Learning?
- Ce este o descompunere a matricei?
- Decompoziția matricei LU
- Decompoziția matricei QR
- Decompoziția Cholesky
- Extensiuni
- Lecturi suplimentare
- Cărți
- API
- Articole
- Rezumat
- Cunoașteți algebra liniară pentru învățare automată!
- Dezvoltați o înțelegere operațională a algebrei liniare
- Înțelegeți în sfârșit matematica datelor
Tutorial Overview
Acest tutorial este împărțit în 4 părți; acestea sunt:
- Ce este o descompunere de matrice?
- LU Matrix Decomposition
- QR Matrix Decomposition
- Cholesky Decomposition
Necesitați ajutor cu Linear Algebra for Machine Learning?
Faceți acum cursul meu gratuit de 7 zile prin e-mail (cu cod de probă).
Click pentru a vă înscrie și pentru a obține, de asemenea, o versiune gratuită a cursului în format PDF Ebook.
Download Your FREE Mini-Course
Ce este o descompunere a matricei?
O descompunere a matricei este o modalitate de a reduce o matrice în părțile sale constitutive.
Este o abordare care poate simplifica operațiile matriciale mai complexe care pot fi efectuate pe matricea descompusă mai degrabă decât pe matricea originală însăși.
O analogie comună pentru descompunerea matricelor este factorizarea numerelor, cum ar fi factorizarea lui 10 în 2 x 5. Din acest motiv, descompunerea matricelor se mai numește și factorizarea matricelor. La fel ca și factorizarea valorilor reale, există multe moduri de a descompune o matrice, de aceea există o serie de tehnici diferite de descompunere a matricelor.
Două metode simple și utilizate pe scară largă de descompunere a matricelor sunt descompunerea matricelor LU și descompunerea matricelor QR.
În continuare, vom examina mai îndeaproape fiecare dintre aceste metode.
Decompoziția matricei LU
Decompoziția LU este destinată matricelor pătrate și descompune o matrice în componentele L și U.
1
|
A = L . U
|
Sau, fără notația cu puncte.
1
|
A = LU
|
Unde A este matricea pătrată pe care dorim să o descompunem, L este matricea triunghiulară inferioară, iar U este matricea triunghiulară superioară.
Factorii L și U sunt matrici triunghiulare. Factorizarea care rezultă în urma eliminării este A = LU.
– Pagina 97, Introduction to Linear Algebra, Ediția a V-a, 2016.
Descompunerea LU se găsește folosind un proces numeric iterativ și poate eșua pentru acele matrici care nu pot fi descompuse sau se descompun ușor.
O variantă a acestei descompuneri care este mai stabilă numeric pentru rezolvare în practică se numește descompunerea LUP, sau descompunerea LU cu pivotare parțială.
1
|
A = P . L . U
|
Rândurile matricei părinte sunt reordonate pentru a simplifica procesul de descompunere, iar matricea suplimentară P specifică o modalitate de permutare a rezultatului sau de readucere a rezultatului în ordinea inițială. Există și alte variante ale LU.
Descompunerea LU este adesea utilizată pentru a simplifica rezolvarea sistemelor de ecuații liniare, cum ar fi găsirea coeficienților într-o regresie liniară, precum și în calcularea determinantului și a inversei unei matrice.
Descompunerea LU poate fi implementată în Python cu funcția lu(). Mai exact, această funcție calculează o descompunere LPU.
Exemplul de mai jos definește mai întâi o matrice pătrată 3×3. Se calculează descompunerea LU, apoi matricea originală este reconstruită din componente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# Descompunerea LU
de la numpy import array
de la numpy import array
de la scipy.linalg import lu
# definește o matrice pătrată
A = array(, , , ])
print(A)
# descompunerea LU
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruiește
B = P.dot(L).dot(U)
print(B)
|
Executarea exemplului tipărește mai întâi matricea 3×3 definită, apoi componentele P, L și U ale descompunerii, iar în final se reconstruiește matricea originală.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
Decompoziția matricei QR
Decompoziția QR este pentru matrici m x n (nu se limitează la matrici pătrate) și descompune o matrice în componentele Q și R.
1
|
A = Q . R
|
Sau, fără notația cu puncte.
1
|
A = QR
|
Unde A este matricea pe care dorim să o descompunem, Q o matrice cu dimensiunea m x m, iar R este o matrice triunghiulară superioară cu dimensiunea m x n.
Descompunerea QR se găsește folosind o metodă numerică iterativă care poate eșua pentru acele matrici care nu pot fi descompuse, sau care pot fi descompuse cu ușurință.
Ca și descompunerea LU, descompunerea QR este adesea folosită pentru a rezolva sisteme de ecuații liniare, deși nu este limitată la matrici pătrate.
Descompunerea QR poate fi implementată în NumPy folosind funcția qr(). În mod implicit, funcția returnează matricile Q și R cu dimensiuni mai mici sau „reduse”, ceea ce este mai economic. Putem schimba acest lucru pentru a returna dimensiunile așteptate de m x m pentru Q și m x n pentru R prin specificarea argumentului mode ca fiind ‘complete’, deși acest lucru nu este necesar pentru majoritatea aplicațiilor.
Exemplul de mai jos definește o matrice 3×2, calculează descompunerea QR, apoi reconstruiește matricea originală din elementele descompuse.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# QR decomposition
from numpy import array
from numpy.linalg import qr
# definește o matrice 3×2
A = array(, , , ])
print(A)
# QR decomposition
> Q, R = qr(A, ‘complete’)
print(Q)
print(R)
# reconstruct
> B = Q.dot(R)
print(B)
|
Executarea exemplului tipărește mai întâi matricea 3×2 definită, apoi elementele Q și R, apoi, în final, matricea reconstruită care se potrivește cu cea cu care am început.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Decompoziția Cholesky
Decompoziția Cholesky este pentru matrici pătrate simetrice în care toate valorile proprii sunt mai mari decât zero, așa-numitele matrici definite pozitiv.
Pentru interesele noastre în învățarea automată, ne vom concentra pe descompunerea Cholesky pentru matrici cu valori reale și vom ignora cazurile în care se lucrează cu numere complexe.
Descompunerea este definită după cum urmează:
1
|
A = L . L^T
|
Sau fără notația cu puncte:
1
|
A = LL^T
|
Unde A este matricea care se descompune, L este matricea triunghiulară inferioară, iar L^T este transpunerea lui L.
Descompunerea poate fi scrisă și ca produs al matricei triunghiulare superioare, de exemplu:
1
|
A = U^T . U
|
Unde U este matricea triunghiulară superioară.
Decompoziția Cholesky este utilizată pentru rezolvarea celor mai mici pătrate liniare pentru regresie liniară, precum și pentru metode de simulare și optimizare.
La descompunerea matricelor simetrice, descompunerea Cholesky este aproape de două ori mai eficientă decât descompunerea LU și ar trebui preferată în aceste cazuri.
În timp ce matricile simetrice, definite pozitiv, sunt mai degrabă speciale, ele apar destul de frecvent în unele aplicații, astfel încât este bine să se cunoască factorizarea lor specială, numită descompunerea Cholesky. Atunci când o puteți utiliza, descompunerea Cholesky este de aproximativ un factor de două ori mai rapidă decât metodele alternative de rezolvare a ecuațiilor liniare.
– Pagina 100, Rețete numerice: The Art of Scientific Computing, Third Edition, 2007.
Descompunerea Cholesky poate fi implementată în NumPy prin apelarea funcției cholesky(). Funcția returnează doar L, deoarece putem accesa cu ușurință transpunerea L, după cum este necesar.
Exemplul de mai jos definește o matrice 3×3 simetrică și pozitiv definită și calculează descompunerea Cholesky, apoi matricea originală este reconstruită.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Descompunerea Cholesky
from numpy import array
de la numpy import array
de la numpy.linalg import cholesky
# definește o matrice 3×3
> A = array(, , ])
print(A)
# Descompunerea Cholesky
> L = cholesky(A)
print(L)
# reconstruiește
> B = L.dot(L.T)
print(B)
|
Executarea exemplului tipărește mai întâi matricea simetrică, apoi matricea triunghiulară inferioară din descompunere, urmată de matricea reconstruită.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Extensiuni
Această secțiune enumeră câteva idei de extindere a tutorialului pe care ați putea dori să le explorați.
- Creați 5 exemple folosind fiecare operație cu propriile date.
- Cercetați lucrări de învățare automată și găsiți 1 exemplu de utilizare a fiecărei operații.
Dacă explorați oricare dintre aceste extensii, mi-ar plăcea să aflu.
Lecturi suplimentare
Această secțiune oferă mai multe resurse pe această temă, dacă doriți să aprofundați.
Cărți
- Secțiunea 6.6 Descompunerea matricelor. No Bullshit Guide To Linear Algebra, 2017.
- Lecția 7 Factorizarea QR, Numerical Linear Algebra, 1997.
- Secțiunea 2.3 LU Decomposition and Its Applications, Numerical Recipes: The Art of Scientific Computing, ediția a treia, 2007.
- Secțiunea 2.10 QR Decomposition, Numerical Recipes: The Art of Scientific Computing, ediția a treia, 2007.
- Secțiunea 2.9 Cholesky Decomposition, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Lecția 23, Cholesky Decomposition, Numerical Linear Algebra, 1997.
API
- scipy.linalg.lu() API
- numpy.linalg.qr() API
- numpy.linalg.qr() API
- numpy.linalg.cholesky() API
Articole
- Descompunerea matricelor pe Wikipedia
- Descompunerea LU pe Wikipedia
- Descompunerea QR pe Wikipedia
- Descompunerea Cholesky pe Wikipedia
Rezumat
În acest tutorial, ați descoperit descompunerea matricelor și cum să le calculați în Python.
În mod specific, ați învățat:
- Ce este o descompunere de matrice și de ce sunt importante aceste tipuri de operații.
- Cum se calculează o descompunere de matrice LU șiQR în Python.
- Cum se calculează o descompunere de matrice Cholesky în Python.
Aveți întrebări?
Puneți întrebările dvs. în comentariile de mai jos și voi face tot posibilul să vă răspund.
Cunoașteți algebra liniară pentru învățare automată!
Dezvoltați o înțelegere operațională a algebrei liniare
…scriind linii de cod în python
Descoperiți cum în noul meu Ebook:
Linear Algebra for Machine Learning
Acesta oferă tutoriale de auto-educație pe subiecte precum:
Normele vectoriale, înmulțirea matricelor, tensori, Eigendecompoziția, SVD, PCA și multe altele…
Înțelegeți în sfârșit matematica datelor
Să renunțați la academice. Doar rezultate.
Vedeți ce conține