Utilité de l'ingénierie des fonctionnalités: Pourquoi créer de nouvelles fonctionnalités basées sur des fonctionnalités existantes?


30

Je vois souvent des gens créer de nouvelles fonctionnalités basées sur des fonctionnalités existantes sur un problème d'apprentissage automatique. Par exemple, ici: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ les gens ont considéré la taille de la famille d'une personne comme une nouvelle fonctionnalité, basée sur sur le nombre de frères, soeurs et parents, qui étaient des caractéristiques existantes.

Mais à quoi ça sert? Je ne comprends pas pourquoi la création de nouvelles fonctionnalités corrélées est utile. N'est-ce pas le travail de l'algorithme de le faire seul?


Réponses:


30

L'exemple le plus simple utilisé pour illustrer cela est le problème XOR (voir l'image ci-dessous). Imaginez que l'on vous donne des données contenant des coordonnées et et la classe binaire à prévoir. Vous pourriez vous attendre à ce que votre algorithme d'apprentissage automatique trouve par lui-même la frontière de décision correcte, mais si vous avez généré une fonctionnalité supplémentaire , le problème devient trivial car vous donne un critère de décision presque parfait pour la classification et vous avez utilisé une arithmétique simple !xyz=xyz>0

Problème XOR

Ainsi, alors que dans de nombreux cas, vous pouvez vous attendre à ce que l'algorithme trouve la solution, ou bien, par l'ingénierie des fonctionnalités, vous pouvez simplifier le problème. Les problèmes simples sont plus faciles et plus rapides à résoudre et nécessitent des algorithmes moins compliqués. Les algorithmes simples sont souvent plus robustes, les résultats sont souvent plus interprétables, ils sont plus évolutifs (moins de ressources de calcul, temps de formation, etc.) et portables. Vous pouvez trouver plus d'exemples et d'explications dans l'excellent discours de Vincent D. Warmerdam, donné lors de la conférence PyData à Londres .

De plus, ne croyez pas tout ce que les spécialistes du marketing de l'apprentissage automatique vous disent. Dans la plupart des cas, les algorithmes "n'apprendront pas d'eux-mêmes". Vous avez généralement un temps, des ressources et une puissance de calcul limités et les données ont généralement une taille limitée et sont bruyantes, rien de tout cela ne vous aide.

En poussant cela à l'extrême, vous pouvez fournir vos données sous forme de photos de notes manuscrites du résultat de l'expérience et les transmettre à un réseau neuronal compliqué. Il apprendrait d'abord à reconnaître les données sur les images, puis à les comprendre et à faire des prédictions. Pour ce faire, vous auriez besoin d'un ordinateur puissant et de beaucoup de temps pour la formation et le réglage du modèle et vous auriez besoin d'énormes quantités de données en raison de l'utilisation d'un réseau neuronal compliqué. Fournir les données dans un format lisible par ordinateur (sous forme de tableaux de nombres) simplifie énormément le problème, car vous n'avez pas besoin de toute la reconnaissance des caractères. Vous pouvez penser à l'ingénierie des fonctionnalités comme une étape suivante, où vous transformez les données de manière à créer desfonctionnalités, de sorte que votre algorithme a encore moins à comprendre par lui-même. Pour donner une analogie, c'est comme si vous vouliez lire un livre en langue étrangère, de sorte que vous deviez d'abord apprendre la langue, par opposition à la lire traduite dans la langue que vous comprenez.

Dans l'exemple de données Titanic, votre algorithme devrait comprendre que la somme des membres de la famille est logique, pour obtenir la fonctionnalité "taille de la famille" (oui, je la personnalise ici). C'est une caractéristique évidente pour un humain, mais ce n'est pas évident si vous voyez les données comme seulement quelques colonnes des nombres. Si vous ne savez pas quelles colonnes sont significatives lorsqu'elles sont considérées avec d'autres colonnes, l'algorithme pourrait le comprendre en essayant chaque combinaison possible de ces colonnes. Bien sûr, nous avons des moyens intelligents de le faire, mais tout de même, c'est beaucoup plus facile si les informations sont données immédiatement à l'algorithme.


Merci, c'est très bien expliqué et très intéressant!
Matthieu Veron

Je trouve votre réponse très bonne mais je pense qu'il vaut mieux la nuancer un peu. Plus précisément, je pense que l'ingénierie des fonctionnalités en termes de termes d'interaction ne simplifie pas beaucoup les choses pour des algorithmes tels que les RF (bien que cela puisse encore aider) car les RF capturent les termes d'interaction dans une certaine mesure par eux-mêmes. Faites-moi savoir si je manque quelque chose d'important. Mais oui, en général, l'ingénierie des fonctionnalités simplifie et aide beaucoup les choses.
Poete Maudit

@PoeteMaudit, il est vrai que l'arbre de décision (et donc RF) modélise une grande interaction, mais c'est un certain type d'interactions, pas toutes les interactions possibles. De plus, l'ingénierie des fonctionnalités ne concerne pas uniquement les interactions.
Tim

