Comment effectuer l'ingénierie des fonctionnalités sur des fonctionnalités inconnues?


19

Je participe à un concours de kaggle. L'ensemble de données comprend environ 100 fonctionnalités et toutes sont inconnues (en termes de ce qu'elles représentent réellement). Fondamentalement, ce ne sont que des chiffres.

Les gens effectuent beaucoup d'ingénierie des fonctionnalités sur ces fonctionnalités. Je me demande comment exactement on est capable d'effectuer l'ingénierie des fonctionnalités sur des fonctionnalités inconnues? Quelqu'un peut-il m'aider à comprendre cela et quelques conseils sur la façon de réaliser l'ingénierie des fonctionnalités sur des fonctionnalités inconnues?

Réponses:


19

Vous n'avez pas besoin de connaissances de domaine (la connaissance de ce que signifient vos données ) pour faire de l'ingénierie des fonctionnalités (trouver des moyens plus expressifs d' encadrer vos données).


Comme l'a expliqué Tu N. , vous pouvez trouver des combinaisons de fonctionnalités «rapides et sales» qui pourraient être utiles assez facilement. Étant donné une sortie et une caractéristique individuelle , vous pouvez effectuer les transformations suivantes, . Une vérification rapide de l'utilité de la transformation consiste à déterminer si la corrélation entre est supérieure à la corrélation entre .yXX{eX,Journal(X),X2,X3,tanh(X)}{y,X}{y,X}

Avertissement sur la corrélation: la corrélation ne montre pas tout et selon le modèle que vous utilisez (hautement non linéaire comme NN ou RF) et l'interaction avec d'autres variables, un changement de corrélation pourrait ne rien signifier.

Cependant, si vous utilisez un modèle linéaire simple comme la régression logistique, c'est un indicateur OK de performance. La meilleure façon d'évaluer une telle transformation, cependant, comme l'a noté Fokhruz Zaman , serait de construire un modèle avec et sans votre fonctionnalité transformée, et de voir comment l'erreur de validation (sur vos plis de validation croisée) évolue.

Il est assez facile de repérer les transformations à fonction unique de cette façon. Celles-ci s'appliquent à de nombreuses données, où une relation plus expressive entre votre entrée et votre sortie pourrait être à une échelle différente. Par exemple, la relation entre le revenu et le «bonheur» semble être logarithmique, mais vous n'enregistreriez jamais directement le journal du revenu d'un participant.


Il est plus difficile de trouver des combinaisons de fonctionnalités. Pour commencer, si vous voulez tester chaque ajout de 2 fonctionnalités et que vous avez des fonctionnalités , vous devez tester un ordre de transformations . Afin de trouver de telles transformations, vous pouvez appliquer un modèle non linéaire (tel que NN ou RF) au problème et essayer de voir ce qu'il apprend. Si vous pouvez identifier ce que fait une couche intermédiaire dans un NN, vous pouvez pré-calculer son résultat et l'ajouter en tant que nouvelle fonctionnalité. Il n'aura pas besoin de le recalculer et il essaiera probablement d'apprendre quelque chose de nouveau.2

Il peut être difficile d'interpréter la représentation interne d'un NN, ou même d'interpréter l'importance d'une caractéristique dans une forêt aléatoire. Une méthode plus simple, et probablement plus adaptée à cette fin, serait de stimuler les arbres de décision. Il y a beaucoup de bibliothèques implémentant Boosting, et si vous êtes dans la compétition Kaggle comme votre post semble l'impliquer, XGBoost semble utilisé par beaucoup de participants, donc vous pourriez trouver de l'aide / tutoriels sur ce que je vais décrire.

Tout d'abord, exécutez votre algorithme de boosting en utilisant uniquement des souches , des arbres de décision à 1 niveau. Les souches sont très faibles, mais Boosting en fait un modèle raisonnable. Cela servira de référence. Selon la bibliothèque que vous utilisez, vous devriez pouvoir afficher assez facilement les fonctionnalités les plus utilisées et les tracer par rapport à la réponse (ou faire un histogramme si la réponse est catégorique) pour identifier un modèle. Cela pourrait vous donner une intuition sur ce qui serait une bonne transformation de fonctionnalité unique.

Ensuite, exécutez l'algorithme Boosting avec des arbres de décision à 2 niveaux. Ce modèle est beaucoup plus complexe que le précédent; si deux variables prises ensemble ont plus de puissance que prises individuellement, ce modèle devrait surpasser le précédent (encore une fois, pas en termes d'erreur d'apprentissage, mais en cas d'erreur de validation!). Sur cette base, vous devriez pouvoir extraire les variables qui sont souvent utilisées ensemble, ce qui devrait vous conduire à des transformations multifonctionnelles potentielles.


Sur le matériel connexe, je conseillerais les vidéos suivantes car elles sont faciles à suivre


4

Vous pouvez prendre différentes combinaisons de fonctionnalités telles que la somme des fonctionnalités: feat_1 + feat_2 + feat_3..., ou le produit de celles-ci. Ou vous pouvez transformer des entités par log, ou exponentielles, sigmoïdes ... ou même discrétiser l'entité numérique en une entité catégorique. C'est un espace infini à explorer.

Quelle que soit la combinaison ou la transformation qui augmente vos performances de validation croisée ou de test, vous devez l'utiliser.


2
Je prendrais un peu de problème avec "Quelle que soit la combinaison ou la transformation qui augmente vos performances de validation croisée ou de test, alors vous devriez l'utiliser.". Essayer aveuglément des choses jusqu'à ce que quelque chose améliore votre mesure de performance pourrait entraîner la découverte d'une relation qui n'a pas de sens et provoque un sur-ajustement. Cela pourrait vraiment nuire aux performances sur de nouvelles observations en cours de route.
Hersheezy

1

Pourriez-vous s'il vous plaît expliquer plus avec des exemples spécifiques sur votre déclaration suivante?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

Je ne sais pas comment faire de l'ingénierie des fonctionnalités sans une bonne compréhension de votre ensemble de données et des attributs donnés !!

Les données tabulaires sont décrites en termes d'observations ou d'instances (lignes) constituées de variables ou d'attributs (colonnes). Un attribut peut être une fonctionnalité.

"L'idée d'une caractéristique, distincte d'un attribut, a plus de sens dans le contexte d'un problème. Une caractéristique est un attribut utile ou significatif à votre problème. C'est une partie importante d'une observation pour en savoir plus sur la structure de le problème qui est modélisé. ... ... ...

En vision par ordinateur, une image est une observation, mais une caractéristique pourrait être une ligne dans l'image.

Dans le traitement du langage naturel, un document ou un tweet peut être une observation, et une phrase ou un décompte de mots peut être une caractéristique.

Dans la reconnaissance vocale, un énoncé peut être une observation, mais une caractéristique peut être un seul mot ou phonème. "

Veuillez visiter l'URL suivante pour en savoir plus:

Découvrez l'ingénierie des fonctionnalités, comment concevoir des fonctionnalités et comment vous perfectionner


Les attributs dans le cas du PO ont été anonymisés au point où la connaissance du domaine ne peut pas être utilisée. Ceci est assez courant dans les compétitions Kaggle, mais des formes limitées d'ingénierie des fonctionnalités sont toujours possibles. En règle générale, les nouvelles fonctionnalités sont créées en masse puis testées, au lieu d'utiliser les connaissances du sujet pour guider leur génération. Un exemple: kaggle.com/c/bnp-paribas-cardif-claims-management/data
Neil Slater

comme l'a dit Neil, les fonctionnalités sont anonymisées, c'est ce que je veux dire dans ma déclaration.
user2409011
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.