Faible précision de classification, que faire ensuite?

16

Donc, je suis un débutant dans le domaine ML et j'essaie de faire un certain classement. Mon objectif est de prédire l'issue d'un événement sportif. J'ai rassemblé quelques données historiques et j'essaie maintenant de former un classificateur. J'ai obtenu environ 1200 échantillons, 0,2 d'entre eux que j'ai séparés à des fins de test, d'autres que j'ai mis dans la recherche de grille (validation croisée incluse) avec différents classificateurs. J'ai essayé SVM avec des noyaux linéaires, rbf et polynomiaux et des forêts aléatoires jusqu'à présent. Malheureusement, je ne peux pas obtenir une précision nettement supérieure à 0,5 (le même que le choix aléatoire de la classe). Cela signifie-t-il que je ne peux tout simplement pas prédire l'issue d'un événement aussi complexe? Ou puis-je obtenir une précision d'au moins 0,7-0,8? Si c'est faisable, que dois-je faire ensuite?

  • Obtenez plus de données? (Je peux agrandir l'ensemble de données jusqu'à 5 fois)
  • Essayez différents classificateurs? (Régression logistique, kNN, etc.)
  • Réévaluer mon ensemble de fonctionnalités? Existe-t-il des outils ML à analyser, quelles fonctionnalités ont du sens et lesquelles ne le sont pas? Peut-être que je devrais réduire mon ensemble de fonctionnalités (j'ai actuellement 12 fonctionnalités)?
fspirit
la source
Quelle est votre précision d'entraînement? Et combien d'échantillons avez-vous dans chaque classe?
Leo
1
De quel sport s'agit-il et que considérez-vous comme une classification "correcte"? Si vous essayez simplement de prédire un résultat gagnant / perdant dans pratiquement n'importe quel sport majeur, il est presque inconcevable que même le plus simple des classificateurs ne prédise pas mieux que 0,5. Si vous essayez, par exemple, de prédire la victoire / la perte par rapport à un écart ou à un autre résultat handicapé, alors bien mieux que 0,5 peut être difficile.
Cardinal
La précision de @Leo Training est d'environ 0,5. Les classes sont réparties uniformément, j'ai les classes 0 et 1.
fspirit
@cardinal Oui, j'essaie de prédire le résultat gagnant / perdant, pas de handicap. Est-il possible d'atteindre, par exemple, une précision de 0,8 sur l'ensemble de test?
fspirit
1
@fspirit: Cela dépend d'une part du sport et des inégalités de capacités entre les participants. Le simple fait de savoir qui participe à chaque concours peut souvent être un bon indicateur. Ici et voici quelques articles connexes.
Cardinal

Réponses:

17

Tout d'abord, si votre classificateur ne fait pas mieux qu'un choix aléatoire, il y a un risque qu'il n'y ait tout simplement aucun lien entre les fonctionnalités et la classe. Une bonne question à vous poser dans une telle position est la météo ou un expert en domaine pourrait déduire la classe (avec une précision supérieure à un classificateur aléatoire) en fonction de fonctionnalités données. Si non, alors obtenir plus de lignes de données ou changer le classificateur n'aidera pas. Ce que vous devez faire, c'est obtenir plus de données en utilisant différentes fonctionnalités.

SI, d'autre part, vous pensez que les informations nécessaires pour déduire la classe sont déjà dans les étiquettes, vous devez vérifier si votre classificateur souffre d'un problème de biais élevé ou de variance élevée.

Pour ce faire, représentez graphiquement l'erreur de validation et l'erreur de l'ensemble de formation, en fonction des exemples de formation.

Si les lignes semblent converger vers la même valeur et sont proches à la fin, votre classificateur a un biais élevé et l'ajout de données n'aidera pas. Dans ce cas, une bonne idée est de changer le classificateur pour celui qui a une variance plus élevée, ou simplement d'abaisser le paramètre de régularisation de votre courant.

Si d'un autre côté les lignes sont assez éloignées les unes des autres, et que vous avez une erreur d'ensemble de formation faible mais une erreur de validation élevée, alors votre classificateur a une variance trop élevée. Dans ce cas, obtenir plus de données est très susceptible de vous aider. Si après avoir obtenu plus de données, la variance sera toujours trop élevée, vous pouvez augmenter le paramètre de régularisation.

Ce sont les règles générales que j'utiliserais face à un problème comme le vôtre.

À votre santé.

sjm.majewski
la source
Voulez-vous dire error set set error and TEST set error? Sinon, je suis confus. Je ne connais même pas l'erreur d'ensemble de train, car j'utilise l'erreur d'ensemble de validation pour choisir le modèle et les vérifier le modèle sélectionné sur l'ensemble de test.
fspirit
Non, je veux dire erreur d'ensemble de formation où il est écrit. L'erreur d'apprentissage est le nombre d'exemples mal classés dans l'ensemble d'apprentissage divisé par la taille de l'ensemble d'apprentissage. De même, l'erreur de l'ensemble de tests est le nombre d'exemples mal classés dans l'ensemble de tests divisé par la taille de l'ensemble d'apprentissage. Vous pouvez également consulter la classe d'apprentissage machine de Coursera, ( class.coursera.org/ml-2012-002/lecture/index ), en particulier les vidéos de "Conseils pour appliquer l'apprentissage machine". Ces conseils sont tout à fait pertinents pour votre situation.
sjm.majewski
J'ai participé au parcours lors de sa première course. Quant à l'erreur d'ensemble de formation, je la
produis
5

Je suggérerais de prendre du recul et de faire une analyse exploratoire des données avant de tenter une classification. Il vaut la peine d'examiner vos fonctionnalités sur une base individuelle pour voir s'il existe une relation avec le résultat d'intérêt - il se peut que les fonctionnalités que vous avez n'aient aucune association avec les étiquettes de classe. Comment savoir si les fonctionnalités dont vous disposez seront utiles?

Vous pouvez commencer par faire des tests d'hypothèses ou des analyses de corrélation pour tester les relations. La génération d'histogrammes spécifiques à une classe pour les entités (c'est-à-dire le traçage des histogrammes des données pour chaque classe, pour une entité donnée sur le même axe) peut également être un bon moyen de montrer si une entité se distingue bien entre les deux classes.

Il est important de se rappeler cependant de ne pas laisser les résultats de votre analyse exploratoire influencer vos choix de classification. Le choix des caractéristiques pour la classification basée sur une analyse exploratoire préalable sur les mêmes données peut conduire à un sur-ajustement et à des estimations de performance biaisées (voir la discussion ici ), mais une analyse exploratoire vous donnera au moins une idée de la régularité de la tâche que vous essayez de faire. possible.

BGreene
la source
Je vais essayer de dessiner les histogrammes et voir à quoi ils ressembleront.
fspirit
@BGreene - votre troisième paragraphe est difficile pour moi. Si l'analyse exploratoire montre que le prédicteur x1 est fortement corrélé avec le résultat, cela ne va-t-il pas à l'encontre du but de vérifier cette corrélation si l'on n'utilise pas x1 comme au moins un prédicteur candidat dans un modèle multivarié?
rolando2
@ rolando2 - Je ne suggère pas que vous n'incluez pas la fonctionnalité en tant que candidat dans le cadre d'une routine de sélection de fonctionnalités, mais vous ne devez pas choisir des fonctionnalités sur la base d'une analyse exploratoire de ce type, car cela se satisferait. Cependant, aux fins de l'évaluation des performances généralisées d'un modèle de classificateur, la sélection des caractéristiques doit être effectuée dans le cadre de la routine de sélection du modèle (c'est-à-dire dans chaque pli de validation croisée). Ce que je suggère, c'est que l'analyse exploratoire et la classification devraient être traitées comme des activités distinctes - chacune vous dit des choses différentes sur vos données
BGreene
3

Il est bon que vous ayez séparé vos données en données d'entraînement et données de test.

Votre erreur de formation a-t-elle diminué lorsque vous vous êtes entraîné? Sinon, vous pouvez avoir un bug dans votre algorithme d'entraînement. Vous vous attendez à ce que l'erreur sur votre ensemble de test soit supérieure à l'erreur sur votre ensemble d'entraînement, donc si vous avez une erreur trop élevée sur votre ensemble d'entraînement, il y a peu d'espoir de succès.

Se débarrasser des fonctionnalités peut éviter certains types de sur-ajustement. Cependant, cela ne devrait pas améliorer l'erreur sur votre ensemble d'entraînement. Une erreur faible sur votre ensemble d'entraînement et une erreur élevée sur votre ensemble de test peuvent être une indication que vous vous équipez en utilisant un ensemble de fonctionnalités trop flexible. Cependant, il est plus sûr de vérifier cela par validation croisée que sur votre ensemble de test. Une fois que vous avez sélectionné votre ensemble de fonctionnalités en fonction de votre ensemble de tests, il n'est plus valide comme ensemble de tests.

Douglas Zare
la source
J'utilise des ensembles de train, de validation et de test séparés. Je sélectionne les hyper-paramètres en fonction de l'erreur de l'ensemble de validation, puis j'applique le modèle sélectionné à l'ensemble de test. Je doute qu'il y ait un bogue dans l'algorithme de formation, car j'utilise la bibliothèque standard.
fspirit
Vous deviez en quelque sorte connecter cette bibliothèque à vos données. Vérifiez toujours que vous vous entraînez correctement. Si vous obtenez un taux d'erreur de formation de50%, cela signifie que vos fonctionnalités sont terribles ou que vous ne vous entraînez pas correctement.
Douglas Zare du
Dans la possibilité "les fonctionnalités sont terribles", j'inclus le cas où il n'y a pas de solution possible. Cependant, j'en doute beaucoup. Il n'y a pas de sport que je connaisse où il n'y a aucun moyen de voir qu'un compétiteur est préféré à un autre. C'est même possible avec des ciseaux à papier.
Douglas Zare
1

Pourquoi ne pas suivre le principe "regardez d'abord les graphiques des données". Une chose que vous pouvez faire est un diagramme de dispersion 2 D des deux densités conditionnelles de classe pour deux covariables. Si vous les regardez et ne voyez pratiquement aucune séparation qui pourrait indiquer un manque de prévisibilité, vous pouvez le faire avec toutes les covariables. Cela vous donne quelques idées sur la capacité à utiliser ces covariables pour prédire. Si vous voyez un peu d'espoir que ces variables peuvent se séparer un peu, alors commencez à penser aux discriminants linéaires, aux discriminants quadratiques, à la discrimination du noyau, à la régularisation, à la classification des arbres, au SVM, etc.

Michael R. Chernick
la source
Désolé, euh, est la fonction covariable ==?
fspirit