Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy

„Anstatt sich auf den Code zu konzentrieren, sollten sich Unternehmen auf die Entwicklung systematischer Engineering-Praktiken konzentrieren, um Daten auf zuverlässige, effiziente und systematische Weise zu verbessern. Mit anderen Worten, Unternehmen müssen von einem modellzentrierten Ansatz zu einem datenzentrierten Ansatz übergehen.“ – Andreas Ng

Ein datenzentrierter KI-Ansatz beinhaltet den Aufbau von KI-Systemen mit Qualitätsdaten, einschließlich Datenaufbereitung und Feature-Engineering. Dies kann eine langwierige Aufgabe sein, die das Sammeln, Auffinden, Profilieren, Bereinigen, Strukturieren, Transformieren, Anreichern, Validieren und sichere Speichern der Daten umfasst.

Amazon SageMaker Data Wrangler ist ein Dienst in Amazon SageMaker-Studio Das bietet eine End-to-End-Lösung zum Importieren, Vorbereiten, Transformieren, Featuren und Analysieren von Daten mit wenig bis gar keiner Codierung. Sie können einen Data Wrangler-Datenvorbereitungsablauf in Ihre Arbeitsabläufe für maschinelles Lernen (ML) integrieren, um die Datenvorverarbeitung und das Feature-Engineering zu vereinfachen und die Datenvorbereitung schneller in die Produktion zu bringen, ohne PySpark-Code erstellen, Apache Spark installieren oder Cluster einrichten zu müssen.

Für Szenarien, in denen Sie Ihre eigenen benutzerdefinierten Skripts für Datentransformationen hinzufügen müssen, können Sie Ihre Transformationslogik in Pandas, PySpark, PySpark SQL schreiben. Data Wrangler unterstützt jetzt NLTK- und SciPy-Bibliotheken zum Erstellen benutzerdefinierter Transformationen, um Textdaten für ML vorzubereiten und eine Beschränkungsoptimierung durchzuführen.

Möglicherweise stoßen Sie auf Szenarien, in denen Sie Ihre eigenen benutzerdefinierten Skripts für die Datentransformation hinzufügen müssen. Mit der benutzerdefinierten Transformationsfunktion von Data Wrangler können Sie Ihre Transformationslogik in Pandas, PySpark, PySpark SQL schreiben.

In diesem Beitrag erörtern wir, wie Sie Ihre benutzerdefinierte Transformation in NLTK schreiben können, um Textdaten für ML vorzubereiten. Wir werden auch einige Beispiele für benutzerdefinierte Codetransformationen mit anderen gängigen Frameworks wie NLTK, NumPy, SciPy und scikit-learn sowie AWS AI Services vorstellen. Für diese Übung verwenden wir die Titanic-Datensatz, ein beliebter Datensatz in der ML-Community, der jetzt als Beispieldatensatz innerhalb von Data Wrangler.

Lösungsüberblick

Data Wrangler bietet über 40 integrierte Konnektoren zum Importieren von Daten. Nachdem die Daten importiert wurden, können Sie Ihre Datenanalyse und -transformationen mit über 300 integrierten Transformationen erstellen. Anschließend können Sie industrialisierte Pipelines generieren, an die die Features übertragen werden Amazon Simple Storage-Service (Amazon S3) oder Amazon SageMaker Feature Store. Das folgende Diagramm zeigt die End-to-End-High-Level-Architektur.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Voraussetzungen:

Data Wrangler ist eine in SageMaker verfügbare Funktion Amazon SageMaker-Studio. Du kannst Folgen den Studio-Onboarding-Prozess um die Studio-Umgebung und Notebooks hochzufahren. Obwohl Sie aus einigen wenigen Authentifizierungsmethoden auswählen können, ist die einfachste Methode zum Erstellen einer Studio-Domain, die zu befolgen Schnellstartanweisungen. Der Schnellstart verwendet die gleichen Standardeinstellungen wie das Standard-Studio-Setup. Sie können sich auch für das Onboarding mit entscheiden AWS IAM Identity Center (Nachfolger von AWS Single Sign-On) zur Authentifizierung (vgl Integrieren in die Amazon SageMaker-Domäne mithilfe von IAM Identity Center).