Je suis certainement d'accord avec vos points. Premièrement, ces RF modélisent un certain type d'interactions (vous voulez dire principalement x * y?). Deuxièmement, cette ingénierie des fonctionnalités ne concerne certainement pas uniquement les interactions.
Poete Maudit

14

Eh bien, si vous prévoyez d'utiliser un classificateur linéaire simple, il est parfaitement logique de générer de nouvelles fonctionnalités qui sont une fonction non linéaire des fonctionnalités existantes, surtout si vos connaissances du domaine vous indiquent que la fonctionnalité résultante sera significative et informative. Notez qu'un classificateur linéaire ne peut pas considérer ces fonctionnalités complexes à moins que vous ne les fournissiez explicitement.

Idéalement, si vous utilisez un algorithme de classification non linéaire suffisamment puissant, il devrait être capable de créer une frontière de décision qui considère les transformations non linéaires arbitraires des entités en entrée si elles sont informatives pour la classification. Cependant, dans la pratique, la plupart des classificateurs non linéaires examinent simplement un certain type de transformations. Par exemple, un noyau polynomial SVM prendra en compte les interactions polynomiales entre les fonctionnalités, mais peut-être qu'une fonctionnalité plus informative peut être créée en appliquant d'autres types de transformations ...

En bref, si la connaissance du domaine indique qu'une combinaison non linéaire de fonctionnalités fabriquées à la main peut être informative, il est logique de l'ajouter à l'ensemble de fonctionnalités existant.


OK, je comprends ! Mais comment savoir si mes fonctionnalités que j'ai créées sont significatives et informatives? Je veux dire, les problèmes peuvent avoir des explications contre-intuitives. D'après ce que je comprends, la création de fonctionnalités est un moyen de diriger l'algorithme dans une direction, pour gagner du temps sur ses prédictions. Donc, de plusieurs façons, nous influençons l'algorithme. Comment vérifier que l'on influence correctement?
Matthieu Veron

2
Eh bien, c'est là que la connaissance du domaine entre en jeu. Par exemple, si vous concevez un système de diagnostic médical, vous pouvez parler aux médecins et leur demander quelles informations ils utilisent pour diagnostiquer un patient. Par exemple, si un médecin dit "Si le patient a à la fois de la fièvre et des maux de tête, il est probable qu'il aura la grippe". Cette phrase pourrait indiquer que l'inclusion d'une nouvelle caractéristique de drapeau qui indique la présence de fièvre et de maux de tête peut être une bonne idée (surtout si vous utilisez un classificateur linéaire, qui ne peut pas "voir" les caractéristiques d'interaction polynomiale en soi).
Daniel López

1
Néanmoins, il s'agit plus d'un art que d'une science. À la fin, vous devez valider l'efficacité de vos fonctionnalités artisanales en testant vos modèles sur un ensemble de test avec un protocole expérimental impartial ...
Daniel López

3

Il est vrai que certains des modèles d'apprentissage automatique ont la capacité de gérer la non-linéarité et l'interaction entre les variables, cependant, cela dépend de la situation, je vois trois raisons pour lesquelles cela devient nécessaire.

  1. Certains modèles comme la régression linéaire ne gèrent pas automatiquement la non-linéarité, dans ce cas, vous devez créer des fonctionnalités supplémentaires pour vous aider. Par exemple ci-dessous: si vous disposez de l'ensemble de données suivant, tous les de la variable cible sont regroupés au centre d'une zone de type cercle.Y=1

Limite du cercle

Si vous ne disposez que de deux fonctionnalités, et . Un modèle linéaire simple de ne trouvera aucun moyen de classer la variable cible. Donc, à la place, vous avez besoin de nouvelles fonctionnalités quartiques pour capturer la non-linéarité: .x1x2y=x0+c1x1+c2x2y=x0+c1x12+c2x22

  1. Si vous savez à l'avance que certaines fonctionnalités (issues des connaissances ou de l'expérience métier), cela peut aider à les créer pour accélérer l'exécution du modèle et faciliter la tâche de votre modèle. Par exemple, dans votre exemple de données Titanic et si vous utilisez un modèle de classification d'arbre de décision. Si vous savez que les vieilles dames (âge et sexe) sont plus susceptibles de survivre, en créant une seule fonctionnalité qui capture les informations, votre arbre peut effectuer un fractionnement sur la nouvelle variable au lieu de diviser deux sur les deux variables. Cela peut accélérer le temps de calcul si vous savez à l'avance que la fonctionnalité est importante.

  2. Dans le monde réel, vous n'obtiendrez aucun ensemble de données comme Kaggle. Au lieu de cela, vous obtenez des informations de partout. Par exemple, si vous souhaitez prédire l'attrition de la clientèle pour une entreprise de vente au détail en ligne comme Amazon, vous avez des informations sur la démographie des clients, des informations sur les transactions d'achat. Vous devez générer beaucoup de fonctionnalités à partir de différentes sources, dans ce cas, vous trouverez que de nombreuses fonctionnalités utiles peuvent être obtenues / agrégées à partir du niveau de transaction. Comme le dit Andrew Ng: Souvent, la capacité de faire de l'ingénierie des fonctionnalités définit le succès ou l'échec d'un projet d'apprentissage automatique.

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.