Aiuto proteggere la Grande Barriera Corallina con tensorflow sul Kaggle Join Sfida

Convalida dati TensorFlow: controllo e analisi dei dati

Una volta che i tuoi dati sono in una pipeline TFX, puoi utilizzare i componenti TFX per analizzarli e trasformarli. Puoi utilizzare questi strumenti anche prima di addestrare un modello.

Ci sono molti motivi per analizzare e trasformare i tuoi dati:

  • Per trovare problemi nei tuoi dati. I problemi comuni includono:
    • Dati mancanti, ad esempio elementi con valori vuoti.
    • Etichette trattate come caratteristiche, in modo che il tuo modello possa dare un'occhiata alla risposta giusta durante l'addestramento.
    • Funzionalità con valori al di fuori dell'intervallo previsto.
    • Anomalie dei dati.
    • Il modello di trasferimento appreso ha una pre-elaborazione che non corrisponde ai dati di addestramento.
  • Progettare set di funzionalità più efficaci. Ad esempio, puoi identificare:
    • Caratteristiche particolarmente informative.
    • Funzionalità ridondanti.
    • Caratteristiche che variano così ampiamente in scala che possono rallentare l'apprendimento.
    • Funzionalità con poche o nessuna informazione predittiva univoca.

Gli strumenti TFX possono aiutare a trovare bug nei dati e aiutare con l'ingegnerizzazione delle funzionalità.

Convalida dati TensorFlow

Panoramica

TensorFlow Data Validation identifica le anomalie nell'addestramento e nell'elaborazione dei dati e può creare automaticamente uno schema esaminando i dati. Il componente può essere configurato per rilevare diverse classi di anomalie nei dati. Può

  1. Eseguire controlli di validità confrontando le statistiche dei dati con uno schema che codifica le aspettative dell'utente.
  2. Rileva l'inclinazione dell'offerta di addestramento confrontando esempi nell'addestramento e nell'offerta di dati.
  3. Rileva la deriva dei dati esaminando una serie di dati.

Documentiamo ciascuna di queste funzionalità in modo indipendente:

Convalida di esempi basati su schemi

TensorFlow Data Validation identifica eventuali anomalie nei dati di input confrontando le statistiche dei dati con uno schema. Lo schema codifica le proprietà che i dati di input dovrebbero soddisfare, come i tipi di dati o i valori categoriali, e possono essere modificati o sostituiti dall'utente.

Tensorflow Data Validation viene in genere richiamato più volte nel contesto della pipeline TFX: (i) per ogni divisione ottenuta da ExampleGen, (ii) per tutti i dati pre-trasformati utilizzati da Transform e (iii) per tutti i dati post-trasformazione generati Trasformare. Quando invocato nel contesto di Transform (ii-iii), le opzioni statistiche e i vincoli basati stats_options_updater_fn schema possono essere impostati definendo stats_options_updater_fn . Ciò è particolarmente utile quando si convalidano dati non strutturati (ad esempio caratteristiche di testo). Vedere il codice utente per un esempio.

Funzionalità avanzate dello schema

Questa sezione tratta la configurazione dello schema più avanzata che può aiutare con configurazioni speciali.

Caratteristiche sparse

La codifica di funzionalità sparse negli esempi di solito introduce più funzionalità che dovrebbero avere la stessa valenza per tutti gli esempi. Ad esempio, la caratteristica sparsa:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
verrebbe codificata utilizzando Funzioni separate per indice e valore:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
con la restrizione che la valenza della caratteristica indice e valore dovrebbe corrispondere per tutti gli esempi. Questa restrizione può essere resa esplicita nello schema definendo una funzione sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

La definizione di feature sparse richiede uno o più feature di indice e una di valore che fanno riferimento a feature che esistono nello schema. La definizione esplicita di funzionalità sparse consente a TFDV di verificare che le valenze di tutte le funzionalità indicate corrispondano.

Alcuni casi d'uso introducono restrizioni di valenza simili tra le funzionalità, ma non codificano necessariamente una funzionalità sparsa. L'utilizzo di funzionalità sparse dovrebbe sbloccarti, ma non è l'ideale.

Ambienti dello schema

Per impostazione predefinita, le convalide presuppongono che tutti gli esempi in una pipeline aderiscano a un singolo schema. In alcuni casi è necessario introdurre leggere variazioni dello schema, ad esempio le funzionalità utilizzate come etichette sono richieste durante l'addestramento (e dovrebbero essere convalidate), ma mancano durante la pubblicazione. Gli ambienti possono essere utilizzati per esprimere tali requisiti, in particolare default_environment() , in_environment() , not_in_environment() .

Ad esempio, supponi che una funzione denominata "LABEL" sia necessaria per la formazione, ma che non sia disponibile durante la pubblicazione. Questo può essere espresso da:

  • Definire due ambienti distinti nello schema: ["SERVING", "TRAINING"] e associare "LABEL" solo all'ambiente "TRAINING".
  • Associare i dati di addestramento all'ambiente "TRAINING" e i dati di servizio all'ambiente "SERVING".
Generazione di schemi

Lo schema dei dati di input viene specificato come istanza dello schema TensorFlow.

Invece di costruire uno schema manualmente da zero, uno sviluppatore può fare affidamento sulla costruzione automatica dello schema di TensorFlow Data Validation. In particolare, TensorFlow Data Validation costruisce automaticamente uno schema iniziale basato sulle statistiche calcolate sui dati di addestramento disponibili nella pipeline. Gli utenti possono semplicemente rivedere questo schema generato automaticamente, modificarlo secondo necessità, archiviarlo in un sistema di controllo della versione e inserirlo esplicitamente nella pipeline per un'ulteriore convalida.

TFDV include infer_schema() per generare automaticamente uno schema. Per esempio:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

Ciò attiva una generazione automatica dello schema in base alle seguenti regole:

  • Se uno schema è già stato generato automaticamente, viene utilizzato così com'è.

  • In caso contrario, TensorFlow Data Validation esamina le statistiche dei dati disponibili e calcola uno schema adatto per i dati.

Nota: lo schema generato automaticamente è il migliore e cerca solo di dedurre le proprietà di base dei dati. Si prevede che gli utenti lo esaminino e lo modifichino secondo necessità.

Rilevamento di inclinazione al servizio della formazione

Panoramica

TensorFlow Data Validation è in grado di rilevare l'inclinazione della distribuzione tra l'addestramento e l'elaborazione dei dati. L'inclinazione della distribuzione si verifica quando la distribuzione dei valori delle caratteristiche per i dati di addestramento è significativamente diversa dalla distribuzione dei dati. Una delle cause principali dell'inclinazione della distribuzione è l'utilizzo di un corpus completamente diverso per l'addestramento della generazione dei dati per superare la mancanza di dati iniziali nel corpus desiderato. Un altro motivo è un meccanismo di campionamento difettoso che sceglie solo un sottocampione dei dati di pubblicazione su cui eseguire l'addestramento.

Scenario di esempio

Consulta la Guida introduttiva alla convalida dei dati di TensorFlow per informazioni sulla configurazione del rilevamento di inclinazione del servizio di formazione.

Rilevamento della deriva

Il rilevamento della deriva è supportato tra intervalli di dati consecutivi (ovvero, tra intervallo N e intervallo N + 1), ad esempio tra diversi giorni di dati di allenamento. Esprimiamo la deriva in termini di distanza L-infinito per le caratteristiche categoriali e divergenza approssimativa di Jensen-Shannon per le caratteristiche numeriche. È possibile impostare la distanza di soglia in modo da ricevere avvisi quando la deriva è superiore a quella accettabile. L'impostazione della distanza corretta è in genere un processo iterativo che richiede conoscenza e sperimentazione del dominio.

Consulta la Guida introduttiva alla convalida dei dati TensorFlow per informazioni sulla configurazione del rilevamento della deriva.

Utilizzo delle visualizzazioni per controllare i dati

TensorFlow Data Validation fornisce strumenti per visualizzare la distribuzione dei valori delle caratteristiche. Esaminando queste distribuzioni in un notebook Jupyter utilizzando Facets è possibile rilevare problemi comuni con i dati.

Statistiche sulle funzionalità

Identificazione delle distribuzioni sospette

È possibile identificare bug comuni nei dati utilizzando una visualizzazione Panoramica facet per cercare distribuzioni sospette dei valori delle funzionalità.

Dati sbilanciati

Una caratteristica sbilanciata è una caratteristica per la quale predomina un valore. Le funzionalità sbilanciate possono verificarsi naturalmente, ma se una funzionalità ha sempre lo stesso valore potresti avere un bug di dati. Per rilevare elementi non bilanciati in una panoramica di sfaccettature, scegli "Non uniformità" dal menu a discesa "Ordina per".

Le funzionalità più sbilanciate verranno elencate all'inizio di ogni elenco di tipi di funzionalità. Ad esempio, lo screenshot seguente mostra una caratteristica che è tutti zeri e una seconda che è altamente sbilanciata, in cima all'elenco "Caratteristiche numeriche":

Visualizzazione di dati sbilanciati

Dati distribuiti uniformemente

Una caratteristica distribuita uniformemente è quella per cui tutti i valori possibili appaiono con una frequenza prossima alla stessa. Come con i dati sbilanciati, questa distribuzione può avvenire naturalmente, ma può anche essere prodotta da bug di dati.

Per rilevare elementi distribuiti in modo uniforme in una panoramica di sfaccettature, scegli "Non uniformità" dal menu a discesa "Ordina per" e seleziona la casella di controllo "Ordine inverso":

Istogramma di dati uniformi

I dati stringa vengono rappresentati utilizzando grafici a barre se sono presenti 20 o meno valori univoci e come grafico di distribuzione cumulativa se sono presenti più di 20 valori univoci. Quindi, per i dati di stringa, le distribuzioni uniformi possono apparire come grafici a barre piatte come quello sopra o come linee rette come quello sotto:

Grafico a linee: distribuzione cumulativa di dati uniformi

Bug che possono produrre dati distribuiti uniformemente

Ecco alcuni bug comuni che possono produrre dati distribuiti uniformemente:

  • Utilizzo di stringhe per rappresentare tipi di dati non stringa come le date. Ad esempio, avrai molti valori univoci per una funzione datetime con rappresentazioni come "2017-03-01-11-45-03". I valori univoci verranno distribuiti in modo uniforme.

  • Includere indici come "numero di riga" come caratteristiche. Anche qui hai molti valori unici.

Dati mancanti

Per verificare se in una funzione mancano completamente i valori:

  1. Scegli "Importo mancante / zero" dal menu a discesa "Ordina per".
  2. Seleziona la casella di controllo "Inverti ordine".
  3. Guarda la colonna "mancante" per vedere la percentuale di istanze con valori mancanti per una funzione.

Un bug di dati può anche causare valori di funzionalità incompleti. Ad esempio, potresti aspettarti che l'elenco dei valori di una funzionalità abbia sempre tre elementi e scoprire che a volte ne ha solo uno. Per verificare la presenza di valori incompleti o altri casi in cui gli elenchi di valori delle caratteristiche non hanno il numero di elementi previsto:

  1. Scegli "Lunghezza elenco valori" dal menu a discesa "Grafico da mostrare" a destra.

  2. Guarda il grafico a destra di ogni riga di caratteristiche. Il grafico mostra l'intervallo di lunghezze degli elenchi di valori per la funzione. Ad esempio, la riga evidenziata nello screenshot seguente mostra una funzionalità che ha alcuni elenchi di valori di lunghezza zero:

Visualizzazione della panoramica delle sfaccettature con feature con elenchi di valori di feature di lunghezza zero

Grandi differenze di scala tra le caratteristiche

Se le tue funzionalità variano ampiamente in scala, il modello potrebbe avere difficoltà di apprendimento. Ad esempio, se alcune funzionalità variano da 0 a 1 e altre da 0 a 1.000.000.000, si ha una grande differenza di scala. Confronta le colonne "max" e "min" tra le funzioni per trovare scale molto diverse.

Considerare la normalizzazione dei valori delle caratteristiche per ridurre queste ampie variazioni.

Etichette con etichette non valide

Gli stimatori di TensorFlow hanno limitazioni sul tipo di dati che accettano come etichette. Ad esempio, i classificatori binari in genere funzionano solo con le etichette {0, 1}.

Rivedi i valori delle etichette nella Panoramica facet e assicurati che siano conformi ai requisiti degli stimatori .