Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy

“Invece di concentrarsi sul codice, le aziende dovrebbero concentrarsi sullo sviluppo di pratiche ingegneristiche sistematiche per migliorare i dati in modo affidabile, efficiente e sistematico. In altre parole, le aziende devono passare da un approccio incentrato sui modelli a un approccio incentrato sui dati". – Andrew Ng

Un approccio AI incentrato sui dati comporta la creazione di sistemi di intelligenza artificiale con dati di qualità che coinvolgono la preparazione dei dati e l'ingegnerizzazione delle funzionalità. Questo può essere un compito noioso che coinvolge la raccolta dei dati, la scoperta, la profilazione, la pulizia, la strutturazione, la trasformazione, l'arricchimento, la convalida e l'archiviazione sicura dei dati.

Gestore di dati di Amazon SageMaker è un servizio in Amazon Sage Maker Studio che fornisce una soluzione end-to-end per importare, preparare, trasformare, caratterizzare e analizzare i dati utilizzando poca o nessuna codifica. Puoi integrare un flusso di preparazione dei dati di Data Wrangler nei tuoi flussi di lavoro di machine learning (ML) per semplificare la pre-elaborazione dei dati e l'ingegnerizzazione delle funzionalità, portando la preparazione dei dati alla produzione più velocemente senza la necessità di creare codice PySpark, installare Apache Spark o avviare cluster.

Per gli scenari in cui è necessario aggiungere i propri script personalizzati per le trasformazioni dei dati, è possibile scrivere la logica di trasformazione in Pandas, PySpark, PySpark SQL. Data Wrangler ora supporta le librerie NLTK e SciPy per la creazione di trasformazioni personalizzate per preparare i dati di testo per ML ed eseguire l'ottimizzazione dei vincoli.

Potresti imbatterti in scenari in cui devi aggiungere i tuoi script personalizzati per la trasformazione dei dati. Con la funzionalità di trasformazione personalizzata di Data Wrangler, puoi scrivere la tua logica di trasformazione in Pandas, PySpark, PySpark SQL.

In questo post, discutiamo di come puoi scrivere la tua trasformazione personalizzata in NLTK per preparare i dati di testo per ML. Condivideremo anche alcuni esempi di trasformazione del codice personalizzato utilizzando altri framework comuni come NLTK, NumPy, SciPy e scikit-learn, nonché AWS AI Services. Per lo scopo di questo esercizio, utilizziamo il Set di dati Titanic, un set di dati popolare nella comunità ML, che ora è stato aggiunto come a set di dati di esempio all'interno di Data Wrangler.

Panoramica della soluzione

Data Wrangler fornisce oltre 40 connettori integrati per l'importazione dei dati. Dopo l'importazione dei dati, puoi creare l'analisi e le trasformazioni dei dati utilizzando oltre 300 trasformazioni integrate. È quindi possibile generare pipeline industrializzate a cui inviare le funzionalità Servizio di archiviazione semplice Amazon (Amazon S3) o Negozio di funzionalità Amazon SageMaker. Il diagramma seguente mostra l'architettura di alto livello end-to-end.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Prerequisiti

Data Wrangler è una funzionalità di SageMaker disponibile all'interno Amazon Sage Maker Studio. Puoi seguire il processo di onboarding di Studio per potenziare l'ambiente Studio e i notebook. Sebbene sia possibile scegliere tra alcuni metodi di autenticazione, il modo più semplice per creare un dominio di Studio è seguire il Istruzioni di avvio rapido. Il Quick start utilizza le stesse impostazioni predefinite della configurazione standard di Studio. Puoi anche scegliere di utilizzare l'onboarding Centro di identità AWS IAM (successore di AWS Single Sign-On) per l'autenticazione (vedi Integrazione nel dominio Amazon SageMaker utilizzando IAM Identity Center).

Importa il set di dati Titanic

