Le script commence par générer un jeu de données d'entraînement et un jeu de données de test. Il télécharge et inclut ensuite la macro `%_SuperLearner` et des algorithmes d'apprentissage supplémentaires depuis des URLs externes. L'étape principale consiste à appeler la macro `%_SuperLearner` pour appliquer une série d'algorithmes (régression linéaire, random forest, boosting, réseaux de neurones, etc.) sur les données d'entraînement, en utilisant une validation croisée à 10 plis. Le super apprenant combine ces modèles pour optimiser la prédiction. Enfin, une macro personnalisée `%rsq` est définie et utilisée pour calculer et afficher le R-carré (R-squared) pour le modèle Super Learner et pour chaque algorithme individuel, permettant de comparer leur performance prédictive sur le jeu de données de test.
Analyse des données
Type : CREATION_INTERNE
Les jeux de données 'train' et 'test' sont générés de manière procédurale dans un unique DATA STEP en utilisant la fonction RAND pour simuler une relation non-linéaire entre une variable prédictive 'x' et une variable de réponse 'y' avec un bruit gaussien.
1 Bloc de code
FILENAME / %INCLUDE
Explication : Ce bloc assigne des références de fichier (filerefs) à des URLs externes pointant vers des macros SAS. Il utilise ensuite l'instruction `%INCLUDE` pour télécharger et compiler ces macros dans la session SAS actuelle. La première macro est le 'Super Learner' principal, et la seconde contient des algorithmes d'apprentissage supplémentaires.
Copié !
FILENAME slgh URL "https://cirl-unc.github.io/SuperLearnerMacro/super_learner_macro.sas";
%INCLUDE slgh;
* extra learners;
FILENAME el URL "https://cirl-unc.github.io/SuperLearnerMacro/extralearners/sas_superlearner_extra_learners.sas";
%INCLUDE el;
FILENAME el URL "https://cirl-unc.github.io/SuperLearnerMacro/extralearners/sas_superlearner_extra_learners.sas";
6
%INCLUDE el;
2 Bloc de code
DATA STEP Data
Explication : Ce DATA STEP crée deux tables SAS : 'train' (100 observations) et 'test' (10000 observations). Il génère une variable prédictive 'x' et une variable réponse 'y' basée sur une fonction en escalier de 'x' à laquelle un bruit aléatoire gaussien est ajouté. `CALL STREAMINIT` assure la reproductibilité de la génération de nombres aléatoires.
Copié !
DATA train(DROP=i my) test(DROP=i my);
CALL STREAMINIT(1229);
DO i = 1 to 10100;
x = rand('uniform')*8-4;
my = -2*(x<-3) + 2.55*(x>-2)-2*(x>0)+4*(x>2)-1*(x>3);
y = my + RAND('gaussian');
IF i<=100 THEN OUTPUT train;
ELSE OUTPUT test;
END;
RUN;
1
DATA train(DROP=i my) test(DROP=i my);
2
CALL STREAMINIT(1229);
3
DO i = 1 to 10100;
4
x = rand('uniform')*8-4;
5
my = -2*(x<-3) + 2.55*(x>-2)-2*(x>0)+4*(x>2)-1*(x>3);
6
y = my + RAND('gaussian');
7
IF i<=100THENOUTPUT train;
8
ELSEOUTPUT test;
9
END;
10
RUN;
3 Bloc de code
MACRO %_SuperLearner
Explication : Appel de la macro de Super Learning. Elle est configurée pour prédire 'y' à partir de 'x', en utilisant 'train' comme données d'entraînement et 'test' pour la prédiction finale. Une librairie de 18 algorithmes est spécifiée. Le super apprenant utilisera une validation croisée à 10 plis et la méthode des moindres carrés non négatifs (NNLS) pour combiner les modèles. Les prédictions sont sauvegardées dans la table 'sl_outdata'.
Copié !
%_SuperLearner(y=y,
continuous_predictors=x,
indata=train,
preddata=test,
outdata=sl_outdata,
library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10,
folds=10,
method=NNLS,
dist=GAUSSIAN,
quietwarning=TRUE, /* suppress some warnings being printed to the log */
quietnotes=TRUE, /* suppress notes being printed to the log */
timer=FALSE,
printres=TRUE
);
quietwarning=TRUE, /* suppress some warnings being printed to the log */
11
quietnotes=TRUE, /* suppress notes being printed to the log */
12
timer=FALSE,
13
printres=TRUE
14
);
4 Bloc de code
MACRO %rsq
Explication : Ce bloc définit et exécute une macro nommée `%rsq`. La macro construit dynamiquement une requête PROC SQL pour calculer le coefficient de détermination (R-carré) pour le super apprenant et chaque modèle individuel spécifié dans le paramètre 'library'. Elle utilise les données de prédiction de la table 'sl_outdata' et stocke les résultats dans une nouvelle table nommée 'rsq'.
Copié !
%MACRO rsq(library = );
%LET j = 1;
%LET res = (y-p_sl_full)**2 AS res_sl,;
%LET rsq = 1-MEAN(res_sl)/MEAN(devsq) AS rsq_sl, ;
%DO %WHILE(%SCAN(&library, &j)^=);
%LET book = %SCAN(&library, &j);
%LET res = &res (y-p_&book._full)**2 AS res_&book,;
%LET rsq = &rsq 1-MEAN(res_&book.)/MEAN(devsq) AS rsq_&book,;
%LET j = %EVAL(&j+1);
%END;
%PUT &res;
%PUT &rsq;
PROC SQL;
CREATE TABLE dev AS SELECT &res (Y-MEAN(Y))**2 AS devsq FROM sl_outdata(WHERE=(__train=0));
SELECT &rsq MEAN(devsq) as den FROM DEV;
CREATE TABLE rsq AS SELECT &rsq MEAN(devsq) as den FROM DEV;
QUIT;
%MEND;
%rsq(library= linreg linregint rf bagging10 bagging01 bagging00 baggingms5 gam2 gam3 gam4 boost nn2 nn3 nn4 nn5 mars loess75 loess50 loess25 loess10);
1
%MACRO rsq(library = );
2
%LET j = 1;
3
%LET res = (y-p_sl_full)**2 AS res_sl,;
4
%LET rsq = 1-MEAN(res_sl)/MEAN(devsq) AS rsq_sl, ;
5
%DO %WHILE(%SCAN(&library, &j)^=);
6
%LET book = %SCAN(&library, &j);
7
%LET res = &res (y-p_&book._full)**2 AS res_&book,;
8
%LET rsq = &rsq 1-MEAN(res_&book.)/MEAN(devsq) AS rsq_&book,;
9
%LET j = %EVAL(&j+1);
10
%END;
11
%PUT &res;
12
%PUT &rsq;
13
PROC SQL;
14
CREATE TABLE dev AS SELECT &res (Y-MEAN(Y))**2 AS devsq FROM sl_outdata(WHERE=(__train=0));
15
SELECT &rsq MEAN(devsq) as den FROM DEV;
16
CREATE TABLE rsq AS SELECT &rsq MEAN(devsq) as den FROM DEV;
Explication : Cette procédure affiche le contenu de la table 'rsq', qui contient les valeurs de R-carré calculées, permettant de visualiser et de comparer la performance de tous les modèles.
Copié !
PROC PRINT DATA = rsq;
TITLE 'r squared';
RUN;
1
PROC PRINTDATA = rsq;
2
TITLE 'r squared';
3
RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Simplified version of simulation example 1 from: A. P. Keil. Super Learning in the SAS system. ArXiv e-prints, May 2018. https://arxiv.org/abs/1805.08058. Adapted from : E. C. Polley and M. J. van der Laan. Super learner in prediction. Report, Division of Biostatistics, University of California, Berkeley, 2010.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.