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:
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:
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...
la source
Réponses:
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
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:
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 ...
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.
la source
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
la source