Avvia il tuo ambiente Studio e creane uno nuovo Flusso di Data Wrangler. Puoi importare il tuo set di dati o utilizzare un set di dati di esempio (Titanic) come mostrato nello screenshot seguente. Data Wrangler ti consente di importare set di dati da diverse fonti di dati. Per il nostro caso d'uso, importiamo il set di dati di esempio da un bucket S3.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Una volta importato, vedrai due nodi (il nodo di origine e il nodo del tipo di dati) nel flusso di dati. Data Wrangler identifica automaticamente il tipo di dati per tutte le colonne nel set di dati.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasformazioni personalizzate con NLTK

Per la preparazione dei dati e l'ingegnerizzazione delle funzionalità con Data Wrangler, puoi utilizzare oltre 300 trasformazioni integrate o creare le tue trasformazioni personalizzate. Trasformazioni personalizzate possono essere scritti come passaggi separati all'interno di Data Wrangler. Diventano parte del file .flow all'interno di Data Wrangler. La funzione di trasformazione personalizzata supporta Python, PySpark e SQL come diversi passaggi nei frammenti di codice. Dopo che i file notebook (.ipynb) sono stati generati dal file .flow o il file .flow è stato utilizzato come ricette, i frammenti di codice di trasformazione personalizzati persistono senza richiedere alcuna modifica. Questa progettazione di Data Wrangler consente alle trasformazioni personalizzate di diventare parte di un processo di elaborazione SageMaker per l'elaborazione di enormi set di dati con trasformazioni personalizzate.

Il set di dati Titanic ha un paio di funzionalità (nome e home.dest) che contengono informazioni di testo. Noi usiamo NLTK per dividere la colonna del nome ed estrarre il cognome e stampare la frequenza dei cognomi. NLTK è una piattaforma leader per la creazione di programmi Python per lavorare con i dati del linguaggio umano. Fornisce interfacce facili da usare per oltre 50 corpora e risorse lessicali come WordNet, insieme a una suite di librerie di elaborazione del testo per classificazione, tokenizzazione, stemming, tagging, analisi e ragionamento semantico e wrapper per librerie di elaborazione del linguaggio naturale (NLP) di livello industriale.

Per aggiungere una nuova trasformazione, completare i seguenti passaggi:

  1. Scegli il segno più e scegli Aggiungi trasformazione.
  2. Scegli Aggiungi passaggio e scegli Trasformazione personalizzata.

Puoi creare una trasformazione personalizzata usando Pandas, PySpark, funzioni Python definite dall'utente e SQL PySpark.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

  1. Scegli Python (Panda) e aggiungi il seguente codice per estrarre il cognome dalla colonna del nome:
    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. Scegli Anteprima per esaminare i risultati.

La seguente schermata mostra il last_name colonna estratta.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

  1. Aggiungi un altro passaggio di trasformazione personalizzato per identificare la distribuzione di frequenza dei cognomi, utilizzando il seguente codice:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. Scegli Anteprima rivedere i risultati della frequenza.Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasformazioni personalizzate con i servizi AWS AI

I servizi di intelligenza artificiale preaddestrati di AWS forniscono informazioni già pronte per le tue applicazioni e i tuoi flussi di lavoro. I servizi AWS AI si integrano facilmente con le tue applicazioni per affrontare molti casi d'uso comuni. Ora puoi utilizzare le funzionalità per i servizi AWS AI come fase di trasformazione personalizzata in Data Wrangler.

Amazon Comprehend utilizza la PNL per estrarre informazioni sul contenuto dei documenti. Sviluppa intuizioni riconoscendo le entità, le frasi chiave, il linguaggio, i sentimenti e altri elementi comuni in un documento.

Utilizziamo Amazon Comprehend per estrarre le entità dalla colonna del nome. Completa i seguenti passaggi:

  1. Aggiungi un passaggio di trasformazione personalizzato.
  2. Scegli Python (Panda).
  3. Immettere il seguente codice per estrarre le entità:
    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. Scegli Anteprima e visualizzare i risultati.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Ora abbiamo aggiunto tre trasformazioni personalizzate in Data Wrangler.

  1. Scegli Flusso di dati per visualizzare il flusso di dati end-to-end.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasformazioni personalizzate con NumPy e SciPy

