kfold
Description
L'action `kfold` (issue de l'ensemble d'actions Sampling and Partitioning) permet de diviser une table de données en `k` sous-ensembles (folds ou plis) de taille approximativement égale. C'est l'outil indispensable pour l'apprentissage automatique (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.) lors d'une validation croisée ! Un petit coup de dés avec le paramètre `seed` et le hasard fait bien les choses, tout en restant parfaitement reproductible.
Paramètres Clés
Préparation des données
Création d'une table de test
Générons une petite table de clients en mémoire CAS pour s'amuser avec le partitionnement k-fold.
| 1 | PROC CAS; TABLE.addtable / caslib="casuser" name="clients" replace=true records={{id=1, age=25, segment="A"}, {id=2, age=34, segment="B"}, {id=3, age=45, segment="A"}, {id=4, age=22, segment="C"}, {id=5, age=59, segment="B"}, {id=6, age=31, segment="A"}, {id=7, age=40, segment="C"}, {id=8, age=29, segment="B"}, {id=9, age=48, segment="A"}, {id=10, age=37, segment="B"}}; RUN; QUIT; |
Exemples d'utilisation
Partitionnement K-Fold basique
L'objectif est de diviser la table en 3 folds aléatoires (`k=3`) en conservant toutes les variables et en nommant la colonne contenant l'identifiant du fold '_Fold_'.
| 1 | PROC CAS; sampling.kfold / TABLE={name="clients", caslib="casuser"} k=3 seed=12345 OUTPUT={casOut={name="clients_kfold", caslib="casuser", replace=true}, copyVars="ALL", foldName="_Fold_"}; RUN; QUIT; |
Résultat Attendu :
K-Fold stratifié par segment
Cette fois-ci, on va un peu plus loin : on groupe par `segment` pour s'assurer que la répartition k-fold est bien équilibrée à l'intérieur de chaque segment (stratification). De plus, on demande explicitement de ne copier que les variables numériques dans la table de sortie.
| 1 | PROC CAS; sampling.kfold / TABLE={name="clients", caslib="casuser", groupBy={"segment"}} k=5 seed=802 OUTPUT={casOut={name="clients_kfold_strat", caslib="casuser", replace=true}, copyVars="ALL_NUMERIC", foldName="Fold_ID"}; RUN; QUIT; |