Importieren Sie den Titanic-Datensatz

Starten Sie Ihre Studio-Umgebung und erstellen Sie eine neue Data Wrangler-Fluss. Sie können entweder Ihren eigenen Datensatz importieren oder einen Beispieldatensatz (Titanic) verwenden, wie im folgenden Screenshot gezeigt. Mit Data Wrangler können Sie Datensätze aus verschiedenen Datenquellen importieren. Für unseren Anwendungsfall importieren wir den Beispieldatensatz aus einem S3-Bucket.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Nach dem Import sehen Sie zwei Knoten (den Quellknoten und den Datentypknoten) im Datenfluss. Data Wrangler identifiziert automatisch den Datentyp für alle Spalten im Datensatz.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Benutzerdefinierte Transformationen mit NLTK

Für die Datenvorbereitung und das Feature-Engineering mit Data Wrangler können Sie über 300 integrierte Transformationen verwenden oder Ihre eigenen benutzerdefinierten Transformationen erstellen. Benutzerdefinierte Transformationen können in Data Wrangler als separate Schritte geschrieben werden. Sie werden Teil der .flow-Datei in Data Wrangler. Die benutzerdefinierte Transformationsfunktion unterstützt Python, PySpark und SQL als unterschiedliche Schritte in Codeausschnitten. Nachdem Notebook-Dateien (.ipynb) aus der .flow-Datei generiert oder die .flow-Datei als Rezepte verwendet wurde, bleiben die benutzerdefinierten Transformationscode-Snippets bestehen, ohne dass Änderungen erforderlich sind. Dieses Design von Data Wrangler ermöglicht es, dass benutzerdefinierte Transformationen Teil eines SageMaker-Verarbeitungsjobs werden, um riesige Datensätze mit benutzerdefinierten Transformationen zu verarbeiten.

Der Titanic-Datensatz hat einige Features (name und home.dest), die Textinformationen enthalten. Wir gebrauchen NLTK um die Namensspalte aufzuteilen und den Nachnamen zu extrahieren und die Häufigkeit der Nachnamen auszugeben. NLTK ist eine führende Plattform zum Erstellen von Python-Programmen für die Arbeit mit Daten in menschlicher Sprache. Es bietet einfach zu bedienende Schnittstellen zu über 50 Korpora und lexikalische Ressourcen wie WordNet, zusammen mit einer Reihe von Textverarbeitungsbibliotheken für Klassifizierung, Tokenisierung, Stemming, Tagging, Parsing und semantische Argumentation sowie Wrapper für industrietaugliche Bibliotheken zur Verarbeitung natürlicher Sprache (NLP).

Führen Sie die folgenden Schritte aus, um eine neue Transformation hinzuzufügen:

  1. Wählen Sie das Pluszeichen und wählen Sie aus Transformation hinzufügen.
  2. Auswählen Schritt hinzufügen und wählen Sie Benutzerdefinierte Transformation.

Sie können eine benutzerdefinierte Transformation mit Pandas, PySpark, benutzerdefinierten Python-Funktionen und SQL PySpark erstellen.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

  1. Auswählen Python (Pandas) und fügen Sie den folgenden Code hinzu, um den Nachnamen aus der Namensspalte zu extrahieren:
    import nltk
    nltk.download('punkt')
    tokens = [nltk.word_tokenize(name) for name in df['Name']] # Extract the last names of the passengers
    df['last_name'] = [token[0] for token in tokens]

  2. Auswählen Vorspann um die Ergebnisse zu überprüfen.

Der folgende Screenshot zeigt die last_name Spalte extrahiert.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

  1. Fügen Sie einen weiteren benutzerdefinierten Transformationsschritt hinzu, um die Häufigkeitsverteilung der Nachnamen zu identifizieren, indem Sie den folgenden Code verwenden:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. Auswählen Vorspann um die Ergebnisse der Frequenz zu überprüfen.Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Benutzerdefinierte Transformationen mit AWS AI-Services