NumPy è una libreria open source per Python che offre funzioni matematiche complete, generatori di numeri casuali, routine di algebra lineare, trasformate di Fourier e altro ancora. SciPy è una libreria Python open source utilizzata per il calcolo scientifico e il calcolo tecnico, contenente moduli per ottimizzazione, algebra lineare, integrazione, interpolazione, funzioni speciali, trasformata di Fourier veloce (FFT), elaborazione di segnali e immagini, risolutori e altro ancora.

Le trasformazioni personalizzate di Data Wrangler consentono di combinare Python, PySpark e SQL in passaggi diversi. Nel seguente flusso di Data Wrangler, diverse funzioni dei pacchetti Python, NumPy e SciPy vengono applicate al set di dati Titanic in più passaggi.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasformazioni NumPy

La colonna delle tariffe del set di dati del Titanic contiene le tariffe di imbarco di diversi passeggeri. L'istogramma della colonna tariffa mostra una distribuzione uniforme, ad eccezione dell'ultimo bin. Applicando trasformazioni NumPy come logaritmo o radice quadrata, possiamo modificare la distribuzione (come mostrato dalla trasformazione radice quadrata).

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai. Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Vedi il seguente codice:

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"])

Trasformazioni SciPy

Le funzioni SciPy come z-score vengono applicate come parte della trasformazione personalizzata per standardizzare la distribuzione tariffaria con media e deviazione standard.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Vedi il seguente codice:

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

Ottimizzazione dei vincoli con NumPy e SciPy

Le trasformazioni personalizzate di Data Wrangler possono gestire trasformazioni avanzate come l'ottimizzazione dei vincoli applicando le funzioni di ottimizzazione di SciPy e combinando SciPy con NumPy. Nell'esempio seguente, la tariffa in funzione dell'età non mostra alcuna tendenza osservabile. Tuttavia, l'ottimizzazione dei vincoli può trasformare la tariffa in funzione dell'età. La condizione di vincolo in questo caso è che la nuova tariffa totale rimanga la stessa della vecchia tariffa totale. Le trasformazioni personalizzate di Data Wrangler consentono di eseguire la funzione di ottimizzazione di SciPy per determinare il coefficiente ottimale che può trasformare la tariffa in funzione dell'età in condizioni di vincolo.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai. Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

La definizione dell'ottimizzazione, la definizione dell'obiettivo e più vincoli possono essere menzionati come funzioni diverse durante la formulazione dell'ottimizzazione del vincolo in una trasformazione personalizzata di Data Wrangler usando SciPy e NumPy. Le trasformazioni personalizzate possono anche portare diversi metodi di risoluzione disponibili come parte del pacchetto di ottimizzazione di SciPy. Una nuova variabile trasformata può essere generata moltiplicando il coefficiente ottimale con la colonna originale e aggiunta alle colonne esistenti di Data Wrangler. Vedere il seguente codice:

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"]

La funzione di trasformazione personalizzata di Data Wrangler ha la capacità dell'interfaccia utente di mostrare i risultati delle funzioni di ottimizzazione di SciPy come il valore del coefficiente ottimale (o più coefficienti).

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasformazioni personalizzate con scikit-learn

scikit-impara è un modulo Python per l'apprendimento automatico basato su SciPy. È una libreria ML open source che supporta l'apprendimento supervisionato e non supervisionato. Fornisce inoltre vari strumenti per l'adattamento del modello, la preelaborazione dei dati, la selezione del modello, la valutazione del modello e molte altre utilità.

Discretizzazione

Discretizzazione (altrimenti noto come quantizzazione or cestinare) fornisce un modo per suddividere le funzionalità continue in valori discreti. Alcuni set di dati con funzionalità continue possono trarre vantaggio dalla discretizzazione, poiché la discretizzazione può trasformare il set di dati di attributi continui in uno con solo attributi nominali. Le funzionalità discretizzate codificate one-hot possono rendere un modello più espressivo, pur mantenendo l'interpretabilità. Ad esempio, la preelaborazione con un discretizzatore può introdurre non linearità nei modelli lineari.

