MTX_PCA - Analisi delle componenti principali

Questa procedura esegue un'analisi delle componenti principali (PCA) utilizzando i dati memorizzati in una matrice.

Utilizzo

La stored procedure MTX_PCA ha la seguente sintassi:
MTX_PCA modelName,dataMatrixName,forceSufficientStats,centerData,scaleData,saveScores )
Parametri
modelName
Il nome del modello creato.
Tipo NVARCHAR(ANY)
dataMatrixName
Il nome della matrice contenente i dati.
Tipo: NVARCHAR(ANY)
forceSufficientStats
Specifica se la PCA deve essere basata su una matrice di covarianza anche se è possibile eseguire la SVD.
Tipo: boolean
Valore predefinito: FALSE
centerData
Specifica se il modello deve includere la centratura dei dati, cioè la sottrazione dello stimatore medio.
Tipo: boolean
Impostazione predefinita: true
scaleData
Specifica se il modello deve includere il ridimensionamento dei dati, che è la divisione da uno stimatore di deviazione standard non nullo. Quando si esegue il ridimensionamento dei dati, il modello PCA risultante è equivalente a un modello basato sulla matrice di correlazione.
Tipo: boolean
Valore predefinito: TRUE
saveScores
Specifica se i punteggi PCA delle singole osservazioni devono essere salvati.
Tipo: boolean
Valore predefinito: FALSE
Risultati
BOOLEAN VERO sempre.

Dettagli

Questa procedura costruisce un modello PCA dei dati e fornisce una trasformazione corrispondente in componenti principali, che può essere applicata con MTX_PCA_APPLY. I dati di input devono essere forniti come oggetti matrice di database, con le osservazioni nelle righe e gli attributi nelle colonne.

La PCA può essere costruita utilizzando due strategie: La decomposizione SVD, più accurata ma a scapito della velocità e della memoria, oppure trovando gli autovettori dello stimatore imparziale della matrice di covarianza. Se il parametro forceSufficientStats non è VERO, viene utilizzata la strategia migliore, cioè quella che fornisce la soluzione più accurata in base alla dimensione dei dati e alla disponibilità di memoria. In base ai parametri specificati, la matrice di dati può essere centrata e scalata. In questo caso, i parametri corrispondenti, gli stimatori della media e della varianza vengono calcolati e diventano parte del modello. Se incluso nel modello, il centraggio e il ridimensionamento vengono eseguiti anche durante la fase di applicazione.

La centratura dei dati (che assicura che la media di ogni attributo sia uguale a 0) è un presupposto del metodo PCA, il cui mancato rispetto causa solitamente una grave degradazione del modello. La scalatura dei dati (assicurando che la varianza di ogni attributo sia uguale a 1) di solito fornisce una migliore approssimazione dei dati in caso di presenza di attributi che differiscono in ordini di grandezza. È equivalente eseguire la PCA utilizzando la matrice di correlazione anziché quella di covarianza.

Per esprimere il modello che si sta creando, la procedura crea un insieme di matrici, utilizzando il parametro modelName come prefisso per il nome della matrice. L'insieme è costituito dalle seguenti matrici:
  • {prefix}_PCA_ATTMEAN: vettore di righe contenente i valori medi degli attributi (quando centerData è TRUE)
  • {prefix}_PCA_ATTSD: vettore di righe contenente le deviazioni standard degli attributi (quando scaleData è TRUE)
  • {prefix}_PCA_ATTSD_DIV: vettore di righe contenente i reciproci delle deviazioni standard non nulle degli attributi o valore 1 (quando scaleData è TRUE)
  • prefix}_PCA_SDEV: vettore di righe che contiene le deviazioni standard delle componenti principali
  • {prefix}_PCA: la matrice dei caricamenti (una matrice le cui colonne contengono gli autovettori della matrice di covarianza)
  • {prefix}_PCA_SCORES: la matrice di punteggi contenente le proiezioni delle singole osservazioni alle componenti principali (quando saveScores è TRUE)

Esempi

call nzm..shape('1,2,3,4,5,6,7,8,9',1,3,'PCA_TEST'); 
call nzm..shape('9,8,7,6,5,4,3,2,1',10,1,'PCA_TEST_SOURCE_PRE');
---expected value is 0.0
call nzm..SCALAR_OPERATION('PCA_TEST_SOURCE_PRE',
 'PCA_TEST_SOURCE', '-', 0.5);
call  nzm..gemm('PCA_TEST_SOURCE','PCA_TEST', 'PCA_TEST_VALS'); 
call nzm..mtx_pca('PCA_TEST_MOD','PCA_TEST_VALS',FALSE,FALSE,
 FALSE, TRUE);
call nzm..list_matrices();
    std dev in each direction (in this example real value of all
    components other than the first one should be 0)
call nzm..print('PCA_TEST_MOD_PCA_SDEV'); 
call nzm..print('PCA_TEST_MOD_PCA_SCORES');
---projecting on the original value (first column)
call  nzm..gemm_large('PCA_TEST_VALS',FALSE,'PCA_TEST_MOD_PCA',
 FALSE,'PCA_TEST_PROJ');
    resulting value (first column of PCA_TEST_PROJ) is 
    proportional to original one (PCA_TEST_VALS): 
    PCA_TEST_PROJ[1,] ~~PCA_TEST_SOURCE*sqrt(nzm..red_ssq('PCA_TEST'))
call nzm..delete_matrix_like('PCA\_TEST%');

 SHAPE
-------
 t
(1 row)

 SHAPE
-------
 t
(1 row)

 SCALAR_OPERATION
------------------
 t
(1 row)

 GEMM
------
 t
(1 row)

 MTX_PCA
---------
 t
(1 row)

                   LIST_MATRICES
----------------------------------------------------
 PCA_TEST
 PCA_TEST_MOD_PCA
 PCA_TEST_MOD_PCA_SCORES
 PCA_TEST_MOD_PCA_SDEV
 PCA_TEST_SOURCE
 PCA_TEST_SOURCE_PRE
 PCA_TEST_VALS
(1 row)

                      PRINT
----------------------------------------------------
-- matrix: PCA_TEST_MOD_PCA_SDEV --
 22.118368434905
 2.4603199788269e-16
 9.9446202776076e-17
(1 row)

                                     PRINT
-----------------------------------------------------------------------------------------
 -- matrix: PCA_TEST_MOD_PCA_SCORES --
 31.804087787578, -1.4567015001103e-16, 1.2617124776816e-16
 -28.062430400805, -4.1645192033268e-17, -2.6226789760277e-16 
 -24.320773014031, -3.6092499762165e-17, 3.1261282628732e-17 
 -20.579115627257, -3.0539807491063e-17, 2.6451854532004e-17 
 -16.837458240483, -2.4987115219961e-17, 2.1642426435276e-17 
 -13.095800853709, 7.1866157069922e-16, 1.6832998338548e-17 
 -9.3541434669349, -1.3881730677756e-17, 1.202357024182e-17 
 -5.6124860801609, -8.3290384066535e-18, 7.2141421450919e-18 
 -1.870828693387, -2.7763461355512e-18, 2.404714048364e-18
 -31.804087787578, -4.719788430437e-17, 4.0880138822188e-17
(1 row)

 GEMM_LARGE
------------
 t
(1 row)

 DELETE_MATRIX_LIKE
--------------------
 t
(1 row)