Vortrainierte AWS-KI-Services bieten vorgefertigte Intelligenz für Ihre Anwendungen und Workflows. AWS AI-Services lassen sich einfach in Ihre Anwendungen integrieren, um viele gängige Anwendungsfälle abzudecken. Sie können jetzt die Funktionen für AWS AI-Services als benutzerdefinierten Transformationsschritt in Data Wrangler verwenden.

Amazon verstehen verwendet NLP, um Einblicke in den Inhalt von Dokumenten zu gewinnen. Es entwickelt Erkenntnisse, indem es die Entitäten, Schlüsselphrasen, Sprache, Stimmungen und andere gemeinsame Elemente in einem Dokument erkennt.

Wir verwenden Amazon Comprehend, um die Entitäten aus der Namensspalte zu extrahieren. Führen Sie die folgenden Schritte aus:

  1. Fügen Sie einen benutzerdefinierten Transformationsschritt hinzu.
  2. Auswählen Python (Pandas).
  3. Geben Sie den folgenden Code ein, um die Entitäten zu extrahieren:
    import boto3
    comprehend = boto3.client("comprehend") response = comprehend.detect_entities(LanguageCode = 'en', Text = df['name'].iloc[0]) for entity in response['Entities']:
    print(entity['Type'] + ":" + entity["Text"])

  4. Auswählen Vorspann und die Ergebnisse visualisieren.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Wir haben jetzt drei benutzerdefinierte Transformationen in Data Wrangler hinzugefügt.

  1. Auswählen Datenfluss um den End-to-End-Datenfluss zu visualisieren.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Benutzerdefinierte Transformationen mit NumPy und SciPy

NumPy ist eine Open-Source-Bibliothek für Python, die umfassende mathematische Funktionen, Zufallszahlengeneratoren, lineare Algebra-Routinen, Fourier-Transformationen und mehr bietet. SciPy ist eine Open-Source-Python-Bibliothek, die für wissenschaftliches Rechnen und technisches Rechnen verwendet wird und Module für Optimierung, lineare Algebra, Integration, Interpolation, Spezialfunktionen, schnelle Fourier-Transformation (FFT), Signal- und Bildverarbeitung, Solver und mehr enthält.

Mit benutzerdefinierten Data Wrangler-Transformationen können Sie Python, PySpark und SQL als unterschiedliche Schritte kombinieren. Im folgenden Data Wrangler-Flow werden verschiedene Funktionen aus Python-Paketen, NumPy und SciPy in mehreren Schritten auf das Titanic-Dataset angewendet.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

NumPy-Transformationen

Die Tarifspalte des Titanic-Datensatzes enthält die Einstiegspreise verschiedener Passagiere. Das Histogramm der Fahrpreisspalte zeigt bis auf den letzten Bin eine gleichmäßige Verteilung. Durch Anwenden von NumPy-Transformationen wie Log oder Quadratwurzel können wir die Verteilung ändern (wie durch die Quadratwurzeltransformation gezeigt).

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai. Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Siehe folgenden Code:

import pandas as pd
import numpy as np
df["fare_log"] = np.log(df["fare_interpolate"])
df["fare_sqrt"] = np.sqrt(df["fare_interpolate"])
df["fare_cbrt"] = np.cbrt(df["fare_interpolate"])

SciPy-Transformationen

SciPy-Funktionen wie z-score werden als Teil der benutzerdefinierten Transformation angewendet, um die Fahrpreisverteilung mit Mittelwert und Standardabweichung zu standardisieren.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Siehe folgenden Code:

df["fare_zscore"] = zscore(df["fare_interpolate"])
from scipy.stats import zscore

Constraint-Optimierung mit NumPy und SciPy

