2012-09-17 10 views
2

J'essaie de résoudre le problème de classification en utilisant Matlab GPTIPS cadre. J'ai réussi à construire une représentation de données et une fonction de condition physique raisonnables jusqu'à présent et j'ai obtenu une précision moyenne par classe de près de 65%.Algorithme génétique pour la classification

Ce que je besoin est maintenant une aide à deux difficultés:

  1. Mes données est biaisée. Fondamentalement, je résous problème de classification binaire et seulement 20% des données appartiennent à la classe 1, tandis que les autres 80% appartiennent à la classe 0. J'ai utilisé la précision de la prédiction comme ma fonction de fitness, mais c'était vraiment mauvais. Le mieux que j'ai maintenant

    Fitness = 0,5 * (+ PositivePredictiveValue NegativePredictiveValue) - const * ComplexityOfSolution

S'il vous plaît, advize, comment puis-je améliorer ma fonction de faire la correction pour le biais de données.

  1. Le deuxième problème est le sur-ajustement. J'ai divisé mes données en trois parties: formation (70%), tests (20%), validation (10%). J'entraîne chaque chromosome sur l'ensemble d'entraînement, puis j'évalue sa fonction de remise en forme sur l'ensemble de test. Cette routine me permet d'atteindre la forme physique de 0,82 sur mes données de test pour le meilleur individu dans la population. Mais le résultat de la même personne sur les données de validation n'est que de 60%. J'ai ajouté un contrôle de validation pour le meilleur individu chaque fois avant que la nouvelle population soit générée. Ensuite, je compare la forme physique sur le jeu de validation avec la condition physique sur l'ensemble de test. Si la différence est supérieure à 5%, j'augmente la pénalité pour la complexité de la solution dans ma fonction de fitness. Mais ça n'a pas aidé. Je pourrais aussi essayer d'évaluer tous les individus avec un jeu de validation à chaque génération, et simplement supprimer ceux qui sont surajustés. Mais alors, je ne vois aucune différence entre mes données de test et de validation. Que peut-on faire d'autre ici?

MISE À JOUR:

Pour ma deuxième question que j'ai trouvé grand article "Experiments on Controlling Overtting in Genetic Programming" Avec quelques articles idées d'auteurs sur le traitement des overfitting en GP, ​​il a revue impressionnante avec beaucoup de références à de nombreux approches à la question. Maintenant j'ai beaucoup de nouvelles idées que je peux essayer pour mon problème. Malheureusement, je n'arrive toujours pas à trouver quoi que ce soit sur la sélection d'une fonction de remise en forme qui tiendra compte des proportions de classes déséquilibrées dans mes données.

Répondre

2

La précision de 65% est très mauvaise lorsque la ligne de base (classer tout comme la classe avec la plupart des échantillons) serait de 80%. Vous devez atteindre au moins la classification de base afin d'avoir un meilleur modèle que le naïf.

Je ne pénaliserais pas la complexité. Plutôt limiter la taille de l'arbre (si possible). Vous pourriez identifier des modèles plus simples au cours de la course, comme le stockage d'un front pareto de modèles avec la qualité et la complexité de ses deux valeurs de fitness.

En HeuristicLab nous avons intégré la classification GP qui peut faire ces choses. Il existe plusieurs options: Vous pouvez choisir d'utiliser MSE pour la classification ou R2. Dans la dernière version du tronc, il y a aussi un évaluateur pour optimiser la précision directement (exactement, cela optimise les pénalités de classification). Optimiser MSE signifie qu'il affecte une valeur à chaque classe (1, 2, 3, ...) et tente de minimiser l'erreur quadratique moyenne de cette valeur. Cela peut ne pas sembler optimal au début, mais ça marche. L'optimisation de la précision directement peut entraîner un sur-ajustement plus rapide. Il y a aussi un simplificateur de formule qui vous permet d'élaguer et de réduire votre formule (et d'en voir les effets).

Aussi, faut-il être GP? Avez-vous déjà essayé la classification aléatoire des forêts ou les machines à vecteurs de support? RF sont assez rapides et fonctionnent assez bien habituellement.

+0

Merci pour votre réponse! Oui, j'ai essayé presque tous les algorithmes courants (RF, CART, BayesNet, NN, kNN, SVM et autres). Je n'ai pas réussi à les faire travailler. Qu'est-ce que je fais maintenant est la construction d'un ensemble d'arbres GP, où le résultat de chaque arbre représente une nouvelle fonctionnalité. Ensuite, j'applique la classification kNN simple dans ce nouvel espace de fonctionnalités. Jusqu'à présent, j'ai obtenu jusqu'à 0,70 sur les données de validation. Et maintenant, j'ajoute la réduction de l'ensemble de données en utilisant des ensembles de données de prototypes k-nn. Espérons que cela accélèrera le cycle général de recherche GP et supprimera également un peu de bruit des données. – GrayR

+0

Aussi, désolé pour erreur dans mon message original 65% n'est pas la précision, son (PPV + NPV)/2, en fait je classe "0" avec une précision de 85-90% et "1" avec 50-55%. Je vais certainement regarder plus dans la pénalité de complexité. En fait, j'ai dû l'ajouter pour appliquer des modèles plus simples à un moment donné, mais peut-être que votre approche plus directe sera meilleure. Ce qui me dérange le plus en ce moment, c'est le suralimentation, parce que cela m'arrête trop tôt dans l'évolution des populations. Est-il possible de supprimer les individus surutilisés, ou le jeu de validation ne peut être touché jusqu'à la fin? – GrayR

+0

Je vais accepter cette réponse en raison de conseils avant Pareto. Actuellement, cela m'a permis d'augmenter ma condition physique de 0,65 à 0,75. D'autres techniques (j'ai essayé environ 5 méthodes différentes pour traiter le surapprentissage) tirées de différents articles n'ont pas donné une telle amélioration notable. – GrayR

Questions connexes