neuralNet

annTrain

Description

L'action `annTrain` du jeu d'actions `neuralNet` est un outil puissant pour entraîner des réseaux de neurones artificiels (ANN) dans SAS Viya. Elle permet de construire et d'optimiser des modèles prédictifs pour des tâches de classification et de régression. Cette action supporte diverses architectures, y compris les perceptrons multicouches (MLP) et les modèles linéaires généralisés (GLIM), offrant une flexibilité pour modéliser des relations complexes dans les données. Elle intègre des fonctionnalités avancées telles que la régularisation, le dropout, et plusieurs algorithmes d'optimisation (SGD, L-BFGS, ADAM) pour améliorer la performance et éviter le surajustement. L'action peut également générer du code de scoring SAS pour déployer facilement le modèle entraîné.

neuralNet.annTrain { acts={"EXP", "IDENTITY", "LOGISTIC", "RECTIFIER", "SIN", "SOFTPLUS", "TANH"}, applyRowOrder=TRUE | FALSE, arch="DIRECT" | "GLIM" | "MLP", attributes={{...}, ...}, bias=double, casOut={...}, code={...}, combs={"ADD", "LINEAR", "RADIAL"}, delta=double, dropOut=double, dropOutInput=double, errorFunc="ENTROPY" | "GAMMA" | "NORMAL" | "POISSON", freq="variable-name", fullWeights=TRUE | FALSE, hiddens={64-bit-integer-1, ...}, includeBias=TRUE | FALSE, inputs={{...}, ...}, inversePriors=TRUE | FALSE, listNode="ALL" | "HIDDEN" | "INPUT" | "OUTPUT", missing="MAX" | "MEAN" | "MIN" | "NONE", modelId="string", modelTable={...}, nAnns=64-bit-integer, nloOpts={...}, nominals={{...}, ...}, nTries=64-bit-integer, randDist="CAUCHY" | "MSRA" | "NORMAL" | "UNIFORM" | "XAVIER", resume=TRUE | FALSE, samplingRate=double, saveState={...}, scaleInit=64-bit-integer, seed=double, std="MIDRANGE" | "NONE" | "STD", step=double, t=double, table={...}, target="variable-name", targetAct="EXP" | "IDENTITY" | "LOGISTIC" | "SIN" | "SOFTMAX" | "TANH", targetComb="ADD" | "LINEAR" | "RADIAL", targetMissing="MAX" | "MEAN" | "MIN" | "NONE", targetStd="MIDRANGE" | "NONE" | "STD", validTable={...}, weight="variable-name" };
Paramètres
ParamètreDescription
actsSpécifie la fonction d'activation pour les neurones de chaque couche cachée.
applyRowOrderSpécifie si l'action doit utiliser un ordre de lignes pré-spécifié pour la reproductibilité.
archSpécifie l'architecture du réseau à entraîner (par exemple, MLP, GLIM).
attributesSpécifie les attributs temporaires, comme un format, à appliquer aux variables d'entrée.
biasSpécifie une valeur de biais fixe pour tous les neurones cachés et de sortie. Dans ce cas, les paramètres de biais sont fixes et non optimisés.
casOutSpécifie la table de sortie pour stocker les poids du modèle entraîné.
codeDemande à l'action de produire du code de scoring SAS pour le déploiement du modèle.
combsSpécifie la fonction de combinaison pour les neurones de chaque couche cachée.
deltaSpécifie le paramètre de recuit lors d'une optimisation globale par recuit simulé (SA).
dropOutSpécifie le ratio de dropout (abandon) pour les couches cachées afin de prévenir le surajustement.
dropOutInputSpécifie le ratio de dropout (abandon) pour les couches d'entrée.
errorFuncSpécifie la fonction d'erreur (ou de perte) à utiliser pour entraîner le réseau, adaptée au type de variable cible (par exemple, ENTROPY pour la classification).
freqSpécifie une variable numérique qui contient la fréquence d'occurrence de chaque observation.
fullWeightsGénère le modèle de poids complet pour l'optimiseur LBFGS.
hiddensSpécifie le nombre de neurones cachés pour chaque couche cachée dans le modèle.
includeBiasIndique si les paramètres de biais doivent être inclus pour les unités cachées et de sortie.
inputsSpécifie les variables d'entrée (prédicteurs) à utiliser dans l'analyse.
inversePriorsCalcule le poids appliqué à l'erreur de prédiction de chaque variable cible nominale en fonction de la fréquence des classes.
listNodeSpécifie les nœuds (entrée, cachés, sortie) à inclure dans la table de sortie générée par le code de scoring.
missingSpécifie comment imputer les valeurs manquantes pour les variables d'entrée.
modelIdSpécifie un nom de variable d'ID de modèle qui est inclus dans le code de scoring DATA step généré.
modelTableSpécifie la table qui contient un modèle de réseau de neurones pré-entraîné à utiliser comme point de départ.
nAnnsSpécifie le nombre de réseaux à sélectionner parmi le nombre d'essais spécifié.
nloOptsSpécifie les options pour l'optimisation non linéaire, y compris l'algorithme (par exemple, SGD, LBFGS, ADAM) et ses paramètres.
nominalsSpécifie les variables d'entrée et cibles nominales (catégorielles) à utiliser dans l'analyse.
nTriesSpécifie le nombre d'essais lors de l'entraînement de réseaux avec des poids initiaux aléatoires.
randDistSpécifie la distribution pour la génération aléatoire des poids de connexion initiaux du réseau.
resumeReprend une optimisation d'entraînement en utilisant les poids obtenus d'un entraînement précédent.
samplingRateSpécifie la fraction des données à utiliser pour construire un réseau de neurones.
saveStateSpécifie la table dans laquelle sauvegarder l'état du modèle pour une prédiction ou un entraînement futurs.
scaleInitSpécifie comment mettre à l'échelle les poids initiaux.
seedSpécifie la graine aléatoire pour la génération de nombres aléatoires afin d'initialiser les poids du réseau, assurant la reproductibilité.
stdSpécifie la méthode de standardisation à utiliser sur les variables d'intervalle.
stepSpécifie une taille de pas pour les perturbations sur les poids du réseau lors des optimisations globales.
tSpécifie le paramètre de température artificielle pour les optimisations globales de type Monte Carlo ou recuit simulé.
tableSpécifie la table de données d'entraînement contenant les variables d'entrée et la variable cible.
targetSpécifie la variable cible (ou de réponse) pour l'entraînement.
targetActSpécifie la fonction d'activation pour les neurones de la couche de sortie.
targetCombSpécifie la fonction de combinaison pour les neurones sur les nœuds de sortie cibles.
targetMissingSpécifie comment imputer les valeurs manquantes pour la variable cible.
targetStdSpécifie la standardisation à utiliser sur les variables cibles d'intervalle.
validTableSpécifie la table avec les données de validation pour l'arrêt précoce et l'évaluation du modèle.
weightSpécifie une variable pour pondérer les erreurs de prédiction pour chaque observation pendant l'entraînement.
Préparation des Données Voir la fiche de ce code dataprep
Création de Données de Classification