Benutzerdefinierte Transformationen von Data Wrangler können erweiterte Transformationen wie Constraint-Optimierung durch Anwendung von SciPy-Optimierungsfunktionen und Kombinieren von SciPy mit NumPy verarbeiten. Im folgenden Beispiel zeigt der Fahrpreis als Funktion des Alters keinen erkennbaren Trend. Die Beschränkungsoptimierung kann jedoch den Fahrpreis als Funktion des Alters transformieren. Die Nebenbedingung in diesem Fall ist, dass der neue Gesamtfahrpreis gleich dem alten Gesamtfahrpreis bleibt. Mit benutzerdefinierten Data Wrangler-Transformationen können Sie die SciPy-Optimierungsfunktion ausführen, um den optimalen Koeffizienten zu bestimmen, der den Fahrpreis als Funktion des Alters unter eingeschränkten Bedingungen transformieren kann.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai. Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Optimierungsdefinition, Zieldefinition und mehrere Einschränkungen können als unterschiedliche Funktionen erwähnt werden, während die Einschränkungsoptimierung in einer benutzerdefinierten Data Wrangler-Transformation mit SciPy und NumPy formuliert wird. Benutzerdefinierte Transformationen können auch verschiedene Solver-Methoden einbringen, die als Teil des SciPy-Optimierungspakets verfügbar sind. Eine neue transformierte Variable kann generiert werden, indem der optimale Koeffizient mit der ursprünglichen Spalte multipliziert und zu vorhandenen Spalten von Data Wrangler hinzugefügt wird. Siehe folgenden Code:

import numpy as np
import scipy.optimize as opt
import pandas as pd df2 = pd.DataFrame({"Y":df["fare_interpolate"], "X1":df["age_interpolate"]}) # optimization defination
def main(df2):
x0 = [0.1]
res = opt.minimize(fun=obj, x0=x0, args=(df2), method="SLSQP", bounds=[(0,50)], constraints=cons)
return res # objective function
def obj(x0, df2):
sumSquares = np.sum(df2["Y"] - x0*df2["X1"])
return sumSquares # constraints
def constraint1(x0):
sum_cons1 = np.sum(df2["Y"] - x0*df2["X1"]) - 0
return sum_cons1
con1 = {'type': 'eq', 'fun': constraint1}
cons = ([con1]) print(main(df2)) df["new_fare_age_optimized"]=main(df2).x*df2["X1"]

Die benutzerdefinierte Transformationsfunktion von Data Wrangler verfügt über die UI-Fähigkeit, die Ergebnisse von SciPy-Optimierungsfunktionen wie den Wert des optimalen Koeffizienten (oder mehrere Koeffizienten) anzuzeigen.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Benutzerdefinierte Transformationen mit scikit-learn

scikit-lernen ist ein Python-Modul für maschinelles Lernen, das auf SciPy aufbaut. Es ist eine Open-Source-ML-Bibliothek, die überwachtes und nicht überwachtes Lernen unterstützt. Es bietet auch verschiedene Tools für die Modellanpassung, Datenvorverarbeitung, Modellauswahl, Modellbewertung und viele andere Dienstprogramme.

Diskretisierung

Diskretisierung (auch bekannt als Quantisierung or Klasseneinteilung) bietet eine Möglichkeit, kontinuierliche Merkmale in diskrete Werte zu unterteilen. Bestimmte Datensätze mit kontinuierlichen Merkmalen können von einer Diskretisierung profitieren, da die Diskretisierung den Datensatz mit kontinuierlichen Attributen in einen Datensatz mit nur nominellen Attributen umwandeln kann. One-hot-codierte diskretisierte Merkmale können ein Modell ausdrucksstärker machen, während die Interpretierbarkeit erhalten bleibt. Beispielsweise kann die Vorverarbeitung mit einem Diskretisierer Nichtlinearität in lineare Modelle einführen.

Im folgenden Code verwenden wir KBinsDiscretizer um die Altersspalte in 10 Bins zu diskretisieren:

# Table is available as variable `df`
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np
# discretization transform the raw data
df = df.dropna()
kbins = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
ages = np.array(df["age"]).reshape(-1, 1)
df["age"] = kbins.fit_transform(ages)
print(kbins.bin_edges_)

Sie können die Behälterkanten im folgenden Screenshot sehen.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

One-Hot-Codierung

Werte in den Spalten Eingebettet sind kategoriale Werte. Daher müssen wir diese Zeichenfolgen als numerische Werte darstellen, um unsere Klassifizierung mit unserem Modell durchzuführen. Wir könnten dies auch mit einer One-Hot-Codierungstransformation tun.

