kernelPca

kPca

##set_kernelpca

Description

L'action `kPca` effectue un apprentissage par Analyse en Composantes Principales à noyau (Kernel PCAExtension de l'ACP utilisant des fonctions à noyau pour projeter les données dans un espace de plus grande dimension. Elle permet de capturer des structures et relations non linéaires complexes.). C'est la déclinaison non linéaire de l'ACP classique : elle utilise l'astuce du noyau (kernel trick) pour projeter vos données dans un espace de plus grande dimension afin de séparer ou de structurer ce qui ne l'est pas linéairement ! Idéal pour la réduction de dimensionnalité de données complexes (parce que dans la vraie vie, tout n'est pas qu'une simple ligne droite).

Syntaxe Officielle
proc cas;
kernelPca.kPca /
table={name="nom_table", caslib="caslib_name"}
inputs={"var1", "var2", ...}
kerType="RBF" | "LINEAR" | "POLYNOMIAL"
kerParam=valeur_double
method="EXACT" | "APPROXIMATE"
center=true | false
scale=true | false
bwTune={method="RANDOMCMSE", nSample=100}
preimage=true | false
output={casout={name="table_scores", replace=true}, npc=entier}
saveState={name="table_astore", replace=true};
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée contenant les données d'apprentissage.
inputs Liste des variables numériques à utiliser dans l'analyse.
kerType Définit le type de noyau mathématique à appliquer : 'LINEAR', 'POLYNOMIAL' ou 'RBF' (Radial Basis Function).
kerParam Paramètre du noyau (ex: la largeur de bande pour un noyau RBF).
method Méthode de calcul. 'EXACT' est précis mais lourd en mémoire. 'APPROXIMATE' utilise l'approximation de Nyström, parfaite pour passer à l'échelle sur de gros volumes de données.
center / scale Indique s'il faut centrer et réduire les variables avant l'analyse. Fortement recommandé !
bwTune Paramètres pour l'ajustement (tuning) automatique de la bande passante du noyau RBF.
preimage Booléen qui active l'apprentissage de la pré-image, permettant de reconstruire (estimer) les données originales depuis l'espace de projection.
output Gère la table de sortie contenant les scores (les composantes principales) des données d'entraînement.
saveState Spécifie la table de sortie pour sauvegarder le modèle sous forme de table d'état analytique (Astore). Utile pour scorer de nouvelles données plus tard sans avoir à tout recalculer.

Préparation des données

Création d'un jeu de données non linéaire

Nous allons générer des données simulées avec des relations non linéaires (quadratique et sinusoïdale) pour illustrer la puissance de l'ACP à noyau.

1DATA casuser.kpca_data;
2 call streaminit(12345);
3 DO id = 1 to 1000;
4 x1 = rand('Normal');
5 x2 = x1 * x1 + rand('Normal', 0, 0.1);
6 x3 = sin(x1) + rand('Normal', 0, 0.1);
7 OUTPUT;
8 END;
9RUN;

Exemples d'utilisation

Kernel PCA de base avec noyau RBF

Cette action effectue une KPCA standard. On centre et réduit les variables, on applique un noyau RBF et on extrait les 2 premières composantes principales.

1PROC CAS;
2 kernelPca.kPca /
3 TABLE={name='kpca_data', caslib='casuser'}
4 inputs={'x1', 'x2', 'x3'}
5 id={'id'}
6 center=true
7 scale=true
8 kerType='RBF'
9 kerParam=0.5
10 OUTPUT={casout={name='kpca_scores', caslib='casuser', replace=true}, npc=2};
11QUIT;
Résultat Attendu :
Une table 'kpca_scores' contenant l'identifiant 'id' et les 2 nouvelles composantes principales projetées dans l'espace non linéaire.
KPCA Haute Performance avec Tuning automatique, Pré-image et sauvegarde Astore

Ici, on sort le grand jeu : utilisation de la méthode d'approximation ('APPROXIMATE') pour une performance optimale, réglage automatique de la bande passante RBF ('bwTune'), calcul de la pré-image (reconstruction) et sauvegarde du modèle (saveState) pour du scorage en production.

1PROC CAS;
2 kernelPca.kPca /
3 TABLE={name='kpca_data', caslib='casuser'}
4 inputs={'x1', 'x2', 'x3'}
5 method='APPROXIMATE'
6 center=true
7 scale=true
8 kerType='RBF'
9 bwTune={method='RANDOMCMSE', nSample=100, nPass=5, seed=123}
10 preimage=true
11 preimageMethod='ITERATIVE'
12 preimageNPC=2
13 OUTPUT={casout={name='kpca_out_approx', caslib='casuser', replace=true}, npc=2, copyVars={'id'}}
14 eigenVal={name='eigval_table', replace=true}
15 eigenVec={casout={name='eigvec_table', replace=true}}
16 saveState={name='kpca_astore', caslib='casuser', replace=true};
17QUIT;
Résultat Attendu :
Calcul optimisé produisant la table de scores avec l'ID conservé, les tables de valeurs/vecteurs propres, et surtout le modèle Astore ('kpca_astore') prêt à être déployé pour scorer de nouvelles observations en temps réel.