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).
import pandas as pd
from sklearn.feature_extraction import FeatureHasher
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 |
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.
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 |
Le codage fictif est représenté par 0, 1 bits, mais le codage d'étiquette est représenté par un entier.
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. ~~
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 |
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.
Recommended Posts