Beim maschinellen Lernen können Zeichenkettendaten wie Kategoriedaten nur dann in das maschinelle Lernmodell aufgenommen werden, wenn sie in numerische Daten konvertiert werden. Auch numerische Daten, die keine Ordnungsskala sind, sollten als kategoriale Variable behandelt werden. In diesem Artikel werde ich Ihnen zeigen, wie Sie kategoriale Variablen in eine maschinenverständliche Form konvertieren.
Diesmal, wie im Fall von Characteristics Engineering Travelling with Pokemon-Numerical Edition-, [Pokemon Dataset](https: // www. benutze 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()
Daten
# | 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 |
Die Dummy-Codierung ist die beliebteste und am häufigsten auftretende Technik beim Umgang mit kategorialen Variablen im Feature-Quantity-Engineering. Jede Kategorievariable wird durch die Bits 0 und 1 dargestellt. Das Bit des Teils, das dem Kategoriewert entspricht, ist 1, und das Bit des Teils, das nicht entspricht, ist 0.
pandas hat eine einfache Funktion für die Dummy-Codierung. Schauen wir uns den Code an.
# One-hot Encoding
gdm = pd.get_dummies(df['Type 1'])
gdm = pd.concat([df['Name'], gdm], axis=1)
Sie können sehen, dass das Bit, das dem Gras-Typ des Bulbasaur entspricht, 1 ist.
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 |
Die Dummy-Codierung wird durch 0, 1 Bit dargestellt, die Label-Codierung wird jedoch durch eine Ganzzahl dargestellt.
Der Unterschied zwischen Feature-Mengen-Hashing und herkömmlicher Konvertierung besteht darin, dass Feature-Mengen-Hashing nach der Konvertierung eine geringere Anzahl von Kategorien aufweist. Es ist kein Problem, wenn Sie sich vorstellen können, die Anzahl der Eingabefunktionen mithilfe einer magischen Funktion zu reduzieren, die als Hash-Funktion bezeichnet wird. ~~ Es ist einfacher, sich an eine Studie mit einem Bild zu erinnern. ~~
Schauen wir uns den Code an. sklearn verfügt über ein FeatureHasher-Modul. Verwenden wir es also. Wir werden die Pokemon-Typen durch Feature-Hashing auf 5 eingrenzen.
Sie könnten denken: "Wann verwenden Sie es?" Denken Sie daran, es normalerweise zu verwenden, wenn zu viele kategoriale Variablen vorhanden sind.
fh = FeatureHasher(n_features=5, input_type='string')
hash_table = pd.DataFrame(fh.transform(df['Type 1']).todense())
Funktionen nach der Konvertierung
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 |
Wann sollte ich eine dieser Methoden wählen? Eine Antwort besteht darin, je nach den Spezifikationen des Computers für die Analyse unterschiedliche Methoden zu verwenden. Während Dummy-Codierung und Label-Codierung einfach sind, können zu viele kategoriale Variablen Speicherfehler verursachen. Zu diesem Zeitpunkt können Sie ein Feature-Mengen-Hashing in Betracht ziehen, das die Feature-Menge komprimiert.
In letzter Zeit ist es jedoch in High-Spec-Rechner ist kostenlos verfügbar und wird häufig in Kaggle verwendet. GBDT, das verwendete Entscheidungsbaummodell, kann die Etikettencodierung verarbeiten. Es wird angenommen, dass das Hashing der Feature-Menge nicht so groß ist.
Recommended Posts