Ce bloc de code SAS crée un jeu de données synthétique nommé `class_data`. Il est conçu pour des tâches de classification binaire. Il contient cinq variables d'entrée numériques (`input1`-`input5`) et une variable cible binaire (`target`) qui est créée en fonction d'une combinaison linéaire des entrées. Ces données sont ensuite chargées dans une table CAS nommée `CLASS_DATA` pour être utilisées par l'action `annTrain`.

Copié !
1DATA class_data;
2 call streaminit(12345);
3 DO i = 1 to 1000;
4 input1 = rand('UNIFORM');
5 input2 = rand('UNIFORM') * 2;
6 input3 = rand('NORMAL', 0, 1);
7 input4 = rand('NORMAL', 5, 1.5);
8 input5 = rand('POISSON', 3);
9 IF (input1 + 0.5*input2 - 0.2*input4 > 0.5) THEN target = 1;
10 ELSE target = 0;
11 OUTPUT;
12 END;
13RUN;
14 
15PROC CASUTIL;
16 load DATA=class_data outcaslib=casuser casout='CLASS_DATA' replace;
17QUIT;

Exemples

Cet exemple montre comment entraîner un réseau de neurones de type Perceptron Multicouche (MLP) simple. Le réseau a deux couches cachées, la première avec 10 neurones et la seconde avec 5. Il utilise les variables `input1` à `input5` pour prédire la variable `target` à partir de la table `CLASS_DATA`. L'optimisation est effectuée à l'aide de la descente de gradient stochastique (SGD).

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION neuralNet.annTrain /
3 TABLE={name='CLASS_DATA'},
4 inputs={{name='input1'}, {name='input2'}, {name='input3'}, {name='input4'}, {name='input5'}},
5 target='target',
6 hiddens={10, 5},
7 arch='MLP',
8 nloOpts={algorithm='SGD', optmlOpt={maxIters=100}, sgdOpt={learningRate=0.01}}
9 ;
10QUIT;
Résultat :
L'action entraîne le réseau de neurones et affiche des tables de résultats, y compris les informations sur le modèle, le résumé de l'itération, et les informations sur l'ajustement. La table 'OptIterHistory' montrera la progression de la fonction d'objectif (erreur) au fil des itérations.

