Je lisais le rapport de la solution gagnante d'un concours Kaggle ( Malware Classification ). Le rapport peut être trouvé dans cet article du forum . Le problème était un problème de classification (neuf classes, la métrique était la perte logarithmique) avec 10000 éléments dans le train, 10000 éléments dans le test.
Pendant la compétition, les modèles ont été évalués contre 30% de l'ensemble de test. Un autre élément important est que les modèles fonctionnaient très bien (près de 100% de précision)
Les auteurs ont utilisé la technique suivante:
Une autre technique importante que nous proposons est l'apprentissage semi-supervisé. Nous générons d'abord des pseudo étiquettes d'ensemble de test en choisissant la probabilité maximale de notre meilleur modèle. Ensuite, nous prédisons à nouveau l'ensemble de test de manière croisée avec les données de train et les données de test. Par exemple, l'ensemble de données de test est divisé en 4 parties A, B, C et D. Nous utilisons l'ensemble des données de formation et les données de test A, B, C avec leurs pseudo-étiquettes, ensemble en tant que nouvel ensemble de formation et nous prédisons le test définir D.
La même méthode est utilisée pour prédire A, B et C. Cette approche, inventée par Xiaozhou, fonctionne étonnamment bien et elle réduit la perte de validation croisée locale, la perte de LB publique et la perte de LB privée. Le meilleur modèle d'apprentissage semi-supervisé peut atteindre 0,0023 en perte de journal LB privé, ce qui est le meilleur score sur toutes nos solutions.
Je ne vois vraiment pas comment cela peut améliorer les résultats. Est-ce parce que 30% de l'ensemble de test a été "divulgué" et que c'était un moyen d'utiliser ces informations?
Ou y a-t-il une raison théorique expliquant pourquoi cela fonctionne?
Ce n'est pas un sur-ajustement brut (selon la définition). Les informations cibles de l'ensemble de tests sont conservées. Semi-supervisé permet de générer un jeu de données synthétique supplémentaire pour former le modèle. Dans l'approche décrite, les données de formation originales sont mélangées non pondérées avec synthétiques dans un rapport 4: 3. Ainsi, si la qualité des données synthétiques est mauvaise, l'approche se révélera désastreuse. Je suppose que pour tout problème où les prédictions sont incertaines, l'ensemble de données synthétiques serait de mauvaise précision. Si la structure sous-jacente est très complexe et que le système a un faible bruit, cela peut aider à générer des données synthétiques, je suppose. Je pense que l'apprentissage semi-supervisé est assez important dans l'apprentissage profond (pas mon expertise), où la représentation des fonctionnalités doit également être apprise.
J'ai essayé de reproduire une précision accrue avec une formation semi-supervisée sur plusieurs ensembles de données avec rf et xgboost sans aucun résultat positif. [N'hésitez pas à modifier mon code.] Je constate que l'amélioration réelle de la précision en utilisant semi-supervisé est assez modeste dans le rapport kaggle, peut-être aléatoire?
la source
Selon cette définition: "Le sur-ajustement se produit lorsqu'un modèle statistique décrit une erreur ou un bruit aléatoire au lieu de la relation sous-jacente." (Wikipedia), la solution n'est pas un sur-ajustement.
Mais dans cette situation:
- Les données de test sont un flux d'éléments et non un ensemble fixe d'éléments.
OU
- Le processus de prédiction ne doit pas contenir de phase d'apprentissage (par exemple en raison de problèmes de performances)
La solution mentionnée est trop adaptée. Parce que la précision de la modélisation est plus que des situations réelles.
la source