Quelle est la manière la plus appropriée de créer un ensemble d'exclusion: supprimer certains sujets ou supprimer certaines observations de chaque sujet?

11

J'ai un ensemble de données avec 26 fonctionnalités et 31000 lignes. C'est l'ensemble de données de 38 sujets. C'est pour un système biométrique. Je veux donc pouvoir identifier les sujets.

Afin d'avoir un ensemble de tests, je sais que je dois supprimer certaines valeurs.

Alors, que vaut-il mieux faire et pourquoi?

  1. (a) conserver 30 sujets comme ensemble de formation et supprimer 8 sujets comme ensemble de test

  2. (b) conservez les 38 sujets, mais supprimez quelques rangées de chacun. Donc, à la fin, je vais me retrouver avec un ensemble de formation: 24800 lignes de 38 sujets ET un ensemble de test: 6200 lignes de 38 sujets

Aizzaac
la source
1
Si vous souhaitez identifier des sujets, comment pouvez-vous éventuellement supprimer des sujets «entiers» pour un ensemble de test? Le modèle formé sur 30 sujets ne pourra identifier que ces 30 sujets, pas les 8 sujets qu'il n'a jamais vus. Votre clarification sur le "système biométrique" pourrait rendre la plupart des réponses existantes inapplicables.
amibe dit Réintégrer Monica
1
Il serait utile de clarifier: (1) l' objectif précis , quelle est la variable de résultat que vous essayez de prédire (2) quelles données vous avez et éventuellement (3) quelle approche vous utilisez.
Matthew Gunn
Une fois le système formé, comment serait-il déployé? L'objectif est-il de l'utiliser sur des personnes ne faisant pas partie de l'ensemble de formation? Les nouvelles données proviendront-elles des 38 mêmes sujets? J'essaie de comprendre comment le système est censé être utilisé et si vous êtes dans le cas (1) ou le cas (2) de la réponse de @ AmiTavory.
Matthew Gunn
@amoeba Je ne suis pas très expérimenté :( J'ai posé la question car il est recommandé de fractionner les données (formation, validation et tests). Il s'agit donc soit de supprimer certains sujets ou certaines observations de chacun OU d'utiliser un jeu de données disponible en ligne. 1) Je veux pouvoir identifier des sujets. À qui appartiennent les fonctionnalités. 2) J'utilise EEG (donc série chronologique). 3) J'utilise le pli stratifié. Mais c'est parce que j'ai obtenu une précision plus élevée avec elle qu'avec kfold. Je ne connaissais que le k-fold, le stratifié et l'omission. Comme je l'ai toujours pensé, c'était pour compenser le déséquilibre des données. Mais je suis ouvert aux suggestions.
Aizzaac
@MatthewGunn Je pense qu'il ne serait pas possible de l'utiliser avec des personnes qui ne sont pas dans l'ensemble de données. Ce serait très difficile mais très intéressant s'il était réalisé. Je dirais donc le cas 1.
Aizzaac

Réponses:

9

Je pense que la réponse de Matthew Gunn est correcte, mais il me semble qu'un CV "record" peut couvrir deux concepts différents:

  1. Les enregistrements sont divisés de manière aléatoire en plis, indépendamment du sujet ou de l'heure.

  2. Les enregistrements sont partitionnés en plis temporels, aucun pli utilisé pour la formation contenant des données après le début du pli test.

Dans le premier cas, toute nature chronologique de vos données est compromise, car votre ensemble d'entraînement peut inclure des données à la fois avant et après votre ensemble de test. Le principe de Train / Test est que les données de formation représentent des données connues à l'heure actuelle, et les données de test représentent des données encore inconnues (peut-être littéralement de l'avenir).

Peut-être que l'autocorrélation des séries chronologiques compromet l'option # 2. L'élément temporel du modèle n'est peut-être pas vraiment important et les observations "passées" et "futures" seront probablement les mêmes. Dans ces cas, ni le # 1 ni le # 2 n'est le chemin à parcourir.

S'il n'y a que de la saisonnalité et non des tendances, il semble normal d'inclure "l'avenir" dans la formation de certains sujets afin de prédire de nouveaux sujets (qui seront affectés par la même saisonnalité). S'il y a des tendances, la formation sur l'avenir devrait apprendre quelque chose sur l'avenir que vous ne sauriez vraiment pas lors de l'utilisation du modèle en production.

Dans l'exemple de l'OP, il semble que le sujet soit bon. Mais si les tendances et les préoccupations relatives aux séries chronologiques faisaient partie du modèle, j'essaierais d'utiliser le partitionnement basé sur le sujet et le temps pour que vous vous entraîniez sur un ensemble de sujets avant un moment précis, puis testiez sur les autres sujets après ce moment précis.

Wayne
la source
1
tt
1
Je dirais que la demande décide quel est le fractionnement approprié. Par exemple, même avec des séries chronologiques, il peut être difficile de prédire la variable dépendante pour des mesures ultérieures de sujets inconnus, ce qui signifierait que le fractionnement doit être effectué aussi bien en fonction du sujet qu'en fonction du temps.
cbeleites mécontents de SX
3
@cbeleites: D'accord. C'est ce que j'ai fait sur un projet récent: diviser les données en sujets de formation et de test, et utiliser uniquement des données antérieures à une date pour la formation et des données postérieures à cette date pour les tests, donc nous testions sur des sujets que nous n'avions jamais vu, pendant une période de temps que nous n'avions pas encore vue. Vous voulez empiler le deck contre vous - sans aller trop loin - si vous voulez vraiment savoir dans quelle mesure votre modèle se comportera dans la pratique.
Wayne
16

Une distinction essentielle est de savoir si vous voulez:

  1. [Cas le plus courant]: Construisez une estimation de la performance sur de nouveaux sujets (tirée de la même population que vos données).
  2. Construisez une estimation de la performance sur de nouvelles observations des mêmes sujets que dans votre échantillon.

Le cas le plus courant est le numéro de dossier (1). Par exemple, dans quelle mesure prévoyez-vous des crises cardiaques pour une personne qui arrive aux urgences? Et si vous êtes dans le cas (1), vous devriez presque certainement faire (a) une validation croisée par sujet plutôt que (b) une validation croisée par enregistrement. Effectuer une validation au niveau des enregistrements dans le cas (1) conduira probablement à des estimations déraisonnablement élevées des performances sur de nouveaux sujets.

Je ne comprends pas précisément ce que vous essayez de faire (et c'est peut-être de l'auto-apprentissage donc la question n'est pas entièrement réaliste). Je ne sais pas dans quel cas vous vous trouvez. Si vous êtes dans le cas beaucoup moins courant (2), la validation par enregistrement peut être correcte.

Un thème général de la statistique est de bien réfléchir à ce qui est indépendant et à ce qui est corrélé. D'une manière générale, une observation indépendante a tendance à être un sujet différent. Si vous voulez prédire les performances sur de nouveaux sujets, vous devez tester sur des sujets sur lesquels vous ne vous êtes pas entraîné!

Pourquoi la validation croisée par sujet plutôt que par enregistrement?

Dans des contextes typiques, des observations répétées du même individu sont corrélées les unes aux autres, même après conditionnement des caractéristiques. Par conséquent, avec une validation croisée record, votre ensemble de tests n'est pas indépendant de votre ensemble d'entraînement! Dans le cas extrême d'une corrélation parfaite, vous auriez exactement les mêmes observations dans le jeu d'entraînement et le jeu de test! Vous vous entraîneriez sur l'ensemble de test! La performance mesurée en validation croisée ne serait pas prédictive de la performance sur de nouveaux sujets.

Par exemple, ce récent article appelle la validation croisée au niveau des enregistrements, «Voodoo Machine Learning».

Que faire avec si peu de sujets ...

k=n

Pour maximiser les données pour la formation, vous pouvez laisser de côté un sujet pour la validation croisée. À chaque itération, testez sur un sujet différent et entraînez-vous sur tous les autres.

n=38

Matthew Gunn
la source
Je sais que l'ensemble de données doit être divisé en 3: formation, validation et tests. Dans la validation croisée, «formation et validation» sont utilisées. L'ensemble de maintien est le "test". Vous proposez donc: pour la formation et la validation, utiliser 37 sujets et tester dans 1 sujet? Et que je peux faire tout type de validation croisée: k-fold, stratifié, etc.?
Aizzaac
1
OP a fait un montage disant: "C'est pour un système biométrique. Je veux donc pouvoir identifier les sujets". Si je comprends bien ce que cela signifie, cela implique que seul un CV au niveau de l'enregistrement a du sens car le but est de prédire l'ID du sujet sur la base d'un échantillon.
amibe dit Réintégrer Monica
@amoeba Uniquement si de nouvelles données proviendront de ces mêmes 38 sujets. Par exemple. si le système est censé dire si les empreintes digitales correspondent ou ne correspondent pas et qu'il sera déployé à la porte d'entrée de ma maison (c'est-à-dire doit identifier les étrangers comme des étrangers), la formation et les tests sur les mêmes sujets seraient problématiques (vous aimer savoir à quelle fréquence il autorise l'entrée à des personnes qu'il n'a jamais vues auparavant, jamais formées). Je suis d'accord cependant que "c'est pour un système biométrique" soulève des questions ...
Matthew Gunn
3

Cela dépend vraiment de la façon dont vous envisagez le paramètre que vous souhaitez émuler avec la séparation train / test. Pour rendre les choses concrètes, disons que chaque rangée décrit la qualité du sommeil d'un sujet en une seule nuit.

  1. Il est possible qu'à l'avenir, chaque sujet vienne d'abord dans un laboratoire du sommeil et vous fournisse la qualité du sommeil pendant quelques nuits. Ensuite, vous devrez prévoir la qualité du sommeil des nuits futures pour ces sujets . Dans ce cas, vous utiliseriez votre option b). Dans sklearn, vous pouvez utilisersklearn.model_selection.StratifiedShuffleSplit

  2. Il est possible qu'à l'avenir, quelques sujets viennent d'abord dans un laboratoire du sommeil et vous fournissent la qualité du sommeil pendant quelques nuits. Ensuite, vous devrez prédire la qualité du sommeil des nuits futures pour d' autres sujets . Dans ce cas, vous utiliseriez votre option a). Dans sklearn, vous pouvez utilisersklearn.cross_validation.LeavePLabelOut

Ami Tavory
la source
1
En réalité, la question est presque certainement votre cas (2) et l'option (a), c'est-à-dire la validation croisée par sujet, est ce qui est approprié.
Matthew Gunn
1
@MatthewGunn Vous avez raison. Le cas 2 est beaucoup plus courant. Je dois dire que je suis courir dans des cas réels où 1 était le bon choix.
Ami Tavory
1
Intéressant. Je pouvais voir (1) avoir raison de prédire de nouvelles observations pour une grande clientèle établie. Point pris. Peut-être que je réagis si fortement parce que j'ai récemment lu cet article sur l'utilisation abusive généralisée de la validation croisée des enregistrements dans le domaine médical.
Matthew Gunn
Que pensez-vous de cela: j'utilise les 38 sujets avec tout type de validation croisée; et afin de tester si mon modèle peut être utilisé avec un sujet différent; J'utilise un ensemble de données en ligne? Je pense que l'idée d'un ensemble tenu est d'avoir un "nouveau" jeu de données afin de tester le modèle.
Aizzaac
3

Pour sonner, je suppose que l'application est de prédire des sujets inconnus. Cela signifie (indépendamment du fait que vous ayez des séries chronologiques ou des mesures répétées intrinsèquement non ordonnées) que le fractionnement doit être effectué afin que les sujets inconnus soient testés => fractionnement a)

Étant donné que vous n'avez que 38 sujets, vous devriez toutefois réfléchir à la validation du rééchantillonnage. D'après mon expérience de travail avec des échantillons de taille similaire (bien que plus de fonctionnalités), voici quelques recommandations en bref:

  • Optez pour la validation hors sujet par bootstrap ou la validation croisée itérée. Ils permettent d'évaluer la stabilité de vos modèles ce qui est crucial dans les problèmes de petite taille d'échantillon. Les résultats peuvent même être utilisés pour un modèle agrégé en cas d'instabilité.

  • Ne laissez pas de côté un sujet. Il ne permet ni de mesurer la stabilité du modèle, ni de la réduire. En outre, il existe des situations où il est soumis à un biais pessimiste important en raison de la petite taille de l'échantillon (par opposition au biais pessimiste minimal attendu).

  • Si vous utilisez les chiffres de classification typiques du mérite tels que la précision, la sensibilité, la spécificité, etc. et que la tâche consiste à classer correctement les sujets: prenez garde que le problème crucial est de mesurer les performances car l'incertitude des résultats du test dépend du nombre absolu de cas de test. À titre d'exemple, l'observation de 17 prédictions correctes sur 17 sujets vraiment positifs correspond à un intervalle de confiance à 95% pour une sensibilité allant d'environ 80% à 100%.
    En d'autres termes, vous ne pourrez pas faire d'optimisation de modèle basée sur les données sur cette base.

  • Cela signifie également que vous n'avez pas besoin de configurer un fractionnement à trois ensembles (validation croisée imbriquée), car vous gaspilleriez des ressources dans des comparaisons statistiquement dénuées de sens ici - votre optimisation est presque garantie d'échouer (bien que vous ne puissiez pas remarquer que si vous ne pas vérifier la stabilité).

  • Le même calcul pour l'intervalle de confiance binomial pour les sujets proposés pour le test / l'optimisation / la validation 5 (3) donne 95% ci pour tous les bons allant jusqu'à 50% (30%), donc sur la base de résultats de test parfaits, votre intervalle de confiance comprendrait toujours 50 / 50 deviner!

Quelques articles que nous avons écrits sur ces sujets:

cbeleites mécontents de SX
la source