Cet exemple plus complexe divise les données en ensembles d'entraînement (70%) et de validation (30%). Il entraîne un réseau MLP avec une seule couche cachée de 20 neurones. Il utilise l'optimiseur L-BFGS et applique une régularisation L1 (0.01) et L2 (0.005) pour éviter le surajustement. La table `validTable` est utilisée pour l'arrêt précoce (`stagnation=5`), qui arrête l'entraînement si l'erreur de validation n'améliore pas pendant 5 itérations consécutives. Le modèle final et son état sont sauvegardés dans les tables `my_model_weights` et `my_model_state` respectivement.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 partition.partition TABLE={name='CLASS_DATA'} partition={fraction={train=0.7, valid=0.3}, seed=54321} casout={name='PARTITIONED_DATA', replace=true};
3 
4 ACTION neuralNet.annTrain /
5 TABLE={name='PARTITIONED_DATA', where='_PartInd_=1'},
6 validTable={name='PARTITIONED_DATA', where='_PartInd_=2'},
7 inputs={{name='input1'}, {name='input2'}, {name='input3'}, {name='input4'}, {name='input5'}},
8 target='target',
9 hiddens={20},
10 arch='MLP',
11 std='STD',
12 targetStd='NONE',
13 nloOpts={
14 algorithm='LBFGS',
15 optmlOpt={regL1=0.01, regL2=0.005, maxIters=200},
16 validate={stagnation=5}
17 },
18 casOut={name='my_model_weights', replace=true},
19 saveState={name='my_model_state', replace=true}
20 ;
21QUIT;
Résultat :
L'action entraîne le réseau et utilise l'ensemble de validation pour surveiller la performance. Les résultats incluront une table 'ConvergenceStatus' indiquant la raison de l'arrêt (par exemple, 'Stagnation'). Les tables 'my_model_weights' et 'my_model_state' seront créées dans la caslib active, contenant respectivement les poids du réseau et l'état de l'optimiseur pour une utilisation ultérieure.

FAQ

Quel est l'objectif de l'action `annTrain` dans SAS Viya ?
Quelles sont les différentes architectures de réseau disponibles avec l'action `annTrain` ?
Comment l'action `annTrain` gère-t-elle les valeurs manquantes dans les données d'entrée ?
Quels algorithmes d'optimisation peuvent être utilisés pour l'entraînement avec `annTrain` ?
Est-il possible de sauvegarder l'état d'un modèle entraîné pour une utilisation future ?
Comment puis-je spécifier la structure d'un réseau de neurones, comme le nombre de couches cachées et de neurones ?

Scénarios associés

Cas d'usage
Scénario Standard : Prédiction de l'Appétence Client pour une Offre Marketing

Une entreprise de télécommunications souhaite optimiser sa nouvelle campagne marketing. L'objectif est de prédire quels clients sont les plus susceptibles de souscrire à une nou...

Cas d'usage
Scénario Cas Limite : Maintenance Prédictive avec Données de Capteurs Incomplètes

Une usine utilise des milliers de capteurs sur sa chaîne de production. Certains capteurs sont anciens et transmettent des données de manière intermittente, générant des valeurs...

Cas d'usage
Scénario Performance : Détection de Fraude sur Données Transactionnelles Déséquilibrées

Une institution financière doit détecter les transactions par carte de crédit frauduleuses en temps réel. Le défi majeur est que les fraudes sont des événements très rares (moin...