L'augmentation du nombre de fonctionnalités entraîne une baisse de la précision mais une augmentation du préc / rappel

15

Je suis nouveau dans le Machine Learning. En ce moment, j'utilise un classifieur Naive Bayes (NB) pour classer les petits textes en 3 classes comme positifs, négatifs ou neutres, en utilisant NLTK et python.

Après avoir effectué quelques tests, avec un ensemble de données composé de 300 000 instances (16 924 positifs, 7 477 négatifs et 275 599 neutres), j'ai constaté que lorsque j'augmente le nombre de fonctionnalités, la précision diminue mais la précision / rappel pour les classes positives et négatives augmente. est-ce un comportement normal pour un classificateur NB? Peut-on dire qu'il serait préférable d'utiliser plus de fonctionnalités?

Quelques données:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Merci d'avance...

Modifier 2011/11/26

J'ai testé 3 stratégies de sélection de fonctionnalités différentes (MAXFREQ, FREQENT, MAXINFOGAIN) avec le classificateur Naive Bayes. Voici d'abord la précision et les mesures F1 par classe:

entrez la description de l'image ici

Ensuite, j'ai tracé l'erreur de train et l'erreur de test avec un ensemble d'entraînement incrémentiel, lors de l'utilisation de MAXINFOGAIN avec les 100 meilleures et les 1000 meilleures fonctionnalités:

entrez la description de l'image ici

Donc, il me semble que même si la précision la plus élevée est obtenue avec FREQENT, le meilleur classificateur est celui qui utilise MAXINFOGAIN, n'est-ce pas ? Lorsque nous utilisons les 100 meilleures fonctionnalités, nous avons un biais (l'erreur de test est proche de l'erreur de train) et l'ajout d'autres exemples de formation n'aidera pas. Pour améliorer cela, nous aurons besoin de plus de fonctionnalités. Avec 1000 fonctionnalités, le biais est réduit mais l'erreur augmente ... Est-ce correct? Dois-je avoir besoin d'ajouter plus de fonctionnalités? Je ne sais pas vraiment comment interpréter ça ...

Merci encore...

