Bonjour à tous
Je suis Yusuke Ono, un testeur de JMP Japon.
Il me semble que lorsque la validation du facteur k est utilisée, les valeurs prédites deviennent parfois très bruyantes. Veuillez voir la capture d'écran ci-dessous. Il s'agit d'un graphique des valeurs prédites pour un modèle avec une variable X. La validation en 5 fois est utilisée.

Je voudrais suggérer que les valeurs prévues soient calculées simplement comme ci-dessous.
(0 + :Name( "y Predictor FoldA==1" ) + :Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) + :Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
La formule de prédiction actuelle est la suivante.
If( :N Val > 0,
(0 + :Name( "FoldA==1" ) * :Name( "y Predictor FoldA==1" ) + :Name( "FoldA==2" )
* :Name( "y Predictor FoldA==2" ) + :Name( "FoldA==3" ) *
:Name( "y Predictor FoldA==3" ) + :Name( "FoldA==4" ) *
:Name( "y Predictor FoldA==4" ) + :Name( "FoldA==5" ) *
:Name( "y Predictor FoldA==5" )) / :N Val,
(0 + (1 - :Name( "FoldA==1" )) * :Name( "y Predictor FoldA==1" ) + (1 -
:Name( "FoldA==2" )) * :Name( "y Predictor FoldA==2" ) + (1 -
:Name( "FoldA==3" )) * :Name( "y Predictor FoldA==3" ) + (1 -
:Name( "FoldA==4" )) * :Name( "y Predictor FoldA==4" ) + (1 -
:Name( "FoldA==5" )) * :Name( "y Predictor FoldA==5" )) / :N Trn
);
Pouvez-vous me dire votre avis?
Étapes pour reproduire ce phénomène
(1) Exécutez le script ci-dessous pour créer un exemple d'ensemble de données.
Names Default To Here(1);
Random Reset(111111111);
n = 10000;
x = J(n, 1, Random Uniform(-10, 10));
y = Sin(x) + J(n, 1, Random Normal());
As Table(x||y,<<COLUMN names=""></COLUMN>
(2) Sélectionner [Compléments] > [XGBoost] > [Créer des colonnes pliées en K] .
2-1. Tapez "1" pour [Nombre de colonnes de pliage en K à créer] .
2-2. Spécifiez "y" à [O, réponse] .
2-3. Cliquez sur [Aller] .
(3) Exécutez le script ci-dessous.
XGBoost(
Y( :y ), X( :x ),
Validation( :FoldA ),
Fit( max_depth( 3 ), alpha( 10 ), lambda( 10 ), iterations( 50 ) ),
);
(4) Sélectionner [Enregistrer la formule de prédiction] dans le menu du triangle rouge au contour "Modèle 1".
(5) Exécutez le script ci-dessous pour voir les valeurs prédites enregistrées.
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :y Predictor ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
(6) Exécutez le script ci-dessous pour voir l'intrigue de ma suggestion.
New Column( "My Suggestion",
Formula(
(:Name( "y Predictor FoldA==1" ) +
:Name( "y Predictor FoldA==2" ) +
:Name( "y Predictor FoldA==3" ) +
:Name( "y Predictor FoldA==4" ) +
:Name( "y Predictor FoldA==5" )) / 5
)
);
Graph Builder(
Size( 1209, 478 ),
Show Control Panel( 0 ),
Variables( X( :x ), Y( :My Suggestion ) ),
Elements( Line( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "x", ScaleBox,
{Format( "Fixed Dec", 12, 1 ), Min( -3 ), Max( 3 ), Inc( 1 ),
Minor Ticks( 1 )}
)
)
);
Le tableau de données ci-joint contient ces résultats. Veuillez exécuter les scripts de table pour voir les tracés.
Merci d'avance pour votre avis.
Ce sont de bonnes questions à poser à Yusuke. Si nous décomposons le processus global en deux étapes principales, la première consiste à déterminer un ou plusieurs modèles XGBoost raisonnables. Pour cette validation croisée k-fold ou quelque chose de similaire est inestimable. Deuxièmement, faire des prédictions, et divisons cela en faisant des prédictions sur les données d'entraînement actuelles et sur les nouvelles données de test. Pour les prédictions sur les données d'entraînement, l'utilisation de n'importe quel modèle formé sur les mêmes données aboutira à des prédictions qui sont généralement surajustées et irréalistes, donc les prédictions hors pli sont les plus logiques. Pour les nouvelles données de test, la moyenne des prédictions de tous les modèles qui n'ont pas vu ces données est bonne comme vous l'avez suggéré. (En fait, le complément le fait déjà pour toutes les lignes pour lesquelles Y est manquant.) Il est également possible d'effectuer un ajustement final ultérieur aux données complètes sans validation, en utilisant des paramètres déterminés par validation croisée. D'après mon expérience, les prédictions de la moyenne du pli k («ensachage») et celles d'un ajustement complet des données ont tendance à être très similaires, même si vous pouvez même les faire la moyenne, par exemple 0,5 * (prédictions k pli ensachées) + 0,5 * (prédictions de l'ajustement complet des données). Je ne pense pas qu'essayer de trouver le «meilleur» parmi les ajustements de modèle k-fold vaut la peine d'essayer, car ils sont équivalents sur le plan opérationnel et vous courez le risque de surajustement avec un tel choix.
Merci pour votre réponse, Russ.
Je comprends maintenant que ces prédictions hors pli par XGBoost de JMP peuvent être utilisées pour évaluer des modèles, détecter des valeurs aberrantes et créer des modèles d'ensemble.
Je pense qu'il existe plusieurs façons de créer des modèles prédictifs finaux lorsque nous utilisons la validation croisée k.
- Remontez un modèle avec les paramètres de réglage sélectionnés pour toutes les données. (
- Modèles k moyens. (
- Utilisez uniquement le «meilleur» modèle parmi les k modèles.
Pensez-vous que la première méthode est généralement meilleure que la deuxième et la troisième pour obtenir un modèle prédictif final?
Merci Yusuke pour la question et très belle description de la façon de le reproduire avec JSL. Vous avez trouvé une différence importante entre le fonctionnement du complément lors du calcul des valeurs prédites par rapport aux autres plates-formes de modélisation prédictive dans JMP. Les prédictions de l'add-in sont "hors pli", c'est-à-dire que chaque valeur prédite est calculée uniquement à partir d'ajustements de modèle qui excluent cette observation.
Prenons l'exemple de base 5 fois et supposons que la première ligne des données est affectée au pli 3. Le complément s'adapte à cinq modèles, en tenant chaque pli à son tour, mais la valeur prévue pour cette première ligne ne sera basée que sur le troisième ajustement qui exclut le pli 3. Une logique similaire est utilisée pour toutes les lignes. Pourquoi faire ceci? Plusieurs raisons:
1. Les prédictions hors pli fournissent une évaluation réaliste de la façon dont le modèle fonctionnera sur des données futures invisibles. En fait, toutes les statistiques de sortie et les graphiques étiquetés «Validation» sont basés sur les prédictions de repli. Comme vous l'avez remarqué, la variabilité de ces prédictions peut être beaucoup plus grande que les prédictions calculées avec des données "in-fold", c'est-à-dire lorsque les mêmes données sont utilisées pour l'apprentissage et la prédiction.
2. La colonne de prédiction hors pli est un excellent moyen de rechercher les valeurs aberrantes et les erreurs que le modèle a pu commettre dans l'ensemble de l'ensemble d'apprentissage. Le pli en K est agréable en ce que chaque observation est présentée exactement une fois, et nous avons donc une prédiction hors pli pour chaque ligne.
3. La colonne de prédiction out-of-fold peut être utilisée pour un ensemble avec des colonnes similaires créées à partir d'autres bons modèles. Cela peut être fait par simple moyenne ou en utilisant les colonnes hors pli comme nouveaux prédicteurs dans un modèle de second niveau dans une technique souvent appelée "empilement". Le modèle de deuxième niveau est généralement plus simple que les modèles de premier niveau, par exemple, un modèle de lasso de régression généralisée ou même un autre modèle XGBoost avec une profondeur moins profonde. Les modèles d'ensemble empilés ont tendance à avoir de meilleures performances prédictives que n'importe lequel des modèles de premier niveau.
Pour obtenir les prédictions simples basées sur la formation que vous suggérez, un bon moyen consiste à ajuster un nouveau modèle XGBoost sans aucune colonne de validation spécifiée. Une autre méthode connexe consiste à faire une copie de la table de données, à définir toutes les valeurs Y comme manquantes et à la concaténer avec les données d'origine. Les prédictions dans ce cas pour les lignes avec des Y manquants seront la moyenne des prédictions de tous les modèles ajustés, une technique appelée «ensachage».
Enfin, je voulais mentionner que la formule complexe que vous affichez est le résultat de la couverture de tous les cas. Par exemple, si une ligne dans les données d'origine a un Y manquant, nous souhaitons utiliser la prédiction ensachée sur tous les modèles correspondants.