Ich möchte verschiedene DataLiner ausprobieren, eine Bibliothek, die problemlos Datenvorverarbeitung mit Titanic-Daten durchführen kann, die auch für Kaggle bekannt ist. (Daten: https://www.kaggle.com/c/titanic/data) Übrigens wurden einige Funktionen aus den Titanic-Daten von Kaggle gelöscht, und wenn man sich die Daten hier ansieht, scheint es einige andere Funktionen zu geben. (Daten: https://www.openml.org/d/40945)
Lass es uns jetzt machen. Dieses Mal werden wir die DropXX-Serie vorstellen. Abschließend werde ich auch die Verarbeitung mit Pipeline vorstellen.
! pip install -U dataliner
Laden Sie zuerst train.csv.
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]
Die gelesenen Zugdaten sehen so aus.
DropColumns Löscht einfach die angegebene Spalte. Zum Beispiel ist PassengerId, die eine Passagiernummer darstellt, bei der Modellierung nicht sehr nützlich. Löschen Sie sie daher.
trans = dl.DropColumns('PassengerId')
trans.fit_transform(X)
Die PassengerId wurde entfernt. Es ist auch möglich, eine Liste zu übergeben und mehrere gleichzeitig zu löschen.
Sie können beispielsweise Zugdaten und Testdaten kombinieren und diese normalerweise mit df.drop löschen. Die oben beschriebene Methode verringert jedoch die Wahrscheinlichkeit von Fehlern und macht deutlich, was Sie tun. Beispielsweise kann es wie folgt auf Testdaten angewendet werden.
X_test = pd.read_csv('test.csv')
trans.transform(X_test)
Darüber hinaus wird es, wie später beschrieben wird, durch die Kombination mit der Scikit-Learn-Pipeline möglich sein, den Fluss der Datenvorverarbeitung und des Merkmalsmengen-Engineerings effizient und abstrakt zusammenzustellen.
DropNoVariance Entfernen Sie Features, die keine Verteilung haben und nur einen einzigen Wert in der Spalte haben. Titanic-Daten verfügen nicht über solche Funktionen. Erstellen wir sie also zuerst.
X['Test_Feature'] = 1
Wenden wir nun DropNoVariance an.
trans = dl.DropNoVariance()
trans.fit_transform(X)
Und so weiter. Es kann sowohl für numerische Spalten als auch für Kategoriespalten verwendet werden. Wenn mehrere Spalten vorhanden sind, löschen Sie alle.
DropHighCardinality Löschen Sie Spalten mit einer sehr großen Anzahl von Kategorien. Wenn es zu viele Kategorien gibt, ist es schwierig, sie richtig zu codieren, und es ist schwierig, etwas zu tun. Daher ist es auch eine gute Idee, sie schnell zu löschen, um in der ersten Aktion einen Durchgang zu bestehen. (In Kaggle usw. werden wir die Kardinalität verringern, indem wir Informationen daraus extrahieren und gruppieren.)
trans = dl.DropHighCardinality()
trans.fit_transform(X)
Wenn Sie möchten, können Sie auch sehen, welche Spalten wie folgt gelöscht wurden:
trans.drop_columns
array(['Name', 'Ticket', 'Cabin'], dtype='<U6')
Sie können sehen, dass die Funktionen mit einer sehr großen Anzahl von Kategorien gelöscht wurden.
DropLowAUC Führt eine logistische Regression eines einzelnen Features und der Zielvariablen durch, wodurch Features entfernt werden, deren AUC unter einem bestimmten Schwellenwert liegt. Es kann zur Auswahl der Merkmalsmenge verwendet werden. Bei kategorialen Variablen wird eine logistische Regression durchgeführt, nachdem sie intern zu Dummy-Variablen gemacht wurden. Normalerweise wird ungefähr 0,55 empfohlen, aber dieses Mal werden wir aus Gründen der Klarheit einen höheren Schwellenwert festlegen.
trans = dl.DropLowAUC(threshold=0.65)
trans.fit_transform(X, y)
Alles, was bleibt, sind Klasse, Geschlecht und Tarif, von denen bekannt ist, dass sie eine starke Korrelation mit der Zielvariablen in den Titanic-Daten aufweisen. Es ist effektiv, es zu verwenden, nachdem die Anzahl der Dimensionen explodiert ist, indem OneHotEncoding usw. ausgeführt wird.
DropHighCorrelation Basierend auf dem Pearson-Korrelationskoeffizienten werden Merkmale mit hoher Korrelation identifiziert, und dann bleiben nur die Merkmale mit höherer Korrelation mit der Zielvariablen übrig und die anderen werden gelöscht. Selbst wenn es mehrere Funktionen mit genau demselben Inhalt gibt, werden sie gleichzeitig gelöscht. Zum Boosten von Bäumen usw. ist es ziemlich gut, ohne sich darüber Gedanken zu machen, aber wenn Sie eine lineare Regression usw. durchführen, sollte es gelöscht werden, auch wenn es reguliert ist.
trans = dl.DropHighCorrelation(threshold=0.5)
trans.fit_transform(X, y)
Der Tarif wurde gelöscht.
Dies ist der größte Vorteil der Vorverarbeitung mit dieser Methode. Verarbeiten wir die 5 diesmal eingeführten Drop-Typen mit einer Pipeline.
from sklearn.pipeline import make_pipeline
process = make_pipeline(
dl.DropColumns('PassengerId'),
dl.DropNoVariance(),
dl.DropHighCardinality(),
dl.DropLowAUC(threshold=0.65),
dl.DropHighCorrelation(),
)
process.fit_transform(X, y)
Alle oben eingeführten Prozesse wurden durchgeführt und das Ergebnis ist wie folgt.
Wenden wir dies auf die Testdaten an.
X_test = pd.read_csv('test.csv')
process.transform(X_test)
Ich konnte im Handumdrehen die gleiche Verarbeitung auf die Testdaten anwenden wie beim Lernen. Wenn Sie es danach als Pickle speichern, ist es perfekt für die nächste Verwendung oder Servicebereitstellung!
Diesmal habe ich also die Drop-Elemente von DataLiner vorgestellt. Als nächstes möchte ich das Codierungssystem 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/