Es gibt drei Werte für Eingeschifft: S, C und Q. Wir stellen diese mit Zahlen dar. Siehe folgenden Code:

# Table is available as variable `df`
from sklearn.preprocessing import LabelEncoder le_embarked = LabelEncoder()
le_embarked.fit(df["embarked"]) encoded_embarked_training = le_embarked.transform(df["embarked"])
df["embarked"] = encoded_embarked_training

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Aufräumen

Wenn Sie Data Wrangler nicht verwenden, ist es wichtig, die Instanz, auf der es ausgeführt wird, herunterzufahren, um zusätzliche Gebühren zu vermeiden.

Data Wrangler speichert Ihren Datenfluss automatisch alle 60 Sekunden. Um zu vermeiden, dass Arbeit verloren geht, speichern Sie Ihren Datenfluss, bevor Sie Data Wrangler herunterfahren.

  1. Um Ihren Datenfluss in Studio zu speichern, wählen Sie Reichen Sie das, Dann wählen Data Wrangler-Flow speichern Save.
  2. Um die Data Wrangler-Instanz herunterzufahren, wählen Sie in Studio Ausführen von Instanzen und Kernels.
  3. Der LAUFENDE APPS, wählen Sie das Symbol zum Herunterfahren neben der App sagemaker-data-wrangler-1.0.
  4. Auswählen Alles schließen zu bestätigen.

Data Wrangler wird auf einer ml.m5.4xlarge-Instanz ausgeführt. Diese Instanz verschwindet aus LAUFENDE INSTANZEN wenn Sie die Data Wrangler-App schließen.

Nachdem Sie die Data Wrangler-App heruntergefahren haben, muss sie beim nächsten Öffnen einer Data Wrangler-Flussdatei neu gestartet werden. Das kann ein Paar Minuten dauern.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie benutzerdefinierte Transformationen in Data Wrangler verwenden können. Wir haben die Bibliotheken und das Framework im Data Wrangler-Container verwendet, um die integrierten Datentransformationsfunktionen zu erweitern. Die Beispiele in diesem Beitrag stellen eine Teilmenge der verwendeten Frameworks dar. Die Transformationen im Data Wrangler-Fluss können jetzt in eine Pipeline für DataOps skaliert werden.

Weitere Informationen zur Verwendung von Datenflüssen mit Data Wrangler finden Sie unter Erstellen und verwenden Sie einen Data Wrangler-Flow und Amazon SageMaker Preise. Informationen zu den ersten Schritten mit Data Wrangler finden Sie unter Vorbereiten von ML-Daten mit Amazon SageMaker Data Wrangler. Um mehr über Autopilot und AutoML auf SageMaker zu erfahren, besuchen Sie Automatisieren Sie die Modellentwicklung mit Amazon SageMaker Autopilot.


Über die Autoren

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Meenakshisundaram Thandavarayan ist Senior AI/ML-Spezialist bei AWS. Er hilft strategischen High-Tech-Accounts auf ihrer KI- und ML-Reise. Er interessiert sich sehr für datengetriebene KI.

 Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Sovik Kumar Nath ist AI/ML-Lösungsarchitekt bei AWS. Er verfügt über umfangreiche Erfahrung in End-to-End-Designs und Lösungen für maschinelles Lernen; Geschäftsanalysen im Rahmen von Finanz-, Betriebs- und Marketinganalysen; Gesundheitspflege; Lieferkette; und IoT. Außerhalb der Arbeit reist Sovik gerne und schaut sich Filme an.

Erstellen benutzerdefinierter Transformationen in Amazon SageMaker Data Wrangler mit NLTK und SciPy PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Abigail ist Softwareentwicklungsingenieur bei Amazon SageMaker. Sie hilft Kunden leidenschaftlich gerne dabei, ihre Daten in DataWrangler aufzubereiten und verteilte Systeme für maschinelles Lernen aufzubauen. In ihrer Freizeit reist Abigail gerne, wandert, fährt Ski und backt.

Zeitstempel:

Mehr von AWS Maschinelles Lernen