Je voudrais savoir quelle est la meilleure façon de classer un ensemble de données composé de types mixtes d'attributs, par exemple textuels et numériques. Je sais que je peux convertir du textuel en booléen, mais le vocabulaire est divers et les données deviennent trop rares. J'ai également essayé de classer les types d'attributs séparément et de combiner les résultats grâce à des techniques de méta-apprentissage, mais cela n'a pas bien fonctionné.
la source
Principal Component Analysis
ouNon-Negative Matrix Factorization
réduira le nombre de variables, enrichira les données éparses et transformera toutes les variables en données quantitatives. De plus, en évaluant la qualité du modèle de réduction de la dimensionnalité, l'auteur de la question peut estimer l'utilité des variables textuelles.Il est difficile de répondre à cette question sans en savoir plus sur les données. Cela dit, j'offrirais les conseils suivants:
La plupart des techniques d'apprentissage automatique peuvent gérer des données de type mixte. Les méthodes basées sur les arbres (comme AdaBoost et Random Forests) fonctionnent bien avec ce type de données. La question la plus importante est en fait la dimensionnalité, dont vous avez raison de vous préoccuper.
Je vous suggère de faire quelque chose pour réduire cette dimensionnalité. Par exemple, recherchez les mots ou les phrases qui séparent le mieux les données et jetez les autres mots (remarque: les méthodes basées sur des arbres le font automatiquement).
la source
Avec le peu d'informations que vous nous avez fournies sur la nature de vos données, je vous conseille de suivre l'approche suivante:
Convertissez les données de texte en catégories. Vous pouvez essayer différentes alternatives pour la quantité d'informations que les catégories doivent contenir, mais des catégories spécifiques doivent exister pour chaque variable. À titre d'exemple, je vais supposer une variable provenant d'un champ de texte d'un questionnaire d'enquête concernant la manière préférée de se rendre au travail.
Dans un premier temps, nous devons nous assurer que les réponses ayant une signification similaire sont écrites de la même manière et appartiennent à la même catégorie (par exemple "à vélo", "à vélo", "à vélo" ont toutes la même signification). Ensuite, vous pouvez essayer de fusionner davantage dans des catégories moins détaillées (par exemple fusionner "tram", "métro" et "bus" dans "Moyens de transport public") ou même plus (par exemple "Marcher", "Jogging", "Vélo" dans " Activité physique ") selon ce que vous essayez de découvrir.
Vous pouvez même mettre des combinaisons différentes dans votre jeu de données, puis les étapes suivantes détermineront celles qui seront utilisées pour l'analyse. Dans le cas où les données textuelles peuvent être "traduites" en variables ordonnées, assurez-vous de le faire (par exemple, si vous avez "petit, moyen, élevé", transformez-les en "1,2,3").
Transformez vos variables catégorielles (pas celles ordinales) en variables factices (binaires). La plupart des algorithmes de classification / sélection de fonctionnalités le font automatiquement, mais assurez-vous que c'est le cas avec ceux que vous sélectionnez. Je me rends compte que la dimensionnalité des données deviendra assez importante à ce stade, mais cela sera traité à l'étape suivante.
Appliquez une technique de sélection de fonctionnalité / réduction de dimensionnalité à vos données. Vous pouvez trouver un examen utile de ces techniques ici . Si vous utilisez Python, les outils sklearn vous offrent de nombreuses options (voir plus de détails ici ). Assurez-vous d'utiliser une technique qui prend également en compte la multicolinéarité. J'essaierais l'analyse des composants principaux ou un algorithme basé sur un arbre.
Pour classer les données, j'irais avec Decision Tree Classifier (également disponible via sklearn ). Il effectue également la sélection des fonctionnalités en définissant des pondérations d'importance pour les fonctionnalités. Vous pouvez définir le niveau de détail de l'arborescence générée en fonction de vos options (par exemple, max_depth, min_samples_split) Assurez-vous d'ajuster le niveau de détail en fonction de la validation croisée pour éviter le sur-ajustement.
la source