Nel codice seguente, usiamo KBinsDiscretizer per discretizzare la colonna dell'età in 10 contenitori:

# 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_)

Puoi vedere i bordi del cestino stampati nella seguente schermata.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Codifica one-hot

I valori nelle colonne Imbarcato sono valori categoriali. Pertanto, dobbiamo rappresentare queste stringhe come valori numerici per eseguire la nostra classificazione con il nostro modello. Potremmo anche farlo usando una trasformazione di codifica one-hot.

Ci sono tre valori per Embarked: S, C e Q. Li rappresentiamo con dei numeri. Vedere il seguente codice:

# 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

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

ripulire

Quando non utilizzi Data Wrangler, è importante chiudere l'istanza su cui viene eseguito per evitare costi aggiuntivi.

Data Wrangler salva automaticamente il flusso di dati ogni 60 secondi. Per evitare di perdere lavoro, salva il flusso di dati prima di chiudere Data Wrangler.

  1. Per salvare il flusso di dati in Studio, scegli Compila il , Quindi scegliere Salva il flusso di Wrangler dei dati.
  2. Per chiudere l'istanza di Data Wrangler, in Studio, scegli Esecuzione di istanze e kernel.
  3. Sotto APP IN ESECUZIONE, scegli l'icona di spegnimento accanto all'app sagemaker-data-wrangler-1.0.
  4. Scegli Chiudi tutto per confermare.

Data Wrangler viene eseguito su un'istanza ml.m5.4xlarge. Questa istanza scompare da ISTANZE DI CORSA quando chiudi l'app Data Wrangler.

Dopo aver chiuso l'app Data Wrangler, deve essere riavviata la prossima volta che apri un file di flusso Data Wrangler. Questo può richiedere alcuni minuti.

Conclusione

In questo post, abbiamo dimostrato come utilizzare le trasformazioni personalizzate in Data Wrangler. Abbiamo utilizzato le librerie e il framework all'interno del contenitore Data Wrangler per estendere le funzionalità di trasformazione dei dati integrate. Gli esempi in questo post rappresentano un sottoinsieme dei framework utilizzati. Le trasformazioni nel flusso Data Wrangler possono ora essere ridimensionate in una pipeline per DataOps.

Per ulteriori informazioni sull'utilizzo dei flussi di dati con Data Wrangler, fare riferimento a Creare e utilizzare un flusso di Data Wrangler ed Prezzi di Amazon SageMaker. Per iniziare con Data Wrangler, vedere Prepara i dati ML con Amazon SageMaker Data Wrangler. Per ulteriori informazioni su Autopilot e AutoML su SageMaker, visitare Automatizza lo sviluppo del modello con Amazon SageMaker Autopilot.


Circa gli autori

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Meenakshisundaram Tandavarayan è uno specialista senior di AI/ML con AWS. Aiuta gli account strategici hi-tech nel loro viaggio di AI e ML. È molto appassionato di IA basata sui dati.

 Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Sovik Kumar Nath è un architetto di soluzioni AI/ML con AWS. Ha una vasta esperienza in progetti e soluzioni end-to-end per il machine learning; analisi aziendale nell'ambito dell'analisi finanziaria, operativa e di marketing; assistenza sanitaria; catena di fornitura; e IoT. Al di fuori del lavoro, Sovik ama viaggiare e guardare film.

Creazione di trasformazioni personalizzate in Amazon SageMaker Data Wrangler utilizzando NLTK e SciPy PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Abigail è un ingegnere di sviluppo software presso Amazon SageMaker. È appassionata di aiutare i clienti a preparare i propri dati in DataWrangler e creare sistemi di machine learning distribuiti. Nel tempo libero, Abigail ama viaggiare, fare escursioni, sciare e cucinare.

Timestamp:

Di più da Apprendimento automatico di AWS