Ajouter des pénalités au nombre de divisions dans la plate-forme de partition pour réduire le nombre de feuilles ?J'ai récemment passé beaucoup de temps sur la plateforme Partition et je recherche actuellement un moyen d'automatiser les analyses.
Mon problème est le suivant : en général, j'ai divisé l'ensemble de données 50/50 formation/validation et j'ai appuyé sur "Go", ce qui maximise la validation RSquare. Mais, cela conduit souvent à des modèles qui comportent un plus grand nombre de divisions que ce qui est réellement crédible , par exemple ici où il crée 5 divisions pour accéder à la validation RSquare 0,288, alors que la simple utilisation de deux divisions obtiendrait un ajustement presque aussi bon de 0,27.

En conséquence, je dois généralement toujours élaguer manuellement les divisions pour obtenir un RSquare de validation acceptable avec un nombre de termes de modèle suffisamment faible.
Existe-t-il un moyen de demander à JMP d'appliquer une pénalité et de créer une sorte de RSquare de validation « régularisé » qui pénalise les critères de sélection du modèle en fonction du nombre de divisions ? Par exemple, le RSquare de validation « régularisé » pourrait être [RSquare de validation] - 0,05*[N Splits]. Ou peut-être existe-t-il une meilleure façon de régulariser (par exemple, continuez à ajouter des termes s'ils peuvent modéliser au moins 5 % de la variance résiduelle, plutôt que 5 % de la variance absolue.)
Les solutions JSL sont les bienvenues, car elles seraient principalement destinées aux analyses automatisées.
Modélisation prédictive et apprentissage automatiqueRe : Ajouter des pénalités au nombre de divisions dans la plateforme de partition pour réduire le nombre de feuilles ?Salut @markschwab ,
Vous utilisez le code comme prévu, je venais de faire quelques suppositions qui n'étaient pas suffisamment génériques pour fonctionner en toutes circonstances. Je pensais que vous aviez une colonne de validation et je l'ai donc programmée pour qu'elle s'exécute avec une. le script mis à jour ci-dessous contourne ce problème en vous permettant de saisir la partie de validation, tout comme dans la fenêtre de la plate-forme de partition. Mais n'utilisez pas à la fois une colonne de validation et une partie de validation - le script n'a pas encore été codé pour en tenir compte et n'est encore une fois pas assez générique pour toutes les entrées utilisateur possibles.
Quant à l'erreur que vous obteniez, c'était encore une fois parce que j'avais supposé qu'il y avait plus d'un facteur X dans le processus et j'avais donc scripté la référence à la fenêtre de rapport en conséquence. Ceci est maintenant corrigé de sorte que peu importe s'il n'y a que 1 X ou plusieurs X.
Encore une fois, ce script n'est pas suffisamment générique pour prendre en compte la colonne de réponse non numérique/non continue, Y. Si la réponse est catégorique, ce script n’est pas conçu pour en tenir compte. Il peut facilement être modifié pour ce faire si nécessaire.
J'espère que cela t'aides,
DS
MISE À JOUR : Ok, donc je n'ai pas pu m'empêcher de coder davantage et j'ai inclus des colonnes RSquare pénalisées et une colonne RSquare de validation de formation. Vous pouvez changer la formule et le coefficient du calcul pénalisé en éditant le code -- je l'ai défini sur votre concept de Rsquare-0.05*Splits. En plus de cela, j'ai également inclus du code pour afficher graphiquement les résultats une fois les calculs terminés.
MISE À JOUR 2 : Je suis revenu et j'ai rendu le code un peu plus amusant. Vous pouvez maintenant voir les résultats du tableau à côté des résultats du graphique et en sélectionnant le point du graphique que vous préférez, vous pouvez ensuite réexécuter la partition pour ce point spécifique. nombre de fractionnements lorsque vous cliquez sur "OK". Comme auparavant, je ne l'ai pas rendu super-générique pour tout type de saisie utilisateur, mais j'ai essayé de le faire fonctionner pour les réponses numériques/continues. Ce que vous avez maintenant devrait suffire à vous permettre de démarrer.
PS Au fur et à mesure que vous apprenez le code, utilisez l'index de script dans le menu Aide de JMP. C'est très utile pour comprendre certains appels et comment les utiliser lors de la création de scripts.
Names Default To Here( 1 );
lbWidth = 168;
dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
::max_spRecall = max_sp_input << get;
::partVPRecall = partVP_input << Get;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>Re : Ajouter des pénalités au nombre de divisions dans la plateforme de partition pour réduire le nombre de feuilles ?Merci @SDF1 pour la réponse détaillée ! Il me faudra du temps pour digérer le script.
Pour l'instant, pourriez-vous simplement me donner un aperçu rapide avec un exemple de la façon de l'utiliser ? Voici ce que j'ai essayé et j'obtiens une erreur :
1) Décommentez la ligne "dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );" et exécutez le script
2) Cliquez sur "Sélectionner le tableau de données" -> "Boston Housing" -> OK
3) Sous « Action », cliquez sur « OK »
4) Dans la fenêtre "JSL pour aider au partitionnement", je lance "nox" dans Y et "age" dans X, puis j'appuie sur "OK".
5) Je vois l'alerte JMP " Problème d'indice{20} lors de l'accès ou de l'évaluation de 'w[Outline Box("Partition for " || ycols[1])]' , w[/*###*/Outline Box( "Partition for " || ycols[ 1] )] ". Le tableau "Partition_Results" est nul sauf pour la colonne "Splits" qui va de 1 à 20.
Re : Ajouter des pénalités au nombre de divisions dans la plateforme de partition pour réduire le nombre de feuilles ?Salut @markschwab ,
Concernant votre préoccupation, est-ce que le nombre de scissions est vraiment crédible, ou qu'il s'agit d'un nombre raisonnablement faible de scissions ? Je pense que le nombre de divisions crédibles correspond aux lignes du tableau de données moins 1, mais pas à 100 %.
Quoi qu'il en soit, j'inclus un extrait de code que vous pouvez utiliser pour effectuer votre partitionnement automatisé. Je l'ai fait avec le fichier Boston Housing.jmp.
Si vous connaissez JSL, vous devriez pouvoir le modifier selon vos besoins. Le code est assez basique, il suppose que vous disposez d’une colonne de réponse numérique continue. Il exécute le partitionnement pour le nombre maximum de partitions que vous définissez à partir de la première fenêtre, puis enregistre les statistiques de partitionnement. Vous pouvez facilement créer votre propre formule de colonne pour avoir une validation RSquare "pénalisée" par exemple ou comme vous choisissez de pénaliser la partition. Vous pouvez ensuite sélectionner la partition la mieux adaptée à vos critères et la réexécuter avec le nombre fixe de fractionnements que vous déterminez. J'ai quelques idées pour embellir le programme, mais c'est pour plus tard.
En passant, vous pouvez envisager de créer une colonne de validation (si vous n'avez pas Pro, vous pouvez le faire en la recherchant dans l'index des scripts) et de stratifier par votre colonne de réponse, cela donnera aux ensembles de formation/validation un plus représentation égale lorsqu’il s’agit de partages non 50/50. De cette façon, vous pouvez disposer de plus de données pour entraîner votre partition.
J'espère que cela t'aides!,
DS
Names Default To Here( 1 );
lbWidth = 168;
//dt = Open( "$SAMPLE_DATA/Boston Housing.jmp" );
// Expression to store the current settings in global variables
recallRolesS1 = Expr(
::dtchosenRecall = dtchosen
);
// Expression to clear all current settings. KW: Clear
clearRoles = Expr(
Try(
colListY << RemoveAll;
ColListX << RemoveAll;
ColListW << RemoveAll;
ColListF << RemoveAll;
colListV << RemoveAll;
)
);
// Expression to store the current settings in global variables
recallRoles = Expr(
::ycolRecall = colListY << GetItems;
::xcolRecall = colListX << GetItems;
::WcolRecall = colListW << GetItems;
::FcolRecall = colListF << GetItems;
::vcolRecall = colListV << GetItems;
);
//Function to choose the data table to model. KW: choose_data
choose_data_table = Function( {},
list = {};
For( i = 1, i <= N Table(), i++,
list[i] = Data Table( i ) << get name
);
win = New Window( "Select a data table",
<<MODAL></MODAL>