Ich habe DataLiner erstellt, eine Datenvorverarbeitungsbibliothek für maschinelles Lernen.
Bei der Durchführung der Modellierung des maschinellen Lernens wird die im Teil Datenverarbeitung / Merkmalsmengenentwicklung verwendete Verarbeitung als Vorverarbeitungsliste zusammengefasst. Da es dem Scikit-Learn-Transformator entspricht, kann es von selbst fit_transformiert oder in die Pipeline gegossen werden. Da es Funktionen und Vorverarbeitung gibt, die noch nicht vollständig gepackt sind, werden wir sie in Zukunft regelmäßig aktualisieren. Es wäre jedoch ermutigend, wenn Sie uns andere Fehlerberichte, FIX, neue Funktionen, neue Pull-Anforderungen für die Vorverarbeitung usw. geben könnten.
GitHub: https://github.com/shallowdf20/dataliner PyPI: https://pypi.org/project/dataliner/ Document: https://shallowdf20.github.io/dataliner/preprocessing.html
Mit pip installieren. Wenn Sie eine Python-Umgebung mit Anaconda erstellen, versuchen Sie, den folgenden Code mit Anaconda Prompt auszuführen.
! pip install -U dataliner
Nehmen wir als Beispiel die Datensätze der Titanic, die jeder liebt. Beachten Sie, dass X pandas.DataFrame und y pandas.Series sein muss und ein Fehler ausgegeben wird, wenn die Datentypen unterschiedlich sind. Bereiten Sie nun die zu verarbeitenden Daten 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]
Vertraute Daten wie diese werden in X gespeichert.
Dann werde ich es sofort verwenden. Versuchen Sie zunächst, Drop High Cardinality zu verwenden, wodurch Features mit zu vielen Kategorien automatisch gelöscht werden.
dhc = dl.DropHighCardinality()
dhc.fit_transform(X)
Sie können sehen, dass Funktionen mit einer großen Anzahl von Kategorien wie Name und Ticket gelöscht wurden. Abgesehen davon denke ich, dass im Fall der Titanic Informationen aus diesen Spalten verdreht werden, um die Genauigkeit zu verbessern.
Versuchen wir als nächstes die bekannte Zielcodierung. Es ist eine Version, die mit dem Durchschnitt von y als Vorwahrscheinlichkeit geglättet wird.
tme = dl.TargetMeanEncoding()
tme.fit_transform(X, y)
Es erkannte automatisch die Spalten der kategorialen Variablen und codierte jede Kategorie unter Verwendung der Zielvariablen.
Ich denke auch, dass viele Datenwissenschaftler Pipeline aus Effizienzgründen nutzen. Natürlich kann jede DataLiner-Klasse auf die gleiche Weise verwendet werden.
from sklearn.pipeline import make_pipeline
process = make_pipeline(
dl.DropNoVariance(),
dl.DropHighCardinality(),
dl.BinarizeNaN(),
dl.ImputeNaN(),
dl.OneHotEncoding(),
dl.DropHighCorrelation(),
dl.StandardScaling(),
dl.DropLowAUC(),
)
process.fit_transform(X, y)
Infolge verschiedener Verarbeitungen wurde es so.
In Titanic gibt es Daten namens test.csv, die im Voraus zur Auswertung bereitgestellt werden. Lesen Sie sie also und wenden Sie denselben Prozess an.
X_test = pd.read_csv('test.csv')
process.transform(X_test)
Das ist es.
Im Moment ist es wie folgt. Wir möchten die Funktionen und Prozesse in zukünftigen Updates erweitern.
** 5/3 Nachschrift: ** Ich habe für jede Klasse einen Einführungsartikel geschrieben. Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Drop) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Encoding) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Konvertierung) zu verarbeiten Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Anhängen) zu verarbeiten
** BinarizeNaN ** - Suchen Sie eine Spalte mit fehlenden Werten und erstellen Sie eine neue Funktion, die Sie darüber informiert, ob die Spalte fehlte ** ClipData ** - Trennen Sie numerische Daten mit dem q-Perzentil und ersetzen Sie Werte über und unter der Obergrenze durch Ober- und Untergrenze. ** CountRowNaN ** - Erstellt den Gesamtwert fehlender Werte in Zeilenrichtung der einzelnen Daten als neue Feature-Menge. ** DropColumns ** - Löscht angegebene Spalten ** DropHighCardinality ** - Löschen Sie Spalten mit einer großen Anzahl von Kategorien ** DropHighCorrelation ** - Entfernt Features, deren Pearson-Korrelationskoeffizient den Schwellenwert überschreitet. Beim Löschen bleiben Features übrig, die stärker mit der Zielvariablen korrelieren. ** DropLowAUC ** - Für alle Features wird für jedes Feature eine logistische Regression mit y als Zielvariable durchgeführt, und Features, deren AUC unter dem Schwellenwert liegt, werden gelöscht. ** DropNoVariance ** - Löscht Funktionen, die nur einen Datentyp enthalten. ** GroupRareCategory ** - Gruppiert die weniger häufig vorkommenden Kategorien in der Kategoriespalte. ** ImputeNaN ** - Ergänzt fehlende Werte. Standardmäßig werden numerische Daten durch Durchschnittswerte und kategoriale Variablen durch die häufigsten Werte ergänzt. ** OneHotEncoding ** - Machen Sie kategoriale Variablen Dummy. ** TargetMeanEncoding ** - Ersetzt jede Kategorie von kategorialen Variablen durch einen geglätteten Mittelwert der Zielvariablen. ** StandardScaling ** - Konvertiert numerische Daten so, dass sie einen Durchschnitt von 0 und eine Verteilung von 1 haben. ** MinMaxScaling ** - Skaliert numerische Daten von 0 auf 1 ** CountEncoding ** - Ersetzt Kategoriewerte durch die Anzahl der Vorkommen ** RankedCountEncoding ** --Erstellen Sie ein Ranking basierend auf der Anzahl der Vorkommen des Kategoriewerts und ersetzen Sie es durch dieses Ranking. Dies ist effektiv, wenn mehrere Kategorien gleich oft angezeigt werden. ** FrequencyEncoding ** - Ersetzt Kategoriewerte nach Häufigkeit des Auftretens. Die Ranking-Version ist mit RankedCountEncoding identisch, daher ist sie nicht verfügbar. ** RankedTargetMeanEncoding ** - Dies ist eine Version, die ein Ranking erstellt, indem die Zielvariablen für jeden Kategoriewert gemittelt und durch dieses Ranking ersetzt werden. ** AppendAnomalyScore ** - Fügt eine Ausreißer-Punktzahl aus Isolation Forest als Feature-Menge hinzu ** AppendCluster ** - Führen Sie KMeans durch und fügen Sie den resultierenden Cluster als Feature-Menge hinzu. Datenskalierung empfohlen ** AppendClusterDistance ** - Führen Sie KMeans durch und fügen Sie den resultierenden Abstand zu jedem Cluster als Feature-Menge hinzu. Datenskalierung empfohlen ** AppendPrincipalComponent ** - Führen Sie eine Hauptkomponentenanalyse durch und fügen Sie die Hauptkomponente als Feature-Menge hinzu. Datenskalierung empfohlen ** AppendArithmeticFeatures ** - Führt vier Regeln für die in den Daten enthaltenen Features aus und fügt ein neues Feature mit einem höheren Bewertungsindex als die in der Berechnung verwendeten Features hinzu. (ver1.2.0) ** RankedEvaluationMetricEncoding ** - Nachdem Sie jede Kategorie zu einer Dummy-Variablen gemacht haben, führen Sie mit jeder Kategoriespalte und Zielvariablen eine logistische Regression durch. Erstellen Sie ein Ranking mit der resultierenden Metrik (standardmäßig AUC) und codieren Sie die ursprüngliche Kategorie mit diesem Ranking. (ver1.2.0) ** AppendClassificationModel ** - Trainiert den Klassifikator für die Eingabe und fügt die Bezeichnung oder Bewertung des Vorhersageergebnisses als Merkmalsgröße hinzu. (ver1.2.0) ** AppendEncoder ** - Fügt das Verarbeitungsergebnis jedes in DataLiner enthaltenen Encoders als Feature-Menge hinzu, anstatt es zu ersetzen. (ver1.2.0) ** AppendClusterTargetMean ** - Fügt die durchschnittliche Zielvariable in jedem Cluster nach dem Clustering als Feature-Menge hinzu. (ver1.2.0) ** PermutationImportanceTest ** - Die Auswahl der Funktionsmenge wird unter dem Gesichtspunkt durchgeführt, um wie viel sich der Bewertungsindex des Modellvorhersageergebnisses verschlechtert, wenn die Daten einer bestimmten Merkmalsmenge zufällig gemischt werden oder nicht. (ver1.2.0) ** UnionAppend ** --DataLiners Append 〇〇 -Klasse wird parallel statt seriell verarbeitet, und die Merkmale des Ausgabeergebnisses werden kombiniert und zu den ursprünglichen Merkmalen hinzugefügt. Klassen müssen in einer Liste angegeben werden. (ver1.3.1) ** load_titanic ** --Lädt titanische Daten. (ver1.3.1)
Ich habe die Prozesse zusammengefasst, die ich viele Male wiederholt habe, aber vielleicht haben andere Menschen ähnliche Bedürfnisse? Ich habe es öffentlich gemacht. Von den unzähligen Vorverarbeitungen hoffe ich, dass die wichtigsten eine zusammenhängende Bibliothek sein werden.
Wir warten wieder auf Fehlerberichte, FIXes, neue Funktionen und neue Pull-Anforderungen für die Verarbeitung! !!