L'utilisation des mêmes données pour la sélection d'entités et la validation croisée est-elle biaisée ou non?

8

Nous avons un petit ensemble de données (environ 250 échantillons * 100 entités) sur lequel nous voulons construire un classificateur binaire après avoir sélectionné le meilleur sous-ensemble d'entités. Disons que nous partitionnons les données en:

Formation, validation et tests

Pour la sélection des fonctionnalités, nous appliquons un modèle de wrapper basé sur la sélection des fonctionnalités optimisant les performances des classificateurs X, Y et Z, séparément. Dans cette étape de prétraitement, nous utilisons des données de formation pour former les classificateurs et des données de validation pour évaluer chaque sous-ensemble de fonctionnalités candidat.

À la fin, nous voulons comparer les différents classificateurs (X, Y et Z). Bien sûr, nous pouvons utiliser la partie test des données pour avoir une comparaison et une évaluation équitables. Cependant, dans mon cas, les données de test seraient vraiment petites (environ 10 à 20 échantillons) et donc, je veux appliquer une validation croisée pour évaluer les modèles.

La distribution des exemples positifs et négatifs est très mal équilibrée (environ 8: 2). Ainsi, une validation croisée pourrait nous manquer dans l'évaluation des performances. Pour surmonter cela, nous prévoyons d'avoir la partie test (10-20 échantillons) comme deuxième méthode de comparaison et de valider la validation croisée.

En résumé, nous partitionnons les données en formation, validation et tests. Les pièces de formation et de validation doivent être utilisées pour la sélection des fonctionnalités. Ensuite, une validation croisée sur les mêmes données doit être appliquée pour estimer les modèles. Enfin, les tests sont utilisés pour valider la validation croisée compte tenu du déséquilibre des données.

La question est: si nous utilisons les mêmes données (formation + validation) utilisées pour sélectionner les fonctionnalités optimisant les performances des classificateurs X, Y et Z, pouvons-nous appliquer une validation croisée sur les mêmes données (formation + validation) utilisées pour la sélection des fonctionnalités mesurer la performance finale et comparer les classificateurs?

Je ne sais pas si ce paramètre pourrait conduire à une mesure de validation croisée biaisée et entraîner une comparaison non justifiée ou non.

soufanom
la source
4
Crossvalidated.com traite exactement ce type de questions. Je suggère que ce Q soit déplacé là-bas.
Roman Luštrik
Une suggestion est d'appliquer le bootstrap (de la formation + validation uniquement) aux données au lieu de la validation croisée. Cela résoudrait-il le problème de biais énoncé dans la question? Toujours pas sûr !!
soufanom
3
Oui, c'est biaisé - parcourez les questions dans la balise de sélection de fonctionnalités sur ce site, en particulier celui-ci , ou même la page Wikipedia sur CV .
1
D'accord. Vous pouvez appliquer la conception à des ensembles de données simulés au hasard et estimer le biais qu'il y a. Mais je recommanderais LOOCV comme une réponse le suggère.
Steve P

Réponses:

5

