ica

fastIca

##set_ica

Description

L'action fastIca effectue une analyse en composantes indépendantes (ICA) en utilisant l'algorithme rapide fastICA. Contrairement à l'Analyse en Composantes Principales (PCA) qui cherche des axes de varianceMesure statistique de la dispersion des données indiquant l'écart carré moyen par rapport à la moyenne. Une variance élevée traduit une grande hétérogénéité des observations autour du centre. maximale décorrélés, l'ICA cherche des composants qui sont statistiquement les plus indépendants possibles. C'est l'outil idéal pour résoudre le fameux 'problème du cocktail party' : retrouver des sources sonores individuelles à partir de plusieurs micros captant des mélanges. Dans le monde de la donnée, c'est parfait pour nettoyer des signaux ou séparer des motifs complexes cachés dans vos variablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage. numériques.

Syntaxe Officielle
ica.fastIca <result=results> <status=rc> /
attributes={{casinvardesc-1}, ...}
display={displayTables}
eigenThreshold=double
gFunction="EXP" | "LOGCOSH"
groupByLimit=64-bit-integer
inputs={{casinvardesc-1}, ...}
method={maxIter=integer, name="DEFLATION" | "SYMMETRIC", tolerance=double}
n=integer
noCenter=TRUE | FALSE
noScale=TRUE | FALSE
output={casOut={casouttable}, component="string", copyVars={"variable-name-1", ...}, white="string"}
outputTables={groupByVarsRaw=TRUE | FALSE, includeAll=TRUE | FALSE, names={"string-1", ...}, repeated=TRUE | FALSE, replace=TRUE | FALSE}
prefix="string"
seed=integer
table={castable}
whitePrefix="string"

Paramètres Clés

Nom du paramètre Description
table Spécifie la table CAS d'entrée contenant les signaux ou variables mixtes à analyser .
inputs Liste des variables numériques sur lesquelles appliquer l'ICA.
method Définit l'algorithme d'extraction : 'DEFLATION' (un composant à la fois) ou 'SYMMETRIC' (tous les composants en même temps). Inclut 'maxIter' pour les itérations et 'tolerance' pour la convergence.
gFunction Fonction de contraste non quadratique utilisée pour approximer la négentropie : 'LOGCOSH' (par défaut, robuste) ou 'EXP' (plus sensible).
n Nombre de composantes indépendantes à extraire. Par défaut (0), extrait autant de composants qu'il y a de variables d'entrée.
output Définit la table de sortie ('casOut') pour stocker les composants calculés (les scores ICA) et permet de copier des variables d'ID via 'copyVars'.
prefix Préfixe utilisé pour nommer les composantes indépendantes dans la table de sortie (par défaut : 'Comp').
eigenThreshold Seuil pour l'élimination des petites valeurs propres lors du blanchiment (whitening) préalable.

Préparation des données

Création de signaux mixtes pour test ICA

Ce code génère deux signaux sources (un sinus et un signal en dents de scie) et les mélange pour simuler des capteurs pollués.

1DATA casuser.mixed_signals;
2 drop i s1 s2;
3 DO i = 1 to 1000;
4 s1 = sin(i/10); /* Source 1 : Sinusoïde */
5 s2 = (mod(i, 20) - 10) / 10; /* Source 2 : Dents de scie */
6 /* Mélange linéaire des sources */
7 sensor1 = 0.5 * s1 + 0.8 * s2 + rannor(123)*0.05;
8 sensor2 = 0.7 * s1 - 0.3 * s2 + rannor(123)*0.05;
9 time = i;
10 OUTPUT;
11 END;
12RUN;

Exemples d'utilisation

Analyse ICA de base

Exécute l'ICA sur deux capteurs avec les paramètres par défaut pour identifier les sources indépendantes.

1PROC CAS;
2 ica.fastIca TABLE="mixed_signals", inputs={"sensor1", "sensor2"};
3RUN;
Résultat Attendu :
Affichage des statistiques de convergence et de la matrice de mélange dans les résultats SAS Studio.
Séparation de sources avec scoring et configuration avancée

Utilise la méthode symétrique (plus stable), définit une fonction de contraste spécifique et génère une table de sortie avec les variables indépendantes nommées 'Source_'.

1PROC CAS;
2 ica.fastIca
3 TABLE={name="mixed_signals", caslib="casuser"},
4 inputs={"sensor1", "sensor2"},
5 method={name="SYMMETRIC", maxIter=200, tolerance=1e-7},
6 gFunction="LOGCOSH",
7 seed=12345,
8 prefix="Source_",
9 OUTPUT={casOut={name="ica_results", replace=true}, copyVars={"time"}},
10 outputTables={names={IndependentComponents="ica_summary"}};
11RUN;
Résultat Attendu :
Création de la table 'ica_results' contenant les variables 'Source_1' and 'Source_2' qui devraient ressembler aux signaux originaux s1 et s2.