gleam

graphMultiReg

##set_gleam

Description

L'action graphMultiReg implémente l'apprentissage multitâche linéaire généralisé. Elle permet de résoudre simultanément plusieurs problèmes de régression linéaire creuse qui sont liés entre eux. Au lieu d'entraîner chaque modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). de manière isolée, cette action exploite les similitudes entre les tâches pour améliorer la performance prédictive globale, surtout quand on a peu de données par tâche. C'est un peu comme si vos modèles de régression décidaient de travailler en équipe plutôt que de rester chacun dans leur coin : l'union fait la force (et la précision) ! Elle supporte différentes structures de graphes pour définir comment les tâches s'influencent mutuellement.

Syntaxe Officielle
gleam.graphMultiReg /
attributes={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}
graphOut={caslib="caslib-name", compress=true|false, indexVars={"variable-name"}, label="string", name="table-name", replace=true|false, ...}
graphTable={caslib="caslib-name", name="table-name", where="where-expression"}
graphType="CLUSTER" | "CUSTOM" | "FUSE" | "INDEP"
inputs={"variable-name-1", "variable-name-2", ...}
maxIters=integer
modelId="string"
modelOut={caslib="caslib-name", name="table-name", replace=true|false}
output={casOut={name="table-name", replace=true|false}, copyVars="ALL" | {"var1", "var2"}}
regL1=double
regL2=double
saveState={name="table-name", replace=true|false}
seed=double
table={caslib="caslib-name", name="table-name", where="where-expression"}
targets={"variable-name-1", "variable-name-2", ...}
tolerance=double;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée contenant les prédicteurs et les cibles. Elle doit impérativement contenir une variable nommée 'id' pour identifier les lignes.
targets Liste des variables cibles. Chaque variable de cette liste représente une tâche de régression distincte.
inputs Liste des variables explicatives (indépendantes) utilisées pour l'apprentissage.
graphType Définit la topologie du graphe reliant les tâches : 'CLUSTER' (toutes liées), 'FUSE' (liées en chaîne), 'INDEP' (indépendantes) ou 'CUSTOM' (défini par l'utilisateur via graphTable).
regL1 Poids de la pénalité L1 (Lasso). Plus cette valeur est élevée, plus le modèle aura tendance à annuler les coefficients des variables non pertinentes (modèle creux).
regL2 Poids de la pénalité de graphe. Elle contrôle à quel point les tâches liées doivent avoir des coefficients similaires.
modelOut Spécifie la table CAS de sortie qui contiendra les poids (coefficients) estimés pour chaque tâche.
maxIters Nombre maximum d'itérations pour l'algorithme d'optimisation (par défaut 100).

Préparation des données

Génération de données pour apprentissage multitâche

Ce code crée une table avec deux prédicteurs (x1, x2) et trois cibles (y1, y2, y3) simulant trois tâches corrélées.

1DATA mycas.multitask_data;
2 drop i;
3 DO id = 1 to 200;
4 x1 = rannor(123);
5 x2 = rannor(123);
6 /* Tâches liées : y1 et y2 sont proches, y3 est un peu différente */
7 y1 = 2.5 * x1 + 1.2 * x2 + rannor(123)*0.2;
8 y2 = 2.3 * x1 + 1.3 * x2 + rannor(123)*0.2;
9 y3 = 0.5 * x1 + 3.0 * x2 + rannor(123)*0.2;
10 OUTPUT;
11 END;
12RUN;

Exemples d'utilisation

Apprentissage multitâche de base (Cluster)

Exécute une régression multitâche où toutes les cibles sont supposées liées entre elles (structure par défaut CLUSTER).

1PROC CAS; gleam.graphMultiReg / TABLE={name="multitask_data"}, targets={"y1", "y2", "y3"}, inputs={"x1", "x2"}, modelOut={name="model_coeffs", replace=true}; RUN;
Résultat Attendu :
Une table 'model_coeffs' contenant les poids optimisés pour chaque variable et chaque tâche.
Régression multitâche avec pénalité de chaîne (FUSE) et Scoring

Utilise une structure de graphe de type 'FUSE' (chaque tâche est liée à la suivante) avec des paramètres de régularisation spécifiques et génère une table de scores.

1PROC CAS; gleam.graphMultiReg / TABLE={name="multitask_data"}, targets={"y1", "y2", "y3"}, inputs={"x1", "x2"}, graphType="FUSE", regL1=0.05, regL2=0.1, maxIters=500, tolerance=1e-8, OUTPUT={casOut={name="scored_tasks", replace=true}, copyVars="ALL"}, modelOut={name="final_coeffs", replace=true}, saveState={name="mtl_state", replace=true}; RUN;
Résultat Attendu :
Le modèle est entraîné sur 500 itérations. La table 'scored_tasks' contient les valeurs prédites, et 'mtl_state' permet de réutiliser le modèle plus tard avec l'action astore.score.