

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Come funziona l'algoritmo PCA
<a name="how-pca-works"></a>

L'analisi delle componenti principali (PCA, Principal Component Analysis) è un algoritmo di apprendimento che riduce la dimensionalità (numero di caratteristiche) di un set di dati mantenendo la maggior quantità possibile di informazioni. 

L'algoritmo PCA riduce le dimensioni individuando un nuovo insieme di caratteristiche denominate *componenti*, che sono compositi delle caratteristiche originali non correlate le une alle altre. La prima componente rappresenta la maggiore variabilità possibile nei dati, la seconda componente la seconda maggiore variabilità e così via.

Si tratta di un algoritmo di riduzione dimensionale non supervisionata. Nell'apprendimento non supervisionato, le etichette che possono essere associate con gli oggetti nel set di dati di addestramento non verranno utilizzate.

Considerato l'input di una matrice con righe ![\[x_1,…,x_n\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-39b.png) ciascuna con dimensione `1 * d`, i dati vengono partizionati in mini-batch di righe e distribuiti tra i nodi di addestramento (worker). Quindi, ogni worker calcola un riepilogo dei propri dati. I riepiloghi dei diversi worker vengono quindi uniti in un'unica soluzione al termine del calcolo. 

**Modalità**

L'algoritmo PCA di Amazon SageMaker AI utilizza una delle due modalità per calcolare questi riepiloghi, a seconda della situazione:
+ **regular** (normale): per i set di dati con dati a densità bassa e un numero modesto di osservazioni e caratteristiche.
+ **randomized** (randomizzata): per i set di dati con un elevato numero di osservazioni e caratteristiche. Questo modo adotta un algoritmo di approssimazione. 

Come ultima fase, l'algoritmo esegue la decomposizione dei singoli valori sulla soluzione unificata, dalla quale derivano le componenti principali.

## Modalità 1: regular (normale)
<a name="mode-1"></a>

I worker calcolano insieme ![\[Equation in text-form: \sum x_i^T x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-1b.png) e ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-2b.png).

**Nota**  
Poiché ![\[Equation in text-form: x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-3b.png) sono vettori della riga `1 * d`, ![\[Equation in text-form: x_i^T x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-4b.png) è una matrice (non un valore scalare). L'utilizzo dei vettori delle righe nel codice permette di ottenere il caching efficiente.

La matrice di covarianza viene calcolata come ![\[Equation in text-form: \sum x_i^T x_i - (1/n) (\sum x_i)^T \sum x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-32b.png) e i relativi vettori delle singole `num_components` superiori formano il modello.

**Nota**  
Se `subtract_mean` è `False`, si evita di calcolare e sottrarre ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-2b.png).

Utilizza questo algoritmo quando la dimensione `d` dei vettori è sufficientemente piccola affinché ![\[Equation in text-form: d^2\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-7b.png) rientri in memoria.

## Modalità 2: randomized (randomizzata)
<a name="mode-2"></a>

Quando il numero di caratteristiche nel set di dati di input è elevato, si utilizza un metodo di approssimazione del parametro di covarianza. Per ogni mini-batch ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-23b.png) di dimensione `b * d`, si inizializza in modo casuale una matrice `(num_components + extra_components) * b` da moltiplicare per ogni mini-batch per creare una matrice `(num_components + extra_components) * d`. La somma di queste matrici viene calcolata dai worker e i server eseguono la SVD (Singular Value Decomposition) sulla matrice `(num_components + extra_components) * d` finale. I vettori delle singole `num_components` in alto a destra sono l'approssimazione dei vettori singoli superiori della matrice di input.

Consenti ![\[Equation in text-form: \ell\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-38b.png) ` = num_components + extra_components`. Considerato un mini-batch ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-23b.png) di dimensione `b * d`, il worker disegna una matrice casuale ![\[Equation in text-form: H_t\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-24b.png) di dimensione ![\[Equation in text-form: \ell * b\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-38.png) . A seconda se l'ambiente utilizza una GPU o un CPU e in base alla grandezza della dimensione, la matrice è una matrice a segni casuali dove ogni voce è `+-1` o una *FJLT* (Fast Johnson-Lindenstrauss Transform; per informazioni consulta [FJLT Transforms](https://www.cs.princeton.edu/~chazelle/pubs/FJLT-sicomp09.pdf) e i documenti di follow-up). Quindi, il worker calcola ![\[Equation in text-form: H_t X_t\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-26b.png) e mantiene ![\[Equation in text-form: B = \sum H_t X_t\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-27b.png) . Il worker mantiene anche ![\[Equation in text-form: h^T\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-28b.png), la somma delle colonne di ![\[Equation in text-form: H_1,..,H_T\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-29b.png) (dove `T` è il numero totale di mini-batch) e `s`, la somma di tutte le righe di input. Dopo l'elaborazione dell'intero shard di dati, il worker invia al server `B`, `h`, `s` e `n` (il numero di righe di input).

Indica i diversi input al server come ![\[Equation in text-form: B^1, h^1, s^1, n^1,…\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-30b.png) Il server calcola `B`, `h`, `s`, `n` le somme dei rispettivi input. Quindi, calcola ![\[Equation in text-form: C = B – (1/n) h^T s\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/PCA-31b.png) e rileva la relativa decomposizione dei singoli valori. I vettori singoli in alto a destra e i valori singoli di `C` vengono utilizzati come soluzione approssimativa del problema.