[PYTHON] Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Encoding) zu verarbeiten.

Einführung

Dies ist eine Fortsetzung des vorherigen Artikels. https://qiita.com/shallowdf20/items/eb35a9cf3c24403debb1

Dieses Mal möchte ich die Codierungsverarbeitung von DataLiner vorstellen.

Installation

! pip install -U dataliner

Datenaufbereitung

Bereiten Sie die Titanic-Daten wie zuvor vor.

import pandas as pd
import dataliner as dl

df = pd.read_csv('train.csv')
target_col = 'Survived'

X = df.drop(target_col, axis=1)
y = df[target_col]

image.png

Indem Sie kategoriale Variablen wie Geschlecht und Name auf irgendeine Weise codieren, können Sie Zeichenfolgen verarbeiten, die nicht wie in Formeln und Modellen behandelt werden können. Lassen Sie uns jetzt einen Blick darauf werfen.

OneHotEncoding Dies ist die häufigste Codierungsmethode. Ersetzen Sie die kategorialen Variablen durch 0 und 1 Dummy-Variablen. Lassen Sie uns zuerst einen Blick darauf werfen.

trans = dl.OneHotEncoding()
trans.fit_transform(X)

image.png

Die Anzahl der Spalten hat sich gleichzeitig erhöht. Da es beispielsweise Namenstypen für die Anzahl der Daten = 891 Personen gibt, werden 891 Spalten gleichzeitig erhöht. Danach können Sie die Variable mit DropLowAUC usw. löschen. Es ist jedoch besser, GroupRareCategory oder DropHighCardinality im Voraus anzuwenden. Versuchen Sie die Codierung, nachdem Sie DropHighCardinality in der Pipeline angewendet haben.

from sklearn.pipeline import make_pipeline

process = make_pipeline(
    dl.DropHighCardinality(),
    dl.OneHotEncoding(),
)
process.fit_transform(X)

image.png Es passt in die Anzahl der gemeinsamen Merkmalsmengen. Wenn Sie eine Variable, die nur für Männer und Frauen existiert, wie z. B. das Geschlecht der Titanic, als Dummy-Variable festlegen, wird häufig eine der Spalten gelöscht, um eine Co-Linearität zu vermeiden. DataLiner bereitet ein Argument namens drop_first vor und standardmäßig wird True = automatisch gelöscht.

CountEncoding Dies ist eine Codierung, die kategoriale Variablen durch die Anzahl der Vorkommen der Kategorie ersetzt. Schauen wir uns zunächst die Anzahl der Passagiere nach Geschlecht auf der Titanic an.

df['Sex'].value_counts()

male 577 female 314 Name: Sex, dtype: int64

Es gibt 577 Männer und 314 Frauen.

Lassen Sie uns nun CountEncoding durchführen.

trans = dl.CountEncoding()
trans.fit_transform(X)

image.png

Wenn Sie sich die Spalte Geschlecht ansehen, können Sie sehen, dass sie sicherlich durch die Zählung ersetzt wird. Da die Kategoriespalte automatisch erkannt wird, werden auch andere Kategoriespalten wie Name und Eingeschifft durch Zahlen ersetzt.

RankedCountEncoding CountEncoding ist eine einfache, aber leistungsstarke Technik, hat jedoch den Nachteil, dass sie für Ausreißer anfällig ist. Beispielsweise gibt es eine ungewöhnlich große Anzahl von Kategorien. Wenn es Kategorien mit der gleichen Anzahl von Vorkommen gibt, werden sie durch die gleiche Anzahl ersetzt, sodass sie nicht mehr zu unterscheiden sind. (Natürlich ist das richtig, wenn es nicht in der Natur unterschieden werden sollte)

Daher ersetzt dieser Encoder die Anzahl der Vorkommen, erstellt eine Rangfolge in absteigender Reihenfolge der Anzahl der Vorkommen und ersetzt die kategorialen Variablen in dieser Reihenfolge. Im vorherigen Beispiel gibt es 577 Männer, also ist es der erste beim Sex und 314 Frauen, also der zweite beim Sex.

trans = dl.RankedCountEncoding()
trans.fit_transform(X)

image.png

Männer und Frauen werden durch 1 bzw. 2 ersetzt. Wenn Sie den Namen überprüfen, können Sie auch feststellen, dass die Anzahl der Vorkommen 1 beträgt, diese jedoch mit unterschiedlichen Nummern codiert sind. Selbst wenn die Anzahl der Vorkommen gleich ist, wird sie nach dem Ranking mithilfe des Index codiert. Wenn sich die Kategorie also unterscheidet, können Sie sie jederzeit durch eine andere Zahl ersetzen.