je pense que c'est biaisé. Qu'en est-il de l'application de FS dans la partition N-1 et de tester sur la dernière partition. et combiner les caractéristiques de tous les plis d'une certaine manière (union / intersection / ou d'une manière spécifique au problème).

tanvir
la source
Laisser une pièce pour le test a été expliqué dans le post. De plus, comme expliqué, une validation croisée est nécessaire pour comparer les modèles. Ainsi, il n'est pas possible de l'appliquer pour la sélection de fonctionnalités à moins d'utiliser l'idée de validation croisée imbriquée. Cependant, l'ensemble de données est si petit et il est difficile d'appliquer la validation croisée imbriquée.
soufanom
6

La réponse simple est que vous devez sélectionner des fonctionnalités sur un ensemble de données différent de celui sur lequel vous vous entraînez (vous le faites déjà, alors ne changez pas cela) --- l'effet de ne pas le faire est que vous surajusterez vos données d'entraînement. Vous ne devez pas non plus faire de sélection de fonctionnalités sur votre ensemble de test, car cela augmenterait les estimations des performances de vos modèles (je pense que vous le réalisez déjà également, mais j'ai trouvé un peu difficile de comprendre la question avec précision).

Si vous avez déjà divisé votre ensemble de tests en formation, validation et test, il n'y a aucune raison particulière de procéder à une validation croisée, sauf si vous avez si peu de données que votre ensemble de tests est trop petit pour en tirer des conclusions solides. De nombreux chercheurs n'aiment pas la validation croisée parce que si elle est utilisée pour piloter le développement de modèles (j'entends par là, vous peaufinez les choses, puis exécutez la validation croisée pour voir comment elles fonctionnent, puis les peaufiner, etc.), vous avez effectivement accès à votre test données et cela peut vous conduire à surestimer vos performances sur des données vraiment invisibles. Si vos données sont si petites que vous n'avez pas d'autre choix que de faire une validation croisée, la bonne façon de le faire avec les ensembles de formation, de développement et de test est de diviser explicitement vos données en trois parties pour chaque pli --- la majorité doit être utilisée pour s'entraîner, certains pour le développement (sélection de fonctionnalités dans votre cas, plus tous les autres paramètres gratuits qui nécessitent un ajustement) et enfin vous devriez tester sur la partie test. Vous pouvez ensuite faire la moyenne des scores sur ces portions de test pour obtenir une estimation des performances du modèle: cependant, comme je l'ai dit, sachez que si ces scores sont utilisés pour vous guider vers les approches que vous souhaitez utiliser pour votre problème, vous ne devriez pas vous attendre à obtenir le même score sur les données invisibles que vous avez fait de votre validation croisée.


la source
finally you should test on the test portion. You can then average scores across these test portions to get an estimate of model performance Pour donner un sens aux performances d'un classifieur, il doit être utilisé sur des données de test qui n'ont pas été vues ou utilisées auparavant. Selon moi, si vous prenez une décision basée sur les performances de l'algorithme sur un ensemble de données, cet ensemble de données est soit une formation soit une validation croisée, en aucun cas il ne devrait être appelé ensemble de données de test.
Ivan
Notez que je n'ai pas dit que vous devriez faire la sélection des fonctionnalités sur vos données de test --- pour chaque pli, vous créez des portions de formation, de développement et de test. Vous vous entraînez sur votre formation, définissez des paramètres libres et sélectionnez des fonctionnalités sur votre développement, puis appliquez les modèles finaux appris aux données de test. Comme je l'ai expliqué ci-dessus, cette pratique n'est pas idéale, mais vous n'utilisez pas explicitement les données de test pour définir les paramètres (pour chaque pli, les données de test sont aveugles jusqu'à ce que les modèles soient fixes, vous obtenez simplement un fluage entre les plis)
Je pense que nous sommes d'accord sur la même chose, je voulais juste clarifier la distinction entre les données de test et C / V. La sélection du modèle est similaire à la sélection des paramètres, il est donc préférable que les données de test soient mises de côté et ne soient pas utilisées du tout. Cela fait, vous pourrez signaler en toute sécurité les performances attendues du modèle choisi sur toutes les nouvelles données invisibles.
Ivan
1

Avez-vous essayé LOOCV? Je pense qu'il est apte à s'entraîner, lorsque vous avez très peu de données d'entraînement. Pour répondre à votre question, cela ne vous donnerait pas le meilleur des résultats simplement parce que cela pourrait surdimensionner et vous donner des résultats trompeurs, de sorte que votre classificateur ne fonctionnerait pas très bien sur d'autres données, qu'il n'a pas vues.

madCode
la source
LOOCV à la fin n'est qu'une sorte de validation croisée. Nous avons besoin d'une solution au problème dans lequel nous avons de petites données, nous voulons sélectionner de bonnes fonctionnalités et enfin avoir une mesure représentative pour évaluer les performances.
soufanom
0

Vous pouvez effectuer les opérations suivantes pour comparer les performances des classificateurs

Prenez votre ensemble d'entraînement et entraînez-vous sur tous les ensembles de fonctionnalités possibles. Pour chaque ensemble de fonctionnalités, minimisez les paramètres et construisez le modèle de manière à ce qu'il s'adapte bien à l'ensemble d'entraînement. Maintenant, une fois que les modèles sont construits pour tous les jeux de fonctionnalités, c'est-à-dire que vous avez un modèle pour chaque jeu de fonctionnalités, validez les modèles (construits sur différents jeux de fonctionnalités) sur le jeu de validation et sélectionnez ce modèle (construit pour un sous-ensemble particulier de jeux de fonctionnalités). ) qui donne l'erreur minimale sur l'ensemble de validation. De cette façon, vous vous assurez que le modèle construit correspond bien non seulement à l'ensemble de formation, mais également à l'ensemble de validation.

Maintenant, prenez ce modèle construit et testez-le sur l'ensemble de test. Cela vous indiquera les performances du classificateur une fois exécuté sur un ensemble de données qui n'a été ni utilisé pour la formation ni pour la validation. En outre, vous avez sélectionné cet ensemble de fonctionnalités qui correspond bien à l'ensemble de formation et également à l'ensemble de validation.

Londres guy
la source
1
Pour le modèle d'encapsulation de la sélection d'entités, les ensembles de données d'apprentissage et de validation doivent être pris en charge. Dans le modèle wrapper, nous formons et testons un classifieur à partir d'un sous-ensemble de fonctionnalités candidat. Ainsi, donner uniquement un ensemble de formation à ce modèle n'est pas suffisant. La question est: si les mêmes données utilisées pour la sélection des caractéristiques sont utilisées pour la comparaison mais en utilisant CV, sommes-nous toujours biaisés et de quel degré?
soufanom
0

Si possible, il est préférable de retenir certaines données pour une validation croisée supplémentaire. Par exemple, vous pouvez l'utiliser pour valider vos algorithmes en créant des courbes d'apprentissage. Ces courbes doivent être construites sur un ensemble de données qui n'a pas été utilisé auparavant.

Même si vous souhaitez simplement sélectionner un algorithme qui vous donne le score F1 le plus élevé, vous devez utiliser un ensemble de données de validation croisée supplémentaire pour ce faire. L' ensemble de tests doit être réservé pour rapporter la précision finale de votre solution (performances attendues du classificateur choisi sur des données invisibles).

Ivan
la source
Votre réponse est indiquée dans ma question comme une technique que je connais. La question est d'utiliser les mêmes données pour la sélection des fonctionnalités et la validation croisée !!
soufanom
@soufanom J'ai écrit que vous avez besoin d'un ensemble de données de validation croisée supplémentaire pour sélectionner le classificateur le plus performant, sinon vos résultats ne seront pas fiables. Comment pouvez-vous juger des performances d'un modèle en l'exécutant sur un ensemble de données qui a été utilisé pour former le modèle ou pour sélectionner des paramètres. À mon humble avis, le seul moyen fiable de juger des performances d'un classificateur est de l'exécuter sur des données non vues auparavant. J'espère que cela répond à votre question, sinon affinez-la et ajoutez plus d'informations.
Ivan
0

Il peut être très grossièrement biaisé, reportez-vous au chapitre sur la validation du modèle dans "Éléments d'apprentissage statistique", il peut rendre la précision du cv du modèle supérieure à 70% tandis que le taux d'erreur réel de tout modèle devrait être de 50% (les fonctionnalités sont indépendantes de la classe ).

Lily Long
la source