Riferimento per le trasformazioni di dati - Amazon Machine Learning

Non aggiorniamo più il servizio Amazon Machine Learning né accettiamo nuovi utenti. Questa documentazione è disponibile per gli utenti esistenti, ma non la aggiorneremo più. Per ulteriori informazioni, consulta la paginaCos'è Amazon Machine Learning.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Riferimento per le trasformazioni di dati

Trasformazione N-gramma

La trasformazione n-gramma utilizza una variabile di testo come input e produce stringhe corrispondenti allo scorrimento di una finestra di (configurabile dall'utente) n parole, generando gli output durante il processo. A titolo illustrativo, si prenda in considerazione la stringa di testo "Ho veramente apprezzato la lettura di questo libro".

Se si specifica la trasformazione n-gramma con dimensione finestra = 1 si hanno semplicemente tutte le singole parole di quella stringa:

{"I", "really", "enjoyed", "reading", "this", "book"}

Se si specifica la trasformazione n-gramma con dimensione finestra = 2 si hanno tutte le combinazioni di due parole oltre alle combinazioni con una singola parola:

{"I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

Se si specifica la trasformazione n-gramma con dimensione finestra = 3 si aggiungono le combinazioni di tre parole a questo elenco, ottenendo quanto segue:

{"I really enjoyed", "really enjoyed reading", "enjoyed reading this", "reading this book", "I really", "really enjoyed", "enjoyed reading", "reading this", "this book", "I", "really", "enjoyed", "reading", "this", "book"}

È possibile richiedere n-grammi con dimensioni comprese tra 2 e 10 parole. Gli n-grammi con dimensione 1 vengono generati implicitamente per tutti gli input il cui tipo è contrassegnato come testo nello schema dei dati, pertanto non occorre richiederli. Infine, è necessario ricordare che gli n-grammi vengono generati tramite l'interruzione dei dati di input sui caratteri di spazio. Ciò significa che, ad esempio, i caratteri di punteggiature saranno considerati una parte dei token di parole: la generazione di n-grammi con una finestra di 2 per la stringa "rosso, verde, blu" consentirà di ottenere {"rosso", "verde", "blu", "rosso, verde", "verde, blu"}. È possibile utilizzare il processore per la rimozione di punteggiatura (descritto più avanti in questo documento) per rimuovere, se si vuole, i simboli di punteggiatura.

Calcolo di n-grammi con dimensioni della finestra 3 per variabili var1:

"ngram(var1, 3)"

Trasformazione OSB (Orthogonal Sparse Bigram)

La trasformazione OSB è concepita per facilitare l'analisi delle stringhe di testo ed è un'alternativa alla trasformazione bi-grammi (n-grammi con dimensione finestra 2). Gli OSB vengono generati facendo scorrere la finestra di dimensioni n sul testo e utilizzando come output ogni coppia di parole che include la prima parola nella finestra.

Per creare ogni OSB, le parole che lo costituiscono sono unite dalla "_" (sottolineatura) e ogni token ignorato è indicato aggiungendo un'altra sottolineatura all'OSB. Pertanto, la codifica OSB non solo i token visto all'interno di una finestra, ma anche un'indicazione del numero di token ignorato all'interno della stessa finestra.

A titolo esemplificativo si consideri la stringa "The quick brown fox jumps over the lazy dog" e OSB di dimensione 4. Le finestre da quattro parole e le ultime due finestre più brevi dalla fine della stringa sono riportate nell'esempio seguente, oltre agli OSB generati da ciascuna:

Finestra, {OSBs generate}

"The quick brown fox", {The_quick, The__brown, The___fox} "quick brown fox jumps", {quick_brown, quick__fox, quick___jumps} "brown fox jumps over", {brown_fox, brown__jumps, brown___over} "fox jumps over the", {fox_jumps, fox__over, fox___the} "jumps over the lazy", {jumps_over, jumps__the, jumps___lazy} "over the lazy dog", {over_the, over__lazy, over___dog} "the lazy dog", {the_lazy, the__dog} "lazy dog", {lazy_dog}

Gli OBS sono un'alternativa rispetto ai n-grammi che potrebbero essere più adatti in alcune situazioni. Se i dati hanno campi di testo di grandi dimensioni (10 o più parole), si può fare qualche esperimento per vedere quale funziona meglio. Si noti la definizione di un campo di testo di grandi dimensioni può variare a seconda della situazione. Tuttavia, con i campi di testo di dimensioni maggiori, è stato dimostrato empiricamente che gli OSB riproducono il testo in modo univoco a causa del simbolo skip (salta) (sottolineatura).

È possibile richiedere una dimensione finestra da 2 a 10 per trasformazioni OSB su variabili di testo di input.

Per il calcolo di OBS con dimensioni della finestra 5 per la variabile var1:

"osb (var1, 5)"

Trasformazione in minuscolo

Il processore per la trasformazione in minuscolo converte gli input di testo in minuscolo. Ad esempio, dato l'input "The Quick Brown Fox Jumps Over the Lazy Dog", il risultato del processore sarà "the quick brown fox jumps over the lazy dog".

Per applicare la trasformazione in minuscolo alla variabile var1:

"lowercase(var1)"

Trasformazione con rimozione della punteggiatura

Amazon ML divide implicitamente gli input contrassegnati come testo nello schema di dati sullo spazio. La punteggiatura nella stringa termina con token di parole adiacenti oppure come token completamente separati, a seconda dello spazio che la circonda. Se questo è indesiderabile, la trasformazione con rimozione della punteggiatura può essere usata per rimuovere i simboli di punteggiatura dalle caratteristiche generate. Ad esempio, data la stringa "Welcome to AML - please fasten your seat-belts!", viene implicitamente generato il seguente set di token:

{"Welcome", "to", "Amazon", "ML", "-", "please", "fasten", "your", "seat-belts!"}

L'applicazione del processore per la rimozione di punteggiatura a questa stringa consente di ottenere questo set:

{"Welcome", "to", "Amazon", "ML", "please", "fasten", "your", "seat-belts"}

Si noti che solo i segni di punteggiatura del prefisso e del suffisso vengono rimossi. I segni di punteggiatura che appaiono a metà di un token, ad esempio il trattino in "seat-belts" (cinture di sicurezza), non vengono rimossi.

Per applicare la rimozione della punteggiatura alla variabile var1:

"no_punct (var1)"

Trasformazione binning quantile

Il processore binning quantile richiede due input, una variabile numerica e un parametro denominato bin number (numero bin) e fornisce come risultato una variabile categorica. Lo scopo è scoprire la non linearità nella distribuzione della variabile raggruppando insieme i valori osservati.

In molti casi, il rapporto tra una variabile numerica e la destinazione è non lineare (il valore della variabile numerica non aumenta né diminuisce monotonicamente con la destinazione). In questi casi, può essere utile effettuare il binning della caratteristica numerica in una caratteristica categorica che rappresenta diversi intervalli della caratteristica numerica. Ogni valore della caratteristica categorica (bin) può quindi essere modellato come se avesse la propria relazione lineare con la destinazione. Ad esempio, supponiamo di informarti che la caratteristica numerica continua account_age non sia correlata linearmente alla probabilità di acquistare un libro. È possibile effettuare il binning dell'età in caratteristiche categoriche che potrebbero essere in grado di acquisire in modo più preciso il rapporto con la destinazione.

Il processore binning quantile può essere utilizzato per istruire Amazon ML a definire n contenitori di pari dimensioni in base alla distribuzione di tutti i valori di input della variabile età e quindi a sostituire ogni numero con un token di testo contenente il contenitore. Il numero ottimale di bin per una variabile numerica dipende dalle caratteristiche della variabile e dal suo rapporto con la destinazione, e ciò si determina meglio attraverso la sperimentazione. Amazon ML suggerisce il numero ottimale di contenitori per una caratteristica numerica basata su dati statistici nella composizione suggerita.

È possibile richiedere tra 5 e 1.000 contenitori quantili da calcolare per qualsiasi variabile di input numerici.

L'esempio seguente spiega come calcolare e utilizzare 50 contenitori al posto della variabile numerica var1:

"quantile_bin(var1, 50)"

Trasformazione di normalizzazione

Il trasformatore di normalizzazione normalizza le variabili numeriche per avere una media di zero e una varianza di uno. La normalizzazione delle variabili numeriche può aiutare il processo di apprendimento se vi sono differenze di gamma molto grandi tra le variabili numeriche, poiché variabili con la massima grandezza potrebbe dominare il modello ML, indipendentemente dal fatto che la funzione sia informativa o meno riguardo alla destinazione.

Per applicare questa trasformazione alla variabile numerica var1, aggiungere questo alla composizione:

normalize(var1)

Questo trasformatore può anche utilizzare come input un gruppo di variabili numeriche definito dall'utente o il gruppo predefinito per tutte le variabili numeriche (ALL_NUMERIC):

normalize (ALL_NUMERIC)

Nota

Non è obbligatorio utilizzare il processore di normalizzazione per le variabili numeriche.

Trasformazione del prodotto cartesiano

La trasformazione cartesiana genera permutazioni di due o più variabili di testo o di input categorico. Questa trasformazione viene utilizzata quando si sospetta un'interazione tra variabili. A titolo illustrativo, si prenda in considerazione il set di dati di marketing utilizzato nel tutorial relativo all'analisi: Utilizzare Amazon ML per prevedere le risposte a un'offerta di marketing. Con l'utilizzo di questo set di dati, vorremmo prevedere se una persona risponderebbe positivamente a una promozione, in base alle informazioni economiche e demografiche. Ci si potrebbe aspettare che il tipo di lavoro di una persona sia molto importante (forse c'è una correlazione tra lavorare in determinati campi e avere denaro a disposizione) e che il massimo livello di istruzione raggiunto sia anch'esso importante. È inoltre possibile avere un'intuizione più profonda circa il fatto che vi sia una forte interazione tra queste due variabili, per esempio che la promozione è particolarmente indicata per i clienti che sono imprenditori e che hanno conseguita una laurea.

La trasformazione del prodotto cartesiano richiede variabili categoriche o di testo come input e produce nuove caratteristiche in grado di acquisire l'interazione tra queste variabili di input. Nello specifico, per ogni esempio di addestramento, creerà una combinazione di caratteristiche e le aggiungerà come caratteristica indipendente. Supponiamo ad esempio che le righe di input semplificate abbiano questo aspetto:

target, education, job

0, university.degree, technician

0, high.school, services

1, university.degree, admin

Se specifichiamo che la trasformazione cartesiana deve essere applicata ai cambi delle variabili categoriche istruzione (education) e lavoro (job), la caratteristica risultante education_job_interaction avrà questo aspetto:

target, education_job_interaction

0, university.degree_technician

0, high.school_services

1, university.degree_admin

La trasformazione cartesiana è ancora più potente quando si tratta di lavorare su sequenze di token, come avviene quando uno dei suoi argomenti è una variabile di testo implicitamente o esplicitamente divisa in token. A titolo illustrativo, si prenda in considerazione l'attività di classificazione di un libro come manuale o meno. Intuitivamente si potrebbe pensare che qualcosa nel titolo possa dirci se si tratta di un manuale (determinate parole apparire più frequentemente nei titoli dei libri di testo) e che nella rilegatura del libro vi sia qualcosa di predittivo (è più probabile che i manuali siano rilegati con una copertura rigida), ma è la combinazione di alcune parole nel titolo e della rilegatura a essere più predittiva. Per un esempio reale, la tabella riportata di seguito mostra i risultati dell'applicazione del processore cartesiano alle variabili di input rilegatura e titolo:

Manuale Title Rilegatura Prodotto cartesiano di no_punct (titolo) e rilegatura
1 Economia: Principi, problemi, politiche Hardcover (copertina rigida) {"Economics_Hardcover", "Principles_Hardcover", "Problems_Hardcover", "Policies_Hardcover"}
0 The Invisible Heart: Una storia d'amore nell'economia Softcover (copertina morbida) {"The_Softcover", "Invisible_Softcover", "Heart_Softcover", "An_Softcover", "Economics_Softcover", "Romance_Softcover"}
0 Fun With Problems (Divertirsi con i problemi) Softcover (copertina morbida) {"Fun_Softcover", "With_Softcover", "Problems_Softcover"}

L'esempio seguente mostra come applicare il trasformatore cartesiano a var1 e var2:

cartesian(var1, var2)