FrequencyEncoding CountEncoding codiert nach der Anzahl der Vorkommen, FrequencyEncoding jedoch nach der Häufigkeit des Auftretens. Es ist einfach zu handhaben, da das Ergebnis automatisch zwischen 0 und 1 liegt.

Zum Beispiel wird in Sex 577 / (577 + 314) für Männer mit 0,647 ... und Frauen mit 314 / (577 + 314) mit 0,352 ... codiert.

trans = dl.FrequencyEncoding()
trans.fit_transform(X)

image.png

Wie bei CountEncoding bleibt die Eigenschaft erhalten, dass Kategorien mit derselben Anzahl von Vorkommen nicht unterschieden werden können, aber der Punkt, an dem sie für Ausreißer anfällig sind, wurde verbessert. RankedFrequencyEncoding ist nicht vorbereitet, da es das gleiche Ergebnis wie RankedCountEncoding liefert.

TargetMeanEncoding Obwohl der Name in Kaggle usw. berühmt wurde, ist die Idee selbst die Grundlage der Datenanalyse. Insbesondere wird die kategoriale Variable durch den Durchschnittswert der Zielvariablen für jede Kategorie ersetzt.

Da die Zielvariable das Leben und der Tod von Passagieren ist, beispielsweise beim Geschlecht, wird sie durch die Überlebensrate nach Geschlecht ersetzt. Da jedoch die Information des vorherzusagenden Ziels, die der Durchschnitt der Zielvariablen ist, verwendet wird, entspricht der codierte Wert der Zielvariablen, wenn die Anzahl der Daten klein ist, und es tritt leicht ein Leck auf. Bei der Implementierung von DataLiner wird wie bei Bayes der Durchschnitt aller objektiven Variablen als Vorwahrscheinlichkeit für jede Kategorie verwendet, und die Konvertierung wird mit der Anzahl der Daten gewichtet.

trans = dl.TargetMeanEncoding()
trans.fit_transform(X, y)

image.png

RankedTargetMeanEncoding Es ordnet die Ergebnisse von TargetMeanEncoding und ersetzt sie in dieser Reihenfolge. Wenn beispielsweise die Überlebensrate für Frauen 1 und für Männer 2 beträgt, ersetzen Sie sie durch 1 für Frauen und 2 für Männer. Wenn bei der mittleren Zielcodierung, die die Vorwahrscheinlichkeit verwendet, die Anzahl bestimmter Kategorien im Vergleich zur Gesamtzahl der Daten gering ist, wird sie trotz unterschiedlicher Kategorien mit nahezu ähnlichen (= nahezu vorwahrscheinlichen) Zahlen codiert. RankedTargetMeanEncoding codiert sie als deutlich unterschiedlich.

trans = dl.RankedTargetMeanEncoding()
trans.fit_transform(X, y)

image.png

abschließend

Dieses Mal habe ich die Codierungselemente von DataLiner vorgestellt. Als nächstes möchte ich das Konvertierungssystem vorstellen.

Artikel zur Veröffentlichung des Dataliner: https://qiita.com/shallowdf20/items/36727c9a18f5be365b37 GitHub: https://github.com/shallowdf20/dataliner PyPI: https://pypi.org/project/dataliner/

Recommended Posts

Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Encoding) zu verarbeiten.
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner zu verarbeiten (Konvertierung).
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Drop) zu verarbeiten.
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Versuchen Sie, den Boden durch Rekursion herauszufordern
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Versuchen Sie, die Datentabelle von Azure SQL Server mit pyodbc zu extrahieren
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Generieren Sie einen Fehlerkorrekturcode, um die Datenbeschädigung mit der zfec-Bibliothek wiederherzustellen
Versuchen Sie, den kürzesten Weg mit Python + NetworkX + Social Data zu lösen
Versuchen Sie, Facebook mit Python zu betreiben
Umgang mit unausgeglichenen Daten
Versuchen Sie, sich mit ONNX Runtime zu profilieren
Aufblasen von Daten (Datenerweiterung) mit PyTorch
Verarbeiten Sie Pubmed .xml-Daten mit Python
Versuchen Sie, Audio mit M5 STACK auszugeben
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Versuchen Sie, Farbfilme mit Python zu reproduzieren
SIGNATE Quest ① Vom Lesen der Daten bis zur Vorverarbeitung
Versuchen Sie, sich mit Python bei qiita anzumelden
Bildklassifizierung mit Keras-Von der Vorverarbeitung zum Klassifizierungstest-
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Überprüfen Sie die Rohdaten mit Kaggles Titanic (kaggle ⑥)
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Konvertieren Sie Excel-Daten mit Python in JSON
Senden Sie Daten mit Vue.js an die DRF-API
Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Erster Versuch von YDK mit Cisco IOS-XE
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Wie man Problemdaten mit Paiza liest
Verarbeiten Sie Big Data mit Dataflow (ApacheBeam) + Python3
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -