Tweet Share Share

Ultimo aggiornamento del 9 agosto 2019

Molte operazioni matriciali complesse non possono essere risolte in modo efficiente o con stabilità utilizzando la precisione limitata dei computer.

Le decomposizioni delle matrici sono metodi che riducono una matrice in parti costituenti che rendono più facile il calcolo di operazioni matriciali più complesse. I metodi di decomposizione delle matrici, chiamati anche metodi di fattorizzazione delle matrici, sono un fondamento dell’algebra lineare nei computer, anche per operazioni di base come la risoluzione di sistemi di equazioni lineari, il calcolo dell’inverso e il calcolo del determinante di una matrice.

In questo tutorial, scoprirete le decomposizioni di matrici e come calcolarle in Python.

Dopo aver completato questo tutorial, saprete:

  • Cosa è una decomposizione di matrice e perché questo tipo di operazioni sono importanti.
  • Come calcolare una decomposizione di matrici LU e QR in Python.
  • Come calcolare una decomposizione di matrici Cholesky in Python.

Avvia il tuo progetto con il mio nuovo libro Linear Algebra for Machine Learning, inclusi i tutorial passo dopo passo e i file di codice sorgente Python per tutti gli esempi.

Iniziamo.

  • Aggiornamento Mar/2018: Corretto un piccolo errore di battitura nella descrizione della decomposizione QR.
  • Update Jul/2019: Corretto un piccolo errore di battitura nella descrizione delle matrici definite positive.
A Gentle Introduction to Matrix Decompositions for Machine Learning

A Gentle Introduction to Matrix Decompositions for Machine Learning
Foto di mickey, alcuni diritti riservati.

Panoramica del tutorial

Questo tutorial è diviso in 4 parti; esse sono:

  1. Che cos’è una decomposizione di matrice?
  2. Decomposizione della matrice LU
  3. Decomposizione della matrice QR
  4. Decomposizioneholesky

Hai bisogno di aiuto con Algebra Lineare per l’apprendimento automatico?

Prendi ora il mio corso crash gratuito di 7 giorni via email (con codice di esempio).

Clicca per iscriverti e ottenere anche una versione gratuita del corso in PDF Ebook.

Scarica il tuo mini-corso gratuito

Cos’è una decomposizione di matrice?

Una decomposizione di matrice è un modo di ridurre una matrice nelle sue parti costitutive.

È un approccio che può semplificare operazioni matriciali più complesse che possono essere eseguite sulla matrice decomposta piuttosto che sulla matrice originale stessa.

Un’analogia comune per la decomposizione della matrice è la fattorizzazione dei numeri, come la fattorizzazione di 10 in 2 x 5. Per questa ragione, la decomposizione della matrice è anche chiamata fattorizzazione della matrice. Come la fattorizzazione dei valori reali, ci sono molti modi per decomporre una matrice, quindi ci sono diverse tecniche di decomposizione della matrice.

Due metodi di decomposizione della matrice semplici e molto usati sono la decomposizione della matrice LU e la decomposizione della matrice QR.

In seguito, daremo uno sguardo più da vicino a ciascuno di questi metodi.

Decomposizione della matrice LU

La decomposizione LU è per matrici quadrate e scompone una matrice in componenti L e U.

1
A = L . U

Oppure, senza la notazione dei punti.

1
A = LU

dove A è la matrice quadrata che vogliamo scomporre, L è la matrice triangolare inferiore e U è la matrice triangolare superiore.

I fattori L e U sono matrici triangolari. La fattorizzazione che deriva dall’eliminazione è A = LU.

– Pagina 97, Introduzione all’algebra lineare, quinta edizione, 2016.

La decomposizione LU si trova utilizzando un processo numerico iterativo e può fallire per quelle matrici che non possono essere decomposte o decomposte facilmente.

Una variante di questa decomposizione che è numericamente più stabile da risolvere nella pratica è chiamata decomposizione LUP, o decomposizione LU con pivot parziale.

1
A = P . L . U

Le righe della matrice madre sono riordinate per semplificare il processo di decomposizione e la matrice P aggiuntiva specifica un modo per permutare il risultato o riportare il risultato all’ordine originale. Ci sono anche altre varianti della LU.

La decomposizione LU è spesso usata per semplificare la risoluzione di sistemi di equazioni lineari, come trovare i coefficienti in una regressione lineare, così come nel calcolo del determinante e dell’inverso di una matrice.

La decomposizione LU può essere implementata in Python con la funzione lu(). Più specificamente, questa funzione calcola una decomposizione LU.

L’esempio seguente definisce prima una matrice quadrata 3×3. Viene calcolata la decomposizione LU, poi la matrice originale viene ricostruita dalle componenti.

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

# Decomposizione LU
# from numpy import array
from scipy.linalg import lu
# definire una matrice quadrata
A = array(, , ])
print(A)
# decomposizione LU
> P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruct
> B = P.dot(L).dot(U)
print(B)

L’esecuzione dell’esempio stampa prima la matrice 3×3 definita, poi le componenti P, L, e U della decomposizione, infine viene ricostruita la matrice originale.

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

Decomposizione della matrice QR

La decomposizione QR è per matrici m x n (non limitata alle matrici quadrate) e scompone una matrice in componenti Q e R.

1
A = Q . R

Oppure, senza la notazione dei punti.

1
A = QR

dove A è la matrice che vogliamo scomporre, Q è una matrice di dimensioni m x m, e R è una matrice triangolare superiore di dimensioni m x n.

La decomposizione QR è trovata usando un metodo numerico iterativo che può fallire per quelle matrici che non possono essere decomposte, o decomposte facilmente.

