graphSemiSupLearn

labelSpread

##set_graphsemisuplearn

Description

L'action `labelSpread` (Propagation d'étiquettes) est une technique magique de machine learningBranche de l'IA utilisant des algorithmes pour apprendre des modèles à partir de données. Il permet d'automatiser des prédictions ou des décisions sans programmation explicite de chaque règle. semi-supervisé . Elle utilise un graphe de similaritéReprésentation de données où les nœuds sont des observations et les arêtes (liens) indiquent une forte proximité. Utilisé pour le clustering ou la détection de communautés via des mesures de distance. pour propager subtilement les étiquettes de données connues vers des données non étiquetées. Idéal quand vous avez une flemme monumentale d'étiqueter tout votre jeu de données à la main ! L'algorithme repose sur des noyaux gaussiensFonction de similarité mesurant la proximité entre points via une courbe en cloche. Elle permet de traiter des relations non linéaires en projetant les données dans un espace de dimension infinie. ou les k-plus proches voisins pour tisser son réseau de prédictions.

Syntaxe Officielle
proc cas;
graphSemiSupLearn.labelSpread /
table={name="table_non_etiquettes", caslib="casuser"}
labeledTable={name="table_etiquettes", caslib="casuser"}
inputs={"var1", "var2"}
target="variable_cible"
nominals={"var_nominale"}
k=1
gamma=20.0
maxIters=3
outLabelProb=FALSE
output={casOut={name="table_resultats", replace=true}, copyVars={"var_id"}};
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée principale (généralement celle contenant vos données non étiquetées ou l'ensemble total).
labeledTable Spécifie la table d'entrée contenant vos précieuses observations déjà étiquetées (la source de vérité).
inputs Les variables (features) utilisées pour calculer les similarités et analyser les données entre les observations.
target La variable cible (le label) que l'on cherche à propager aux données non étiquetées.
nominals Spécifie les variables qualitatives (catégorielles/nominales) parmi vos variables d'entrée.
gamma L'inverse de la variance pour le noyau Gaussien, qui sert à calculer la similarité entre les paires d'échantillons (par défaut 20). Plus il est élevé, plus la zone d'influence est restreinte.
k Le nombre de plus proches voisins à utiliser pour construire le graphe (par défaut 1).
maxIters Le nombre maximum d'itérations pour l'algorithme de diffusion des étiquettes (par défaut 3).
outLabelProb Si défini sur TRUE, l'action restituera les probabilités d'appartenance à chaque classe d'étiquette dans la table de sortie.
output Définit les paramètres de sortie, notamment la table CAS de destination (`casOut`) et les variables d'origine à conserver (`copyVars`).

Préparation des données

Création des données d'exemple

Nous allons créer deux petites tables en mémoire : une contenant quelques observations avec leur classe (`labeled`) et une autre sans étiquettes (`unlabeled`) à deviner.

1DATA mycas.labeled;
2 INPUT id x1 x2 target $;
3 DATALINES;
41 0.1 0.2 A
52 0.9 0.8 B
63 0.2 0.1 A
74 0.8 0.9 B
8;
9RUN;
10DATA mycas.unlabeled;
11 INPUT id x1 x2;
12 DATALINES;
135 0.15 0.15
146 0.85 0.85
157 0.5 0.5
16;
17RUN;

Exemples d'utilisation

Propagation basique d'étiquettes

Ce premier exemple utilise les valeurs par défaut (k=1, gamma=20, maxIters=3) pour propager la variable cible 'target'.

1PROC CAS;
2 graphSemiSupLearn.labelSpread /
3 TABLE={name="unlabeled"}
4 labeledTable={name="labeled"}
5 inputs={"x1", "x2"}
6 target="target"
7 OUTPUT={casOut={name="out_simple", replace=true}, copyVars={"id"}};
8 RUN;
9 TABLE.fetch / TABLE={name="out_simple"};
10RUN;
11QUIT;
Résultat Attendu :
Une table CAS 'out_simple' contenant l'identifiant 'id' et la nouvelle étiquette prédite (target) pour chaque observation du jeu non étiqueté.
Propagation avancée avec probabilités et paramétrage

Un exemple plus fin où l'on modifie le nombre de voisins (k=2), les itérations, et où l'on exige d'avoir les probabilités de prédiction pour mesurer l'incertitude du modèle semi-supervisé.

1PROC CAS;
2 graphSemiSupLearn.labelSpread /
3 TABLE={name="unlabeled"}
4 labeledTable={name="labeled"}
5 inputs={"x1", "x2"}
6 target="target"
7 k=2
8 gamma=15.0
9 maxIters=10
10 outLabelProb=TRUE
11 OUTPUT={casOut={name="out_detailed", replace=true}, copyVars={"id", "x1", "x2"}};
12 RUN;
13 TABLE.fetch / TABLE={name="out_detailed"};
14RUN;
15QUIT;
Résultat Attendu :
La table 'out_detailed' sera générée. Elle inclura les variables 'id', 'x1', 'x2', la classe finale prédite pour 'target', ainsi que des colonnes de probabilité spécifiques à chaque valeur possible de l'étiquette (A et B).