Scénario de test & Cas d'usage
Entraînement de réseaux de neurones artificiels classiques.
Découvrir toutes les actions de neuralNetCréation d'une table de relevés de capteurs (température, pression, vibration) avec un taux élevé de valeurs manquantes (environ 20%) pour les variables d'entrée. La variable cible est binaire.
| 1 | DATA capteurs_data; |
| 2 | call streaminit(555); |
| 3 | DO i = 1 to 10000; |
| 4 | temperature = 70 + rand('NORMAL', 10, 5); |
| 5 | pression = 100 + rand('NORMAL', 20, 10); |
| 6 | vibration = 5 + rand('NORMAL', 2, 1); |
| 7 | /* Introduction de valeurs manquantes */ |
| 8 | IF rand('UNIFORM') < 0.2 THEN call missing(temperature); |
| 9 | IF rand('UNIFORM') < 0.25 THEN call missing(pression); |
| 10 | IF rand('UNIFORM') < 0.15 THEN call missing(vibration); |
| 11 | |
| 12 | panne_imminente = 0; |
| 13 | IF (temperature > 95 or pression > 130 or vibration > 8) and not (missing(temperature) and missing(pression)) THEN DO; |
| 14 | IF rand('UNIFORM') > 0.3 THEN panne_imminente = 1; |
| 15 | END; |
| 16 | OUTPUT; |
| 17 | END; |
| 18 | RUN; |
| 19 | |
| 20 | PROC CASUTIL; |
| 21 | load DATA=capteurs_data outcaslib=casuser casout='CAPTEURS_DEFAILLANTS' replace; |
| 22 | QUIT; |
| 1 | PROC CAS; |
| 2 | ACTION neuralNet.annTrain / |
| 3 | TABLE={name='CAPTEURS_DEFAILLANTS'}, |
| 4 | inputs={{name='temperature'}, {name='pression'}, {name='vibration'}}, |
| 5 | target='panne_imminente', |
| 6 | nominals={{name='panne_imminente'}}, |
| 7 | hiddens={15}, |
| 8 | missing='NONE', /* 'NONE' est le comportement par défaut qui exclut les lignes */ |
| 9 | errorFunc='ENTROPY', |
| 10 | nloOpts={algorithm='SGD', sgdOpt={learningRate=0.05}}; |
| 11 | QUIT; |
| 1 | PROC CAS; |
| 2 | ACTION neuralNet.annTrain / |
| 3 | TABLE={name='CAPTEURS_DEFAILLANTS'}, |
| 4 | inputs={{name='temperature'}, {name='pression'}, {name='vibration'}}, |
| 5 | target='panne_imminente', |
| 6 | nominals={{name='panne_imminente'}}, |
| 7 | hiddens={15}, |
| 8 | missing='MEAN', /* Imputation par la moyenne */ |
| 9 | errorFunc='ENTROPY', |
| 10 | nloOpts={algorithm='SGD', sgdOpt={learningRate=0.05}}, |
| 11 | code={caslib='casuser', casout='scoring_code_imputation', name='score_panne'}; |
| 12 | QUIT; |
La première étape devrait montrer dans les résultats un nombre d'observations utilisées bien inférieur à 10000, confirmant que les lignes avec des valeurs manquantes ont été ignorées. La deuxième étape doit s'exécuter avec succès en utilisant les 10000 observations. Le modèle produit est entraîné sur des données imputées, et un fichier de code de scoring est généré, démontrant la robustesse de l'action face à des données incomplètes.