L'équipe d'Andrew Ng a une fois commis une grosse erreur dans un article de recherche. Et cela s'est produit en raison d'une séparation aléatoire des données. Voici exactement ce qui s'est passé (avec la solution) :
Il est courant de générer des ensembles d'entraînement et de validation en utilisant un découpage aléatoire. Cependant, dans de nombreuses situations, cela peut être fatal pour la construction du modèle. Considérez la construction d'un modèle qui génère des légendes pour des images. En raison de la nature inhérente du langage, chaque image peut avoir de nombreuses légendes différentes. - Image-1 → Légende-1, Légende-2, Légende-3, etc. - Image-2 → Légende-1, Légende-2, Légende-3, etc. Vérifiez ceci 👇
Si nous utilisons un découpage aléatoire, le même point de données (image) sera disponible dans les ensembles d'entraînement et de validation. En conséquence, nous finissons par évaluer le modèle sur les instances sur lesquelles il a été entraîné. C'est un exemple de fuite de données (également appelée fuite de groupe), ce qui entraîne un surapprentissage !
La même chose s'est produite dans l'article d'Andrew Ng, où ils ont préparé un ensemble de données médicales pour détecter la pneumonie. - Images totales = 112k - Patients totaux = 30k En raison d'une séparation aléatoire, les images du même patient étaient disponibles à la fois dans les ensembles d'entraînement et de validation. Cela a conduit à une fuite de données, et les scores de validation semblaient beaucoup meilleurs qu'ils ne l'auraient dû. C'est leur article initial👇
Le problème de la séparation des groupes a été résolu. Il y a deux étapes : 1) Regrouper toutes les instances d'entraînement correspondant à une image. 2) Après le regroupement, l'ENSEMBLE DU GROUPE (tous les exemples d'une image) doit être assigné aléatoirement à l'ensemble d'entraînement ou à l'ensemble de validation. Cela empêchera la fuite de groupe.
Si vous utilisez Sklearn, le GroupShuffleSplit met en œuvre cette idée. À titre d'exemple, considérons que nous avons le jeu de données suivant : - x1 et x2 sont les caractéristiques. - y est la variable cible. - group désigne les critères de regroupement. Vérifiez ceci 👇
Tout d'abord, nous importons le GroupShuffleSplit de sklearn et instancions l'objet. Ensuite, la méthode split() de cet objet nous permet d'effectuer un découpage par groupe. Elle renvoie un générateur, et nous pouvons le déballer pour obtenir la sortie suivante : - Les points de données dans les groupes "A" et "C" sont ensemble dans l'ensemble d'entraînement. - Les points de données dans le groupe "B" sont ensemble dans l'ensemble de validation/test. Vérifiez cela 👇
Quelques jours plus tard, l'équipe d'Andrew Ng a mis à jour le document après avoir utilisé la même stratégie de répartition par groupe pour s'assurer que les mêmes patients ne se retrouvaient pas à la fois dans les ensembles d'entraînement et de validation. 👉 À vous : Avez-vous déjà rencontré ce problème ?
17,67K