MTX_PCA - Analyse en composantes principales

Cette procédure effectue une analyse en composantes principales (ACP) à partir de données stockées dans une matrice.

Utilisation

La procédure stockée MTX_PCA a la syntaxe suivante :
MTX_PCA modelName,dataMatrixName,forceSufficientStats,centerData,scaleData,saveScores )
Paramètres
modelName
Le nom du modèle créé.
Type NVARCHAR(ANY)
dataMatrixName
Le nom de la matrice contenant les données.
Type : NVARCHAR(ANY)
forceSufficientStats
Spécifie si l'ACP doit être basée sur une matrice de covariance même si la SVD peut être effectuée.
Type : Booléen
Valeur par défaut : FALSE
centerData
Spécifie si le modèle doit inclure le centrage des données, c'est-à-dire la soustraction de l'estimateur de la moyenne.
Type : Booléen
Valeur par défaut : True
scaleData
Spécifie si le modèle doit inclure la mise à l'échelle des données, qui est la division par un estimateur de l'écart-type non nul. Lorsque la mise à l'échelle des données est effectuée, le modèle ACP résultant est équivalent à un modèle basé sur la matrice de corrélation.
Type : Booléen
Valeur par défaut : TRUE
saveScores
Spécifie si les scores ACP des observations individuelles doivent être sauvegardés.
Type : Booléen
Valeur par défaut : FALSE
Retours
BOOLEAN VRAI toujours.

Détails

Cette procédure construit un modèle ACP des données et fournit une transformation correspondante en composantes principales, qui peut ensuite être appliquée à l'aide de MTX_PCA_APPLY. Les données d'entrée doivent être fournies sous forme d'objets matriciels de base de données, les observations étant fournies en lignes et les attributs en colonnes.

L'ACP peut être construite selon deux stratégies : La décomposition SVD, qui est plus précise mais au détriment de la vitesse et de la mémoire, ou en trouvant les vecteurs propres de l'estimateur sans biais de la matrice de covariance. Si le paramètre forceSufficientStats n'est pas VRAI, la meilleure stratégie, c'est-à-dire celle qui fournit la solution la plus précise en fonction de la taille des données et de la disponibilité de la mémoire, est utilisée. En fonction des paramètres spécifiés, la matrice de données peut être centrée et mise à l'échelle. Dans ce cas, les paramètres correspondants, les estimateurs de la moyenne et de la variance sont calculés et font partie du modèle. Lorsqu'ils sont inclus dans le modèle, le centrage et la mise à l'échelle sont également effectués lors de l'étape d'application.

Le centrage des données (assurer que la moyenne de chaque attribut est égale à 0) est une hypothèse de la méthode ACP - ne pas la respecter entraîne généralement une grave dégradation du modèle. La mise à l'échelle des données (en veillant à ce que la variance de chaque attribut soit égale à 1) permet généralement d'obtenir une meilleure approximation des données en cas de présence d'attributs qui diffèrent par des ordres de grandeur. Il est équivalent d'effectuer l'ACP en utilisant la matrice de corrélation au lieu de la matrice de covariance.

Afin d'exprimer le modèle en cours de création, la procédure crée un ensemble de matrices, en utilisant le paramètre modelName comme préfixe pour le nom de la matrice donnée. L'ensemble se compose des matrices suivantes :
  • {prefix}_PCA_ATTMEAN : vecteur de lignes contenant les valeurs moyennes des attributs (lorsque centerData est TRUE)
  • {prefix}_PCA_ATTSD : vecteur de lignes contenant les écarts types des attributs (lorsque scaleData est VRAI)
  • {prefix}_PCA_ATTSD_DIV : vecteur de lignes contenant les réciproques des écarts types non nuls des attributs ou valeur 1 (lorsque scaleData est VRAI)
  • prefix}_PCA_SDEV : vecteur de lignes contenant les écarts types des composantes principales
  • {prefix}_PCA : la matrice des charges (une matrice dont les colonnes contiennent les vecteurs propres de la matrice de covariance)
  • {prefix}_PCA_SCORES : la matrice des scores contenant les projections des observations individuelles en composantes principales (lorsque saveScores est TRUE)

Exemples

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)