Tweet Share Share Share

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

A Gentle Introduction to Matrix Decompositions for Machine Learning
Photo by mickey, some rights reserved.

Tutorial Overview

Ez a bemutató 4 részre oszlik; ezek a következők:

  1. Mi az a mátrixdekompozíció?
  2. LU mátrixbontás
  3. QR mátrixbontás
  4. 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!

Lineáris algebra 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

Tweet Share Share Share

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.