[PYTHON] Ingénierie de la quantité de fonctionnalités voyageant avec des variables de catégorie Pokémon-

Dans l'apprentissage automatique, les données de chaîne de caractères telles que les données de catégorie ne peuvent pas être incluses dans le modèle d'apprentissage automatique à moins qu'elles ne soient converties en données numériques. De plus, les données numériques qui ne sont pas une échelle ordinale doivent être traitées comme une variable catégorielle. Dans cet article, je vais vous montrer comment convertir des variables catégorielles en une forme compréhensible par machine.

Cette fois-ci, comme dans le cas de Characteristics Engineering Travelling with Pokemon-Numerical Edition-, [Pokemon Dataset](https: // www. utilisez kaggle.com/abcsds/pokemon).

Charger la bibliothèque

import pandas as pd
from sklearn.feature_extraction import FeatureHasher

Lecture des données

df = pd.read_csv('./data/121_280_bundle_archive.zip')
df.head()

Les données

# Name Type 1 Type 2 Total HP Attack Defense Sp. Atk Sp. Def Speed Generation Legendary
1 Bulbasaur Grass Poison 318 45 49 49 65 65 45 1 False
2 Ivysaur Grass Poison 405 60 62 63 80 80 60 1 False
3 Venusaur Grass Poison 525 80 82 83 100 100 80 1 False
3 VenusaurMega Venusaur Grass Poison 625 80 100 123 122 120 80 1 False
4 Charmander Fire NaN 309 39 52 43 60 50 65 1 False

Encodage factice

Le codage factice est la technique la plus populaire et la plus fréquemment utilisée lorsqu'il s'agit de variables catégorielles dans l'ingénierie de la quantité d'entités. Chaque variable de catégorie est représentée par 0, 1 bits. Le bit de la partie qui correspond à la valeur de catégorie est 1 et le bit de la partie qui ne correspond pas est 0. IMG_8246.JPG

pandas a une fonction simple pour l'encodage factice. Regardons le code.

# One-hot Encoding
gdm = pd.get_dummies(df['Type 1'])
gdm = pd.concat([df['Name'], gdm], axis=1)

Vous pouvez voir que le bit correspondant au type Herbe de Bulbasaur est 1.

Name Bug Dark Dragon Electric Fairy Fighting Fire Flying Ghost Grass Ground Ice Normal Poison Psychic Rock Steel Water
Bulbasaur 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Ivysaur 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Venusaur 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
VenusaurMega Venusaur 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Charmander 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0

Encodage des étiquettes

Le codage fictif est représenté par 0, 1 bits, mais le codage d'étiquette est représenté par un entier. IMG_6885.JPG

Hachage du montant de la fonctionnalité

La différence entre le hachage de la quantité d'entités et la conversion conventionnelle est que le hachage de la quantité d'entités comporte un plus petit nombre de catégories après la conversion. Il n'y a aucun problème si vous pouvez imaginer réduire le nombre d'entités d'entrée en utilisant une fonction magique appelée fonction de hachage. ~~ Il est plus facile de se souvenir de n'importe quelle étude avec une image. ~~

IMG_8811.JPG

Regardons le code. sklearn a un module FeatureHasher, alors utilisons-le. Nous allons réduire les types de Pokémon à 5 par hachage de la quantité de fonctionnalités.

Vous pourriez penser: "Quand l'utilisez-vous?" N'oubliez pas de l'utiliser généralement lorsqu'il y a trop de variables catégorielles.

fh = FeatureHasher(n_features=5, input_type='string')
hash_table = pd.DataFrame(fh.transform(df['Type 1']).todense())

Fonctionnalités après la conversion

0 1 2 3 4
2 0 0 0 -1
2 0 0 0 -1
2 0 0 0 -1
2 0 0 0 -1
1 -1 0 -1 1

à la fin

Quand dois-je choisir l'une de ces méthodes? Une réponse est d'utiliser différentes méthodes en fonction des spécifications de l'ordinateur pour l'analyse. Bien que le codage fictif et le codage d'étiquettes soient simples, trop de variables catégorielles peuvent provoquer des erreurs de mémoire. À ce moment-là, vous pouvez envisager un hachage de la quantité d'entités qui comprime la quantité d'entités.

Cependant, il est récemment devenu disponible dans High-spec calculator is free, et il est souvent utilisé dans Kaggle. GBDT, le modèle d'arbre de décision qui a été utilisé, peut gérer le codage des étiquettes. On pense que le tour du hachage de la quantité de caractéristiques n'est pas si important. IMG_5875.JPG

Recommended Posts

Ingénierie de la quantité de fonctionnalités voyageant avec des variables de catégorie Pokémon-
Ingénierie de quantité de fonctionnalités voyageant avec Pokemon-Version numérique
Note sur «l'ingénierie des fonctionnalités» de HJvanVeen
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 3 Échelle collaborative de Google
Prix des maisons Kaggle ① ~ Ingénierie des fonctionnalités ~
Définir des variables d'environnement avec lambda-uploader