[PYTHON] Note sur «l'ingénierie des fonctionnalités» de HJvanVeen

Aperçu

Je l'ai écrit il y a environ deux ans et je l'ai laissé sur le site interne, mais je vais le publier car c'est un gros problème.

C'est une traduction de la diapositive suivante (C'est une adaptation plutôt qu'une traduction car la composition est assez différente?) «Ingénierie des fonctionnalités» de HJvanVeen https://www.slideshare.net/HJvanVeen/feature-engineering-72376750

Je pense que cette diapositive est plus complète qu'un petit livre si elle est complète. Cependant, comme il s'agit d'une diapositive, il y a de nombreuses parties qui sont difficiles à comprendre avec une description assez simple. Par conséquent, des explications supplémentaires sont ajoutées le cas échéant, et si vous pensez que quelque chose ne va pas, Cependant, il est possible que vous ayez mal compris votre intention car vous n'avez pas entendu l'annonce originale. Pour plus de détails sur chaque sujet, il s'agit essentiellement d'un niveau que vous pouvez facilement comprendre par Google. Je ne l'ai pas écrit, je ne l'ai pas complété, j'ai inclus des explications supplémentaires uniquement pour ceux qui n'ont pas beaucoup d'informations ou sont difficiles à comprendre.

De plus, bien que cette diapositive énumère divers sujets, il n'y a pas beaucoup d'écrit sur les situations d'utilisation spécifiques, les avantages et les inconvénients.Je la laisserai telle quelle cette fois, mais j'aimerais faire quelque chose à ce sujet.

Note de l'éditeur: concernant la mise en œuvre

Les modules suivants peuvent être utilisés lors de l'exécution de l'ingénierie de quantité de fonctionnalités présentée ci-dessous dans Python.

Remarque: les informations du module peuvent être un peu obsolètes car elles ont été écrites il y a longtemps.

pandas Il peut être utilisé pour le traitement général des données tabulaires. Cependant, get_dummies () semble être utilisable pour un encodeur one-hot, mais il ne peut pas gérer les valeurs manquantes, donc je pense qu'il est préférable d'écrire un wrapper de classe ~~ transformer pour scikit-learn. Masu ~~ ʻOneHotEncoderest plus facile à utiliser. scikit-learn Divers «transformateurs» de «prétraitement». En gros, tout peut être converti avec les méthodesfit ()ettransform ()`, ce qui rend le code source plus facile à lire. Il est également possible de s'organiser dans Pipeline. Idéalement, il est organisé dans ce Pipeline, mais peu de classes sont implémentées. http://scikit-learn.org/stable/modules/preprocessing.html Par exemple,

Ce domaine est également lié à l'histoire que j'ai écrite plus tôt.

"Pour rendre l'analyse des données plus intelligente en Python"

Category Encoders https://contrib.scikit-learn.org/categorical-encoding/ Diverses classes supplémentaires sont fournies et peuvent être liées à scikit-learn. Il prend également en charge pandas.Series, mais d'un autre côté, il n'est pas implémenté en raison de la vitesse, le traitement des données volumineuses n'est donc pas efficace (très lent).

** Addendum: Une mise à jour récente rend scikit-learn-contrib mais difficile à utiliser dans le pipeline. Je pense qu'il est plus facile d'utiliser le transformateur natif scikit-learn ou de l'implémenter vous-même. **

Mlxtend Un module plus avancé conçu pour fonctionner avec scikit-learn https://rasbt.github.io/mlxtend/

** Addendum: avec une mise à jour récente, scikit-learn prend également en charge les classes d'apprentissage hétéro-ensemble faciles. La comparaison d'utilisabilité n'a pas été étudiée **

imbalance-learn Un module créé sur l'hypothèse qu'il fonctionnera avec scikit-learn. Traitement des données déséquilibrées http://contrib.scikit-learn.org/imbalanced-learn/stable/

[^ imbpost]: Le rééchantillonnage de données déséquilibrées déforme les probabilités postérieures et entraîne (évidemment) un biais dans la prédiction lorsqu'il est utilisé tel quel pour la classification. SSCI.2015.33](https://doi.org/10.1109/SSCI.2015.33)), mais l'idée de cet article a été mentionnée à maintes reprises auparavant. Page personnelle de Takuya Kitazawa a un résumé des idées ici pour votre référence.

fancyimpute Module pour compléter la valeur manquante https://github.com/iskandr/fancyimpute

(Je ne l'ai jamais utilisé)


Histoire principale

J'ajouterai un peu avant la partie principale

Conversion en fonctionnalités catégorielles

conversion one-hot encodage one-hot

[^ one-hot-sparse]: Traduction: Il existe des implémentations telles que pandas.get_dummies et sklearn.preprocessing.OneHotEncoder, qui peuvent toutes deux être renvoyées sous forme de matrice éparse de scipy. .pydata.org / pandas-docs / stable / generated / pandas.get_dummies.html, http://contrib.scikit-learn.org/categorical-encoding/onehot.html, http://scikit-learn.org/stable /modules/generated/sklearn.preprocessing.OneHotEncoder.html ~~ Cependant, comme sklearn est compatible numpy, les données d'entrée sont uniquement de type numérique ~~ Actuellement, il est assez facile à utiliser car il prend également en charge le type d'objet.

Codage de hachage de conversion de hachage

Aussi appelé astuce de hachage, fonctionnalité de hachage [^ hash-trick].

[^ hash-trick]: Dans l'article original (DOI: 10.1145 / 1553374.1553516), hash trick est une combinaison de conversion de hachage et d'astuce du noyau. Récemment, beaucoup de gens appellent cela simplement la conversion de hachage.

Codage des étiquettes Codage des étiquettes

Encodage du compte de conversion de comptage

Notez que dans le cas d'un modèle linéaire, la variable objectif et le nombre doivent avoir une corrélation linéaire avant d'être valides.

Codage du nombre d'étiquettes

[^ yuukou]: Traduit par: Comme d'habitude, cela signifie "valide (parfois)" [^ tie]: Que faire en cas d'égalité de classement

Encodage de la cible de conversion cible

Intégration de catégorie

[^ embed]: Comme d'habitude, il y a des cas où ce n'est pas une propriété universelle (arXiv: 1604.06737). Il est efficace dans le cas de "structure plus compliquée", dans des situations comme le problème dit du rouleau suisse.

Conversion NaN Codage NaN

Encodage polynomial

** Traduction **: la transformation polygonale consiste à utiliser une combinaison de variables catégorielles comme quantité d'entités. Il peut s'agir de deux paires ou plus, ou de trois combinaisons ou plus. Catégorie La conversion à chaud des variables cal entraîne souvent de très grandes dimensions. Par conséquent, si vous ajoutez une combinaison de celles-ci, une "explosion de combinaison" se produira. S'il existe de nombreuses variables cal catégorielles, l'apprentissage qui inclut la transformation polymorphe Vous pouvez utiliser l'algorithme Factorlization Machine (10.1109 / ICDM.2010.127). Voudrais

[^ fs]: Voulez-vous dire la sélection des fonctionnalités? [^ vw]: Je ne suis pas sûr de cela. VowpalWabbit algorithme de sélection des fonctionnalités?

Codage d'extension de conversion d'extension

Codage de consolidation

Conversion en fonctionnalités numériques

Conversion d'informations numériques telles que les variables continues et les décomptes qui sont plus faciles à reconnaître pour l'algorithme que les variables catégorielles.

Arrondir arrondi / binning binning

Mise à l'échelle

Conversion de variables numériques pour s'adapter à une plage spécifique.

Interpolation des valeurs manquantes Imputation

[^ par paire]: Traduction: suppression par paire? [^ estimation]: Traduction: modèle Tobit ou méthode d'affectation multiple?

** Traduction **: un algorithme qui ne peut pas gérer les valeurs manquantes peut fonctionner, mais les trois premières méthodes ne sont généralement pas valides. Le quatrième "modèle" Dans «Estimer avec», «Notez que le biais de la valeur estimée est ajouté», mais il est également clair que la méthode d'interpolation avec la valeur moyenne ou la valeur médiane impose également un modèle arbitraire sur la distribution des quantités de caractéristiques. Ainsi, si ces méthodes sont efficaces, on peut dire que, par exemple, une méthode de conversion uniforme des valeurs manquantes en zéro est également efficace.

Les interactions

[^ intui]: C'est comme une "croyance"

Algorithme non linéaire pour la chute linéaire

Comment améliorer l'ajustement à un modèle linéaire en effectuant une transformation non linéaire [^ nonlin].

** Traduction **: Il n'y a pas d'explication spécifique pour le ** code feuille **, mais peut-être qu'un algorithme d'arbre de décision tel qu'une forêt aléatoire est appliqué, et au lieu d'utiliser la valeur prédite, des informations sur le nœud feuille tombé sont présentées. La forêt aléatoire peut également apprendre des structures complexes, il est donc suggéré que les informations de nœud feuille peuvent être capables de convertir des fonctions non linéaires en informations linéaires. Je ne sais pas de qui il s'agit, mais par exemple, 10.1145 / 2648584.2648589 a un exemple d'utilisation. [^ nonlin]: La plupart des méthodes énumérées ici sont coûteuses en calcul ou extrêmement coûteuses en calcul en ce qui concerne la dimension, donc beaucoup ne sont pas pratiques quand il y a beaucoup de variables. Par exemple, "Kernel Multivariate Analysis" d'Akaho est une bonne référence pour cette histoire.

Utilisation des statistiques pour chaque ligne comme caractéristiques

Variables temporelles

Variables qui représentent des dates, etc., choses qui doivent souvent être confirmées, là où des erreurs sont susceptibles de se produire, mais peuvent souvent être considérablement améliorées.

** Traduction **: Bien que non mentionné par l'auteur, il existe une manière classique de "transformation circulaire" d'utiliser la classe de Fourier finie (expansion polynomiale triangulaire) utilisée pour approximer les fonctions périodiques. Par exemple, prophet C'est ainsi que s'exprime la périodicité (si vous ne connaissez pas le prophète, ce que j'ai écrit et son lien Il existe de nombreuses autres techniques que Prophet peut facilement mettre en œuvre par vous-même, ce qui peut être utile lorsqu'il s'agit de variables de temps. Bien sûr, c'est plus simplement le jour, le jour de janvier, l'année. Dans certains cas, des informations telles que le nombre de jours de la journée peuvent être exprimées par conversion one-hot en tant que variable catégorielle.

Variables spatiales

Localisation spatiale: coordonnées GPS, villes, pays / régions, adresses, etc.

[^ kriging]: Traduction: Voulez-vous faire cela? Je pense que vous pouvez l'essayer en ajoutant un variogramme au montant de la fonction.

Exploration Exploration

Examinez les données. Trouvez des idées pour la qualité des données, les valeurs aberrantes, le bruit et l'extraction d'entités.

Itération / Débogage Itération / Débogage

Étant donné que l'ingénierie de la quantité d'entités est un travail qui se répète plusieurs fois, effectuez le flux de travail afin qu'il puisse être répété rapidement.

Ingénierie d'étiquettes

La variable étiquette / cible / objectif elle-même peut être utilisée comme quantité de caractéristiques, et vice versa.

** Traduction **: Cet élément est trop vague pour être compris, mais je pense qu'il fait référence à trois techniques principales.

La première technique consiste à améliorer l'ajustement en transformant la variable objective. Par exemple, un modèle de régression linéaire simple a tendance à être moins ajusté si la distribution est asymétrique et déformée, telle que logarithmique ou au carré. Vous constaterez peut-être que le modèle de régression linéaire s'adapte également mieux si vous transformez la variable objectif en et l'ajustez pour qu'elle soit symétrique. Un exemple typique est le ** modèle linéaire généralisé ** (GLM).

La seconde mentionne que l'ajout d'une variable objectif transformée d'une autre manière à un tel modèle peut être encore mieux, bien sûr, parce que la variable objectif est utilisée comme une quantité de caractéristiques. Il ne peut pas être utilisé pour la prédiction réelle, mais il peut être utilisé pour vérifier où est la cause du mauvais ajustement, en d'autres termes, quelle est la tendance de la variable objective qui n'est pas capturée par le modèle en cours de test. En d'autres termes, en vérifiant un tel modèle avec un histogramme résiduel ou un graphique qq, nous pouvons obtenir un indice que nous pouvons améliorer la méthode de conversion de la variable objective mentionnée dans la première technique.L'auteur est en statistique. Je pense qu'il mentionne une méthode appelée diagnostic résiduel.

Le troisième est le contenu mentionné dans les deux derniers "Variables bivalentes ~" et "Ne peut pas être utilisé dans les données de test ~". Comme son nom l'indique, il n'y a que deux valeurs pour les variables binaires, donc il y a peu d'informations. , On dit que la valeur de cette variable binaire est déterminée par une variable inconnue ** modèle de variable latente * On pense qu'il y a une probabilité invisible derrière elle, telle que *. La notation consiste à créer une variable qui représente la probabilité correspondant à la valeur d'une variable binaire, et ** remplacer le problème de classification par un problème de régression pour la variable de score. Cela signifie **, car cette variable de score ne peut pas être créée sans réfléchir (comme d'habitude, choisir uniquement le modèle qui correspond le mieux aux données revient à résoudre un problème de classification normal). , Il sera nécessaire d'obtenir des informations sur la façon dont la probabilité est déterminée à partir de l'extérieur des données, ce que l'on appelle la "connaissance du domaine". "Ne peut pas être utilisé dans les données de test ~" consiste à prédire la valeur des quantités de caractéristiques futures. Cela signifie créer un autre modèle de prédiction avec d'autres grandeurs d'entités et variables objectives comme quantités d'entités. On peut également les considérer comme des ** complémentations de valeurs manquantes au sens large **. Ces deux techniques utilisent un autre modèle de prédiction. Cela prend du temps, mais bien sûr, une telle méthode peut être efficace.

Pour le traitement du langage naturel

** Traduction **: Cette section est une liste très rudimentaire d'histoires sans explications spécifiques, vous voudrez peut-être lire un manuel décent (comme la série de traitement du langage naturel de Corona).

[^ pcanlp]: Traduction: La base de ce nombre est inconnue

Réseau neuronal et apprentissage en profondeur

[^ dl]: HAHAHA Ce n'est pas le poisson d'avril aujourd'hui! [^ mean-feature]: Un aspect de l'extraction d'entités n'est-il pas un processus pour améliorer le problème des conditions défavorables et stabiliser le calcul d'optimisation en premier lieu?

Leakage/Golden Features

[^ leak]: La fuite est une méthode pour améliorer l'ajustement des données de test en utilisant des informations qui ne sont pas disponibles à l'origine au moment de l'apprentissage. Il semble que cela soit parfois dû à une erreur de l'interrogateur dans kaggle. Par conséquent, ce n'est pas pratique. , Les techniques énumérées ci-dessous dans l'ingénierie inverse et l'extraction de règles auront l'opportunité d'être utilisées dans n'importe quelle situation.

épigraphe

Il est inséré à divers endroits, mais je vais le résumer ici.

Andrew Ng "Le livre sur l'application de l'apprentissage automatique qui est difficile à capturer des fonctionnalités, fait perdre du temps et possède une expertise en ingénierie des fonctionnalités." Domingos "L'apprentissage automatique a à la fois des succès et des échecs. Quelle est la différence? En termes simples, le facteur le plus important est les fonctionnalités utilisées." Locklin: "L'ingénierie des fonctionnalités est quelque chose d'autre qui ne suffit pas pour figurer dans des articles de lecture ou des manuels, mais elle est absolument essentielle au succès de l'apprentissage automatique ... Retour à l'ingénierie " Miel: "Rendre les données d'entrée compréhensibles par l'algorithme" Hal Daume III "Ce que disent la plupart des articles: l'ingénierie des fonctionnalités est difficile et prend du temps, mais nous avons trouvé une nouvelle façon pour les réseaux de neurones de faire de même dans cet article de huit pages. Il est écrit" François Chollet "Développer un bon modèle nécessite de répéter encore et encore l'idée originale jusqu'à la date limite. Il y a toujours un potentiel pour améliorer le modèle. Le modèle final aborde généralement le problème en premier. C'est presque différent de la perspective à l'époque, car les horaires apriori ne peuvent en principe pas survivre au conflit avec la réalité expérimentale. "

Recommended Posts

Note sur «l'ingénierie des fonctionnalités» de HJvanVeen
Prix des maisons Kaggle ① ~ Ingénierie des fonctionnalités ~
Note
Ingénierie de la quantité de fonctionnalités voyageant avec des variables de catégorie Pokémon-
Note
Note
Ingénierie de quantité de fonctionnalités voyageant avec Pokemon-Version numérique
Prédire la valeur par défaut des cartes de crédit Ingénierie de la quantité de fonctionnalités
Unité 5 Ingénierie des fonctionnalités pour la sélection des fonctionnalités d'apprentissage automatique
Kaggle: Introduction à l'ingénierie manuelle des fonctionnalités, partie 1