Come la decomposizione LU, la decomposizione QR è spesso usata per risolvere sistemi di equazioni lineari, sebbene non sia limitata alle matrici quadrate.

La decomposizione QR può essere implementata in NumPy usando la funzione qr(). Per impostazione predefinita, la funzione restituisce le matrici Q e R con dimensioni più piccole o “ridotte” che è più economico. Possiamo cambiare questo per restituire le dimensioni previste di m x m per Q e m x n per R specificando l’argomento mode come ‘completo’, anche se questo non è richiesto per la maggior parte delle applicazioni.

L’esempio seguente definisce una matrice 3×2, calcola la decomposizione QR, quindi ricostruisce la matrice originale dagli elementi decomposti.

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

# Decomposizione QR
# from numpy import array
from numpy.linalg import qr
# definire una matrice 3×2
A = array(, , ])
print(A)
# decomposizione QR
Q, R = qr(A, ‘completo’)
print(Q)
print(R)
# ricostruire
B = Q.dot(R)
print(B)

L’esecuzione dell’esempio stampa prima la matrice definita 3×2, poi gli elementi Q e R, poi finalmente la matrice ricostruita che corrisponde a quella da cui siamo partiti.

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

]
]
]
]

Decomposizione di Cholesky

La decomposizione di Cholesky è per matrici simmetriche quadrate dove tutti gli autovalori sono maggiori di zero, le cosiddette matrici definite positive.

Per i nostri interessi nell’apprendimento automatico, ci concentreremo sulla decomposizione di Cholesky per matrici a valore reale e ignoreremo i casi in cui si lavora con numeri complessi.

La decomposizione è definita come segue:

1
A = L . L^T

Oppure senza la notazione dei punti:

1
A = LL^T

dove A è la matrice da decomporre, L è la matrice triangolare inferiore e L^T è la trasposizione di L.

La decomposizione può anche essere scritta come prodotto della matrice triangolare superiore, per esempio:

1
A = U^T . U

dove U è la matrice triangolare superiore.

La decomposizione di Cholesky è usata per risolvere i minimi quadrati per la regressione lineare, così come i metodi di simulazione e ottimizzazione.

Quando si decompongono matrici simmetriche, la decomposizione Cholesky è quasi due volte più efficiente della decomposizione LU e dovrebbe essere preferita in questi casi.

Mentre le matrici simmetriche definite positivamente sono piuttosto speciali, si presentano abbastanza frequentemente in alcune applicazioni, quindi la loro speciale fattorizzazione, chiamata decomposizione Cholesky, è bene conoscerla. Quando è possibile usarla, la decomposizione Cholesky è circa un fattore di due più veloce dei metodi alternativi per risolvere le equazioni lineari.

– Pagina 100, Ricette Numeriche: The Art of Scientific Computing, Third Edition, 2007.

La decomposizione Cholesky può essere implementata in NumPy chiamando la funzione cholesky(). La funzione restituisce solo L poiché possiamo facilmente accedere alla trasposizione L se necessario.

L’esempio seguente definisce una matrice 3×3 simmetrica e definita positivamente e calcola la decomposizione di Cholesky, poi la matrice originale viene ricostruita.

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

# Decomposizione Cholesky
# from numpy import array
from numpy.linalg import cholesky
# definire una matrice 3×3
A = array(, , ])
print(A)
# decomposizione cholesky
# L = cholesky(A)
print(L)
# ricostruire
B = L.dot(L.T)
print(B)

L’esecuzione dell’esempio stampa prima la matrice simmetrica, poi la matrice triangolare inferiore dalla decomposizione seguita dalla matrice ricostruita.

1
2
3
4
5
6
7
8
9
10
11

]
]
]

Estensioni

Questa sezione elenca alcune idee per estendere il tutorial che potresti voler esplorare.

  • Crea 5 esempi usando ogni operazione con i tuoi dati.
  • Cerca articoli sull’apprendimento automatico e trova 1 esempio di ogni operazione usata.

Se esplori una di queste estensioni, mi piacerebbe saperlo.

Altre letture

Questa sezione fornisce altre risorse sull’argomento se stai cercando di approfondire.

Libri

  • Sezione 6.6 Decomposizioni di matrici. 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

Articoli

  • Decomposizione della matrice su Wikipedia
  • Decomposizione LU su Wikipedia
  • Decomposizione QR su Wikipedia
  • Decomposizioneholesky su Wikipedia

Sommario

In questo tutorial, hai scoperto le decomposizioni di matrici e come calcolarle in Python.

In particolare, hai imparato:

  • Cos’è una decomposizione di matrice e perché questo tipo di operazioni sono importanti.
  • Come calcolare una decomposizione di matrice LU eQR in Python.
  • Come calcolare una decomposizione di matrice Cholesky in Python.

Hai qualche domanda?
Fai le tue domande nei commenti qui sotto e farò del mio meglio per rispondere.

Prendi in mano l’algebra lineare per l’apprendimento automatico!

Algebra lineare per l'apprendimento automatico

Sviluppa una comprensione operativa dell’algebra lineare

…scrivendo linee di codice in python

Scopri come nel mio nuovo Ebook:
Algebra lineare per l’apprendimento automatico

Presenta tutorial autodidattici su argomenti come:
Norme vettoriali, moltiplicazione di matrici, tensori, Eigendecomposition, SVD, PCA e molto altro…

Finalmente capisci la matematica dei dati

Smetti gli accademici. Solo risultati.

Vedi cosa c’è dentro

Tweet Condividi Condividi

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.