Tweet Sdílet Sdílet

Poslední aktualizace 9. srpna 2019

Mnoho složitých maticových operací nelze efektivně nebo stabilně řešit pomocí omezené přesnosti počítačů.

Rozklady matic jsou metody, které redukují matici na složky, které usnadňují výpočet složitějších maticových operací. Metody rozkladu matice, nazývané také metody faktorizace matice, jsou základem lineární algebry v počítačích, a to i pro základní operace, jako je řešení soustav lineárních rovnic, výpočet inverze a výpočet determinantu matice.

V tomto kurzu se seznámíte s rozklady matic a jejich výpočtem v jazyce Python.

Po absolvování tohoto kurzu budete vědět:

  • Co je to rozklad matice a proč jsou tyto typy operací důležité.
  • Jak v jazyce Python vypočítat rozklad matice LU aQR.
  • Jak v jazyce Python vypočítat rozklad matice Cholesky.

Nastartujte svůj projekt s mou novou knihou Lineární algebra pro strojové učení, která obsahuje výukové programy krok za krokem a zdrojové soubory jazyka Python pro všechny příklady.

Začněme.

  • Aktualizace březen/2018:
  • Aktualizace červenec/2019: Opraven malý překlep při popisu pozitivně definitních matic.
A Gentle Introduction to Matrix Decompositions for Machine Learning

A Gentle Introduction to Matrix Decompositions for Machine Learning
Foto: mickey, některá práva vyhrazena.

Přehled učiva

Toto učivo je rozděleno do 4 částí; jsou to:

  1. Co je to maticový rozklad?
  2. LU rozklad matice
  3. QR rozklad matice
  4. Choleskyho rozklad

Potřebujete pomoc s lineární algebrou pro strojové učení?

Podstupte nyní můj bezplatný 7denní e-mailový rychlokurz (s ukázkovým kódem).

Klikněte pro registraci a získejte také bezplatnou verzi kurzu ve formátu PDF Ebook.

Stáhněte si svůj minikurz ZDARMA

Co je to rozklad matice?

Rozklad matice je způsob redukce matice na její jednotlivé části.

Jedná se o přístup, který může zjednodušit složitější maticové operace, které lze provádět spíše nad rozloženou maticí než nad původní maticí samotnou.

Běžnou analogií pro rozklad matice je faktorizace čísel, například faktorizace čísla 10 na 2 x 5. Z tohoto důvodu se rozklad matice nazývá také faktorizace matice. Stejně jako při faktorizaci reálných hodnot existuje mnoho způsobů, jak matici rozložit, a proto existuje řada různých metod rozkladu matic.

Dvě jednoduché a hojně používané metody rozkladu matic jsou rozklad matice LU a rozklad matice QR.

Příště se na každou z těchto metod podíváme blíže.

LU rozklad matice

LU rozklad je určen pro čtvercové matice a rozkládá matici na složky L a U.

1
A = L . U

Nebo bez tečkového zápisu.

1
A = LU

Kde A je čtvercová matice, kterou chceme rozložit, L je dolní trojúhelníková matice a U je horní trojúhelníková matice.

Činitelé L a U jsou trojúhelníkové matice. Faktorizace, která vychází z eliminace, je A = LU.

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

Rozklad LU se hledá pomocí iteračního numerického procesu a může selhat u těch matic, které nelze rozložit nebo rozložit snadno.

Varianta tohoto rozkladu, která je numericky stabilnější pro řešení v praxi, se nazývá rozklad LUP neboli LU rozklad s částečným otočením.

1
A = P . L . U

Řádky nadřazené matice jsou pro zjednodušení procesu rozkladu přeuspořádány a doplňková matice P určuje způsob permutace výsledku nebo vrácení výsledku do původního pořadí. Existují i další varianty LU.

Rozklad LU se často používá ke zjednodušení řešení soustav lineárních rovnic, například při hledání koeficientů v lineární regresi, a také při výpočtu determinantu a inverzní hodnoty matice.

Rozklad LU lze v jazyce Python implementovat pomocí funkce lu(). Přesněji řečeno, tato funkce počítá rozklad LPU.

Následující příklad nejprve definuje čtvercovou matici o rozměrech 3×3. Poté se vypočítá LU rozklad a z jeho komponent se rekonstruuje původní matice.

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

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

Při spuštění příkladu se nejprve vypíše definovaná matice 3×3, pak složky P, L a U rozkladu a nakonec se rekonstruuje původní matice.

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

]
]
]
]
]

QR rozklad matice

QR rozklad je určen pro matice m x n (není omezen na čtvercové matice) a rozkládá matici na Q a R složky.

1
A = Q . R

Nebo bez tečkového zápisu.

1
A = QR

Kde A je matice, kterou chceme rozložit, Q matice o velikosti m x m a R je horní trojúhelníková matice o velikosti m x n.

Rozklad QR se hledá pomocí iterační numerické metody, která může selhat u těch matic, které nelze rozložit, nebo se rozkládají snadno.

Stejně jako rozklad LU se rozklad QR často používá k řešení soustav lineárních rovnic, i když není omezen na čtvercové matice.

Rozklad QR lze implementovat v NumPy pomocí funkce qr(). Ve výchozím nastavení funkce vrací matice Q a R s menšími nebo ‚redukovanými‘ rozměry, které jsou úspornější. Můžeme ji změnit tak, aby vracela očekávané rozměry m x m pro Q a m x n pro R zadáním argumentu mode jako ‚complete‘, ačkoli to pro většinu aplikací není nutné.

Následující příklad definuje matici 3×2, vypočítá QR rozklad a poté z rozložených prvků rekonstruuje původní matici.

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

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

Při spuštění příkladu se nejprve vypíše definovaná matice 3×2, pak prvky Q a R a nakonec rekonstruovaná matice, která odpovídá tomu, s čím jsme začali.

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

]
]
]
]

Choleskyho rozklad

Choleskyho rozklad je určen pro čtvercové symetrické matice, jejichž všechna vlastní čísla jsou větší než nula, tzv. pozitivně definitní matice.

Pro naše zájmy v oblasti strojového učení se zaměříme na Choleského rozklad pro matice reálných hodnot a budeme ignorovat případy, kdy pracujeme s komplexními čísly.

Rozklad je definován takto:

1
A = L . L^T

Nebo bez tečkového zápisu:

1
A = LL^T

Kde A je rozkládaná matice, L je dolní trojúhelníková matice a L^T je transpozice L.

Rozklad lze také zapsat jako součin horní trojúhelníkové matice, například:

1
A = U^T . U

Kde U je horní trojúhelníková matice.

Choleského rozklad se používá pro řešení lineárních nejmenších čtverců pro lineární regresi, stejně jako pro simulační a optimalizační metody.

Při rozkladu symetrických matic je Choleského rozklad téměř dvakrát efektivnější než LU rozklad a měl by se v těchto případech upřednostňovat.

Přestože jsou symetrické, kladně definitní matice spíše speciální, vyskytují se v některých aplikacích poměrně často, a proto je dobré znát jejich speciální faktorizaci, nazývanou Choleského rozklad. Pokud jej můžete použít, je Choleského rozklad asi dvakrát rychlejší než alternativní metody řešení lineárních rovnic.

– Strana 100, Numerické recepty: The Art of Scientific Computing, Third Edition, 2007.

Choleského rozklad lze v NumPy implementovat voláním funkce cholesky(). Funkce vrací pouze L, protože podle potřeby můžeme snadno přistupovat k transpozici L.

Následující příklad definuje symetrickou a kladně definitní matici 3×3 a vypočítá Choleského rozklad, poté je rekonstruována původní matice.

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

# Choleského rozklad
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)

Při spuštění příkladu se nejprve vypíše symetrická matice, pak dolní trojúhelníková matice z rozkladu a následně rekonstruovaná matice.

1
2
3
4
5
6
7
8
9
10
11

]
]
]

Rozšíření

V této části jsou uvedeny některé nápady na rozšíření výukového programu, které byste mohli chtít prozkoumat.

  • Vytvořte 5 příkladů použití každé operace s vlastními daty.
  • Prohledejte články o strojovém učení a najděte 1 příklad použití každé operace.

Pokud některé z těchto rozšíření prozkoumáte, budu rád, když mi dáte vědět.

Další četba

Tato část obsahuje další zdroje k tématu, pokud chcete jít hlouběji.

Knihy

  • Podkapitola 6.6 Rozklady matic. No Bullshit Guide To Linear Algebra, 2017.
  • Přednáška 7 QR faktorizace, Numerická lineární algebra, 1997.
  • Díl 2.3 LU rozklad a jeho aplikace, Numerické recepty:
  • Section 2.10 QR Decomposition, Numerical Recipes: The Art of Scientific Computing, Third Edition, 2007:
  • Díl 2.9 Choleského rozklad, Numerické recepty: Umění vědeckého počítání, třetí vydání, 2007.
  • Díl 2.9 Choleského rozklad, Numerické recepty:
  • Přednáška 23, Choleského rozklad, Numerická lineární algebra, 1997.

API

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

Články

  • Rozklad matice na Wikipedii
  • LU rozklad na Wikipedii
  • QR rozklad na Wikipedii
  • Choleskyho rozklad na Wikipedii

Souhrn

V tomto tutoriálu, jste objevili rozklady matic a způsoby jejich výpočtu v jazyce Python.

Konkrétně jste se dozvěděli:

  • Co je to rozklad matice a proč jsou tyto typy operací důležité.
  • Jak vypočítat rozklad matice LU aQR v Pythonu.
  • Jak vypočítat rozklad matice Cholesky v Pythonu.

Máte nějaké otázky?
Pokládejte své dotazy v komentářích níže a já se budu snažit odpovědět.

Získejte přehled o lineární algebře pro strojové učení!

Lineární algebra pro strojové učení

Rozvíjejte pracovní znalosti lineární algebry

…psaním řádků kódu v Pythonu

Objevte, jak na to, v mé nové elektronické knize:
Lineární algebra pro strojové učení

Nabízí samostudijní výukové programy na témata jako:
Vektorové normy, násobení matic, tenzory, Eigendekompozice, SVD, PCA a mnoho dalšího…

Pochopte konečně matematiku dat

Odpusťte si akademickou práci. Stačí výsledky.

Podívejte se, co je uvnitř

Tweet Sdílet Sdílet

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.