labelSpread
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.
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.
| 1 | DATA mycas.labeled; |
| 2 | INPUT id x1 x2 target $; |
| 3 | DATALINES; |
| 4 | 1 0.1 0.2 A |
| 5 | 2 0.9 0.8 B |
| 6 | 3 0.2 0.1 A |
| 7 | 4 0.8 0.9 B |
| 8 | ; |
| 9 | RUN; |
| 10 | DATA mycas.unlabeled; |
| 11 | INPUT id x1 x2; |
| 12 | DATALINES; |
| 13 | 5 0.15 0.15 |
| 14 | 6 0.85 0.85 |
| 15 | 7 0.5 0.5 |
| 16 | ; |
| 17 | RUN; |
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'.
| 1 | PROC 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"}; |
| 10 | RUN; |
| 11 | QUIT; |
Résultat Attendu :
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é.
| 1 | PROC 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"}; |
| 14 | RUN; |
| 15 | QUIT; |