kanzen_master
la source
1
Cela dépend de ce que vous entendez par "meilleur classificateur", si votre tâche consiste à construire un classificateur avec une bonne précision globale, je choisirais FREQENT. D'un autre côté, si, comme dans la plupart des tâches de classification de classes rares, vous souhaitez mieux classer la classe rare (qui pourrait être la classe "négative" ou "positive") je choisirais MAXINFOGAIN. Je pense que votre interprétation des courbes d'apprentissage est correcte: avec 100 fonctionnalités vous avez un biais et vous pouvez les ajouter, avec 1000 vous avez une variance et vous pouvez les supprimer. Vous pouvez peut-être essayer un compromis entre 100 et 1000 fonctionnalités pour obtenir de meilleurs résultats.
Simone
Merci pour votre aide, Simone! J'ai tout compris sauf la dernière partie ... Pourriez-vous s'il vous plaît me dire comment vous voyez la grande variance avec les 1000 fonctionnalités? Étant donné que la différence entre les erreurs de test et de train ne semble pas être si grande, cela me semble toujours biaisé ...
kanzen_master
J'ai mis quelques exemples sur ma réponse. Lorsque les courbes ne sont pas si proches, le problème est classé comme avec une variance élevée . Dans votre cas, je vous ai peut-être dit que, car avec moins de fonctionnalités, vous obtenez de meilleures performances, et donc avec 1000 fonctionnalités, cela risque d'être un problème de grande variance. Plutôt que de tracer les résultats des algorithmes de sélection des fonctionnalités avec des mesures calculées sur l'ensemble de formation, essayez de diviser vos données en formation (2/3 d'entre elles) et en validation, puis effectuez la sélection des fonctionnalités sur l'ensemble de formation et évaluez-la sur l'ensemble de test . Vous devriez trouver un maximum au milieu de l'intrigue.
Simone
Merci pour la réponse. Le 3ème exemple de votre article mis à jour (bon résultat, train, les courbes d'erreur de test ne sont ni trop proches ni trop loin) ressemble à la courbe d'apprentissage que j'ai tracée en utilisant 1000 fonctionnalités, donc j'ai pensé que l'utilisation d'environ 1000 fonctionnalités serait un "bon résultat". Cependant, dans ce cas, l'erreur est plus élevée, ce qui n'est pas bon. Mais, en regardant simplement la distance entre les courbes, je ne vois pas de grande variance avec 1000 fonctionnalités ... (Au fait, je divise déjà les données en 2/3 en tant que jeu d'entraînement, 1/3 en tant que jeu de test, fonction d'exécution sélection sur le set d'entraînement, et évaluation sur le set de test ...)
kanzen_master
1
D'ACCORD. Je suis assez novice dans l'apprentissage des courbes et vos exemples étaient vraiment intéressants et m'ont permis de mieux les comprendre. Ainsi, merci D T. Oui, il pourrait y avoir un biais dans les deux cas. Selon moi, vous avez un ensemble de données très asymétrique et plutôt que de tester la précision, il est important de regarder la mesure F. En regardant vos parcelles, il semble que plus vous avez de fonctionnalités, mieux c'est; en fait, la mesure F s'améliore. J'ai entendu dire que dans la classification de texte, si vos caractéristiques sont la fréquence des mots dans votre texte, il est courant d'utiliser beaucoup de fonctionnalités; btw je n'y suis pas habitué et je ne peux pas vous en dire plus.
Simone

Réponses:

18

Précision vs mesure F

Tout d'abord, lorsque vous utilisez une métrique, vous devez savoir comment la jouer. La précision mesure le ratio d'instances correctement classées dans toutes les classes. Cela signifie que si une classe se produit plus souvent qu'une autre, la précision résultante est clairement dominée par la précision de la classe dominante. Dans votre cas, si l'on construit un modèle M qui prédit simplement "neutre" pour chaque instance, la précision résultante sera

unecc=neutrunel(neutrunel+posjetjeve+negunetjeve)=0,9188

Bon, mais inutile.

Ainsi, l'ajout de fonctionnalités a clairement amélioré la capacité de NB à différencier les classes, mais en prédisant "positif" et "négatif", on classe mal les neutres et donc la précision diminue (grosso modo). Ce comportement est indépendant de NB.

Plus ou moins de fonctionnalités?

En général, il n'est pas préférable d'utiliser plus de fonctionnalités, mais d'utiliser les bonnes fonctionnalités. Plus de fonctionnalités est préférable dans la mesure où un algorithme de sélection de fonctionnalités a plus de choix pour trouver le sous-ensemble optimal (je suggère d'explorer: sélection de fonctionnalités de validation croisée ). En ce qui concerne NB, une approche rapide et solide (mais moins qu'optimale) consiste à utiliser InformationGain (Ratio) pour trier les entités par ordre décroissant et sélectionner le top k.

Encore une fois, ce conseil (sauf InformationGain) est indépendant de l'algorithme de classification.

EDIT 27.11.11

Il y a eu beaucoup de confusion concernant le biais et la variance pour sélectionner le bon nombre de caractéristiques. Je recommande donc de lire les premières pages de ce tutoriel: compromis Bias-Variance . L'essence clé est:

  • Biais élevé signifie que le modèle n'est pas optimal, c'est-à-dire que l'erreur de test est élevée (sous-ajustement, comme le dit Simone)
  • High Variance signifie que le modèle est très sensible à l'échantillon utilisé pour construire le modèle . Cela signifie que l'erreur dépend fortement de l'ensemble d'apprentissage utilisé et donc la variance de l'erreur (évaluée à travers différents plis de validation croisée) sera extrêmement différente. (surajustement)

Les courbes d'apprentissage tracées indiquent en effet le biais, puisque l'erreur est tracée. Cependant, ce que vous ne pouvez pas voir, c'est la variance, car l'intervalle de confiance de l'erreur n'est pas du tout tracé.

Exemple: lorsque vous effectuez une validation croisée 3 fois 6 fois (oui, la répétition avec un partitionnement des données différent est recommandée, Kohavi suggère 6 répétitions), vous obtenez 18 valeurs. Je m'attends maintenant à ce que ...

  • Avec un petit nombre de caractéristiques, l'erreur moyenne (biais) sera plus faible, cependant, la variance de l'erreur (des 18 valeurs) sera plus élevée.
  • avec un nombre élevé de caractéristiques, l'erreur moyenne (biais) sera plus élevée, mais la variance de l'erreur (des 18 valeurs) plus faible.

Ce comportement de l'erreur / du biais est exactement ce que nous voyons dans vos graphiques. Nous ne pouvons pas faire de déclaration sur la variance. Le fait que les courbes soient proches les unes des autres peut être une indication que l'ensemble de test est suffisamment grand pour montrer les mêmes caractéristiques que l'ensemble d'apprentissage et donc que l'erreur mesurée peut être fiable, mais c'est le cas (du moins pour autant que je sache) il) ne suffit pas de faire une déclaration sur la variance (de l'erreur!).

Lorsque j'ajoute de plus en plus d'exemples de formation (en maintenant la taille de l'ensemble de test fixe), je m'attends à ce que la variance des deux approches (petit et grand nombre de fonctionnalités) diminue.

Oh, et n'oubliez pas de calculer l'infogain pour la sélection des fonctionnalités en utilisant uniquement les données de l'échantillon d'entraînement! On est tenté d'utiliser les données complètes pour la sélection des fonctionnalités, puis d'effectuer le partitionnement des données et d'appliquer la validation croisée, mais cela entraînera un surajustement. Je ne sais pas ce que tu as fait, c'est juste un avertissement qu'il ne faut jamais oublier.

steffen
la source
1
Merci beaucoup pour votre réponse, explication très claire. J'utilise le gain d'informations maximal comme stratégie de sélection des fonctionnalités et je teste en utilisant une validation croisée 5 fois. Je suppose que pour savoir quelles sont les k meilleures fonctionnalités que je dois prendre, je dois tester de manière itérative l'algorithme en augmentant le nombre de fonctionnalités à chaque fois, et en prenant le k qui donne le f_score le plus élevé. Cependant, je suppose que "top k" est susceptible de changer en fonction de l'ensemble de données ... non?
kanzen_master
1
Correct. Mais si le nouvel ensemble de données est similaire à l'ancien (mêmes caractéristiques avec les mêmes distributions) k reste le même. Vous pouvez ajouter un algorithme génétique pour rechercher plus rapidement l'espace des solutions possibles ou (encore mieux) utiliser un algorithme génétique pour trouver le sous-ensemble de fonctionnalités optimal indépendant d'InformationGain ... tant de façons de faire.
steffen
1
Selon les conférences de Stanford, si vous voyez des courbes de formation et de test bien séparées variant le nombre d'exemples de formation, cela signifie qu'il y a une variance. Bien sûr, une meilleure approche serait d'estimer les intervalles de confiance.
Simone
1
@DT 1. Je ne connais pas la conférence, donc je ne peux pas connecter l'explication d'Andrewg avec la mienne, désolé. 2. Non. Petit nombre de caractéristiques => sur-ajustement => biais faible, variance élevée. Nombre élevé de caractéristiques => sous-ajustement => biais élevé, faible variance. Je suggère vraiment de tracer la variance de l'erreur des plis cv pour différents nombres de fonctionnalités et d'exemples de formation.
steffen
2
1. steffen, la conférence est disponible ici: ml-class.org/course/video/preview_list (partie X, section "Learning Curves") 2. Je vois. Je pensais que lorsque beaucoup de fonctionnalités apprises lors de la formation => le modèle devient complexe et sur-correspond à l'ensemble de formation => Variance ...
kanzen_master
5

Afin de savoir s'il est utile d'utiliser plus de fonctionnalités, je tracerais des courbes d'apprentissage. Je pense que cela est clairement expliqué dans la 10e unité de la classe de Machine Learning de Stanford, nommée "Advise for apply machine learning", que vous pouvez trouver ici: http://www.ml-class.org/course/video/preview_list .

En traçant des courbes d'apprentissage, vous pouvez comprendre si votre problème est le biais élevé ou la variance élevée. Tant que vous augmentez le nombre d'exemples de formation, vous devez tracer l' erreur de formation et l' erreur de test (c'est-à-dire 1 précision), cette dernière est l'erreur de votre classificateur estimée sur un ensemble de données différent. Si ces courbes sont proches les unes des autres, vous avez un problème de biais élevé et il serait probablement avantageux d'insérer plus de fonctionnalités. En revanche, si vos courbes sont assez séparées tant que vous augmentez le nombre d'exemples d'entraînement, vous avez un problème de variance élevée. Dans ce cas, vous devez diminuer le nombre de fonctionnalités que vous utilisez.

Éditer

λ pour régler la puissance de régularisation.

λ

Variance élevée

λ

Biais élevé

λ=1

Bon résultat

Simone
la source
Génial! Merci beaucoup! Étant donné que les deux réponses ont été vraiment utiles, mais je ne peux pas les marquer comme réponses, je vais marquer la première comme réponse. Mais c'est certainement la meilleure façon de vérifier, je pense.
kanzen_master
Soit dit en passant, j'essaie de tracer la courbe d'apprentissage d'un classificateur qui utilise les 100 meilleures fonctionnalités avec le score de gain d'informations maximal. Tout en augmentant la taille de l'ensemble de données d'entraînement, je veux tracer l'erreur d'entraînement et l'erreur de test. Quelles devraient être les tailles de l'ensemble de données de train initial (à augmenter progressivement) et de l'ensemble de données de test (statique pour tous les tests)? Merci encore ...
kanzen_master
2
Divisez votre ensemble de données en un ensemble de formation et un ensemble de test. Commencez à partir de très peu d'enregistrements de formation, puis continuez à ajouter des enregistrements. Pour chaque itération, calculez l'erreur de l'ensemble d'apprentissage avec les enregistrements que vous avez utilisés pour former votre classificateur, puis calculez toujours l'erreur de l'ensemble de tests avec tous les enregistrements de test. Je sais que c'est une méthode standard utilisée dans la pratique courante. Il serait intéressant de voir vos résultats! A bientôt, Simone.
Simone
1
Simone, j'ai mis à jour le premier post avec quelques résultats de précision, des mesures f1 et des courbes d'apprentissage, et mon interprétation en bas, pourriez-vous s'il vous plaît le vérifier? Merci ...
kanzen_master