MTX_PCA - Analisi delle componenti principali
Questa procedura esegue un'analisi delle componenti principali (PCA) utilizzando i dati memorizzati in una matrice.
Utilizzo
- MTX_PCA modelName,dataMatrixName,forceSufficientStats,centerData,scaleData,saveScores )
- Parametri
- modelName
- Il nome del modello creato.
- dataMatrixName
- Il nome della matrice contenente i dati.
- forceSufficientStats
- Specifica se la PCA deve essere basata su una matrice di covarianza anche se è possibile eseguire la SVD.
- centerData
- Specifica se il modello deve includere la centratura dei dati, cioè la sottrazione dello stimatore medio.
- 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.
- saveScores
- Specifica se i punteggi PCA delle singole osservazioni devono essere salvati.
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.
- {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)