Last Updated on Augusztus 9, 2019
Sok összetett mátrixműveletet nem lehet hatékonyan vagy stabilan megoldani a számítógépek korlátozott pontosságával.
A mátrixbontás olyan módszer, amely egy mátrixot alkotó részekre redukál, amelyek megkönnyítik a bonyolultabb mátrixműveletek kiszámítását. A mátrixdekompozíciós módszerek, más néven mátrixfaktorizációs módszerek a számítógépes lineáris algebra alapját képezik, még olyan alapvető műveletek esetében is, mint a lineáris egyenletrendszerek megoldása, az inverz kiszámítása és egy mátrix determinánsának kiszámítása.
Ebben az oktatóanyagban megismerkedhet a mátrixbontásokkal és azok Pythonban történő kiszámításával.
Az oktatóanyag elvégzése után tudni fogja:
- Mi a mátrixbontás és miért fontosak az ilyen típusú műveletek.
- Hogyan számolja ki az LU ésQR mátrixbontást Pythonban.
- Hogyan számolja ki a Cholesky mátrixbontást Pythonban.
Kezdje el a projektjét az új Lineáris algebra a gépi tanuláshoz című könyvemmel, amely lépésről lépésre bemutató útmutatókat és az összes példa Python forráskódfájlját tartalmazza.
Kezdjük el.
- Frissítés 2018. márc:
- Frissítés Jul/2019: Kisebb elírás kijavítva a pozitív definit mátrixok leírásánál.
A Gentle Introduction to Matrix Decompositions for Machine Learning
Photo by mickey, some rights reserved.
- Tutorial Overview
- Segítségre van szükséged a Lineáris algebra a gépi tanuláshoz?
- Mi az a mátrixbontás?
- LU mátrixbontás
- QR mátrixbontás
- Cholesky-dekompozíció
- Bővítések
- További olvasmányok
- Könyvek
- API
- Cikkek
- Summary
- Kezd meg a lineáris algebrát a gépi tanuláshoz!
- Develop a working understand of linear algebra
- Egyszer végre megértsd az adatok matematikáját
Tutorial Overview
Ez a bemutató 4 részre oszlik; ezek a következők:
- Mi az a mátrixdekompozíció?
- LU mátrixbontás
- QR mátrixbontás
- Cholesky mátrixbontás
Segítségre van szükséged a Lineáris algebra a gépi tanuláshoz?
Vegye fel a 7 napos ingyenes e-mailes gyorstalpaló tanfolyamomat most (mintakóddal).
Kattintson a feliratkozáshoz és kapja meg a tanfolyam ingyenes PDF Ebook változatát is.
Töltse le az INGYENES minitanfolyamát
Mi az a mátrixbontás?
A mátrixbontás egy mátrix alkotóelemeire való redukció.
Ez egy olyan megközelítés, amely egyszerűsítheti a bonyolultabb mátrixműveleteket, amelyeket a dekomponált mátrixon lehet elvégezni, nem pedig magán az eredeti mátrixon.
A mátrixdekompozíció gyakori analógiája a számok faktorálása, például a 10 faktorálása 2 x 5-re. Emiatt a mátrixdekompozíciót mátrixfaktorizációnak is nevezik. A valós értékek faktorálásához hasonlóan egy mátrixot is sokféleképpen lehet felbontani, ezért számos különböző mátrixbontási módszer létezik.
Két egyszerű és széles körben használt mátrixbontási módszer az LU-mátrixbontás és a QR-mátrixbontás.
A következőkben ezeket a módszereket fogjuk közelebbről megvizsgálni.
LU mátrixbontás
A LU mátrixbontás négyzetes mátrixokra vonatkozik, és egy mátrixot L és U komponensekre bont.
1
|
A = L . U
|
Vagy a pontjelölés nélkül.
1
|
A = LU
|
Ahol A az a négyzetmátrix, amelyet szét akarunk bontani, L az alsó háromszögmátrix és U a felső háromszögmátrix.
Az L és U faktorok háromszögmátrixok. Az eliminációval kapott faktorizáció A = LU.
– 97. oldal, Introduction to Linear Algebra, Fifth Edition, 2016.
A LU-dekompozíciót egy iteratív numerikus eljárás segítségével találjuk meg, és az olyan mátrixok esetében, amelyek nem vagy nem könnyen dekomponálhatók, kudarcot vallhatnak.
Eznek a dekompozíciónak a gyakorlatban numerikusan stabilabban megoldható változatát LUP-dekompozíciónak vagy LU-dekompozíciónak nevezik részleges pivotinggal.
1
|
A = P . L . U
|
A szülőmátrix sorai a dekompozíciós folyamat egyszerűsítése érdekében átrendeződnek, és a további P mátrix megadja az eredmény permuttálásának vagy az eredmény eredeti sorrendbe való visszaállításának módját. Az LU-nak vannak más változatai is.
A LU-dekompozíciót gyakran használják lineáris egyenletrendszerek megoldásának egyszerűsítésére, például egy lineáris regresszió együtthatóinak megtalálására, valamint egy mátrix determinánsának és inverzének kiszámítására.
A LU-dekompozíciót Pythonban a lu() függvénnyel lehet megvalósítani. Pontosabban ez a függvény kiszámítja az LU-dekompozíciót.
Az alábbi példában először egy 3×3 négyzetmátrixot definiálunk. Kiszámítjuk az LU-dekompozíciót, majd a komponensekből rekonstruáljuk az eredeti mátrixot.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# LU dekompozíció
from numpy import array
from scipy.linalg import lu
# definiálj egy négyzetmátrixot
A = array(, , ])
print(A)
# LU dekompozíció
P, L, U = lu(A)
print(P)
print(L)
print(U)
# rekonstrukció
B = P.dot(L).dot(U)
print(B)
|
A példa futtatása először a definiált 3×3 mátrixot, majd a dekompozíció P, L és U komponenseit nyomtatja ki, végül az eredeti mátrixot rekonstruálja.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
]
]
]
]
]
|
QR mátrixbontás
A QR-dekompozíció m x n mátrixokra vonatkozik (nem korlátozódik a négyzetmátrixokra) és egy mátrixot Q és R komponensekre bont.
1
|
A = Q . R
|
Vagy a pontjelölés nélkül.
1
|
A = QR
|
Ahol A az a mátrix, amelyet szét akarunk bontani, Q egy m x m méretű mátrix, R pedig egy m x n méretű felső háromszög mátrix.
A QR-dekompozíciót egy iteratív numerikus módszerrel találjuk meg, amely sikertelen lehet azoknál a mátrixoknál, amelyek nem, vagy nem könnyen dekomponálhatók.
A LU-dekompozícióhoz hasonlóan a QR-dekompozíciót is gyakran használják lineáris egyenletrendszerek megoldására, bár nem korlátozódik négyzetes mátrixokra.
A QR-dekompozíciót a NumPy-ban a qr() függvény segítségével lehet implementálni. A függvény alapértelmezés szerint a Q és R mátrixokat kisebb vagy “csökkentett” dimenziókkal adja vissza, ami gazdaságosabb. Ezt megváltoztathatjuk úgy, hogy a Q esetében m x m, az R esetében pedig m x n várható méretet adjon vissza, ha a mód argumentumot ‘complete’-ként adjuk meg, bár ez a legtöbb alkalmazásnál nem szükséges.
Az alábbi példa definiál egy 3×2 mátrixot, kiszámítja a QR-dekompozíciót, majd a dekomponált elemekből rekonstruálja az eredeti mátrixot.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# QR dekompozíció
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.dot(R)
print(B)
|
A példa futtatása először a definiált 3×2 mátrixot, majd a Q és R elemeket, végül a rekonstruált mátrixot írja ki, amely megfelel annak, amivel indultunk.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
]
]
]
]
|
Cholesky-dekompozíció
A Cholesky-dekompozíció olyan négyzetes szimmetrikus mátrixokra vonatkozik, ahol minden sajátérték nagyobb nullánál, úgynevezett pozitív definit mátrixok.
Gépi tanulással kapcsolatos érdeklődésünk miatt a valós értékű mátrixok Cholesky-dekompozíciójára fogunk koncentrálni, és figyelmen kívül hagyjuk azokat az eseteket, amikor komplex számokkal dolgozunk.
A dekompozíciót a következőképpen definiáljuk:
1
|
A = L . L^T
|
Vagy a pontjelölés nélkül:
1
|
A = LL^T
|
Ahol A a felbontandó mátrix, L az alsó háromszögmátrix, L^T pedig L transzponáltja.
A dekompozíció felírható a felső háromszögmátrix szorzataként is, például:
1
|
A = U^T . U
|
Ahol U a felső háromszögmátrix.
A Cholesky-dekompozíciót lineáris regresszió lineáris legkisebb négyzetek megoldására, valamint szimulációs és optimalizációs módszerekre használják.
A szimmetrikus mátrixok felbontásakor a Cholesky-felbontás közel kétszer olyan hatékony, mint az LU-felbontás, ezért ezekben az esetekben előnyben kell részesíteni.
A szimmetrikus, pozitív definit mátrixok ugyan meglehetősen speciálisak, de egyes alkalmazásokban elég gyakran előfordulnak, ezért speciális faktorizálásukat, az úgynevezett Cholesky-felbontást nem árt ismerni. Amikor használhatjuk, a Cholesky-féle dekompozíció körülbelül kétszer gyorsabb, mint a lineáris egyenletek megoldásának alternatív módszerei.
– 100. oldal, Numerikus receptek: The Art of Scientific Computing, Third Edition, 2007.
A Cholesky-dekompozíciót a NumPy programban a cholesky() függvény meghívásával lehet megvalósítani. A függvény csak L-t adja vissza, mivel szükség esetén könnyen hozzáférhetünk az L transzponálásához.
Az alábbi példában egy 3×3 szimmetrikus és pozitív definit mátrixot definiálunk, és kiszámítjuk a Cholesky-dekompozíciót, majd az eredeti mátrixot rekonstruáljuk.
1
2
3
4
5
6
7
8
9
10
11
12
|
# Cholesky dekompozíció
from numpy import array
from numpy.linalg import cholesky
# 3×3-as mátrix definiálása
A = array(, , ])
print(A)
# Cholesky dekompozíció
L = cholesky(A)
print(L)
# rekonstrukció
B = L.dot(L.T)
print(B)
|
A példa futtatása először a szimmetrikus mátrixot, majd a dekompozícióból származó alsó háromszögmátrixot, majd a rekonstruált mátrixot írja ki.
1
2
3
4
5
6
7
8
9
10
11
|
]
]
]
|
Bővítések
Ez a rész felsorol néhány ötletet a tananyag bővítésére, amit érdemes lehet megvizsgálni.
- Készíts 5 példát az egyes műveletek használatára a saját adataiddal.
- Keresd meg a gépi tanulással foglalkozó cikkeket, és keress 1 példát az egyes műveletek használatára.
Ha felfedezed valamelyik bővítést, örülnék, ha tudnád.
További olvasmányok
Ez a rész további forrásokat tartalmaz a témában, ha mélyebben szeretne elmélyülni.
Könyvek
- 6.6. szakasz Mátrixbontások. 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.
- Section 2.10 QR Decomposition, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007.
- Section 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
Cikkek
- Mátrixbontás a Wikipedián
- LU-bontás a Wikipedián
- QR-bontás a Wikipedián
- Cholesky-bontás a Wikipedián
Summary
Ebben a bemutatóban, felfedezted a mátrixdekompozíciókat és azt, hogyan számolhatod ki őket Pythonban.
Közelebbről megtanultad:
- Mi a mátrixbontás és miért fontosak az ilyen típusú műveletek.
- Hogyan számítsuk ki az LU ésQR mátrixbontást Pythonban.
- Hogyan számítsuk ki a Cholesky mátrixbontást Pythonban.
Kérdésed van?
Tedd fel a kérdéseidet az alábbi megjegyzésekben, és én igyekszem a lehető legjobban válaszolni.
Kezd meg a lineáris algebrát a gépi tanuláshoz!
Develop a working understand of linear algebra
….kódsorok írásával pythonban
Fedezd fel, hogyan az új Ebookomban:
Lineáris algebra a gépi tanuláshoz
Ez önképző tananyagot nyújt olyan témákban, mint:
Vektornormák, mátrixszorzás, tenzorok, Eigendecomposition, SVD, PCA és még sok más…
Egyszer végre megértsd az adatok matematikáját
Hagyd az akadémikusokat. Csak eredmények.
Nézze meg, mi van benne