Questo tutorial ti insegna a utilizzare la
clausola TRANSFORM
dell'istruzione CREATE MODEL per eseguire l'feature engineering contemporaneamente
alla creazione e all'addestramento di un modello. Utilizzando la clausola TRANSFORM, puoi specificare una o più funzioni di pre-elaborazione per trasformare i dati di input utilizzati per addestrare il modello. Il
pre-elaborazione che applichi al modello viene applicata automaticamente quando utilizzi
il modello con le funzioni
ML.EVALUATE
e
ML.PREDICT.
Questo tutorial utilizza il set di dati pubblico
bigquery-public-data.ml_datasets.penguin.
Crea un set di dati
Crea un set di dati BigQuery per archiviare il tuo modello ML.
Console
Nella console Google Cloud , vai alla pagina BigQuery.
Nel riquadro Explorer, fai clic sul nome del progetto.
Fai clic su Visualizza azioni > Crea set di dati.
Nella pagina Crea set di dati:
In ID set di dati, inserisci
bqml_tutorial.Per Tipo di località, seleziona Multi-regione e poi Stati Uniti (più regioni negli Stati Uniti).
Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.
bq
Per creare un nuovo set di dati, utilizza il
comando bq mk
con il flag --location. Per un elenco completo dei possibili parametri, consulta la
documentazione di riferimento del
comando bq mk --dataset.
Crea un set di dati denominato
bqml_tutorialcon la località dei dati impostata suUSe una descrizione diBigQuery ML tutorial dataset:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Anziché utilizzare il flag
--dataset, il comando utilizza la scorciatoia-d. Se ometti-de--dataset, il comando crea per impostazione predefinita un dataset.Verifica che il set di dati sia stato creato:
bq ls
API
Chiama il metodo datasets.insert con una risorsa dataset definita.
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.
Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.
Crea il modello
Crea un modello di regressione lineare per prevedere il peso dei pinguini e addestralo sulla
tabella di esempio penguins.
La clausola OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g'])
indica che stai creando un modello di
regressione lineare. Un modello di regressione lineare genera un valore continuo da una combinazione lineare di caratteristiche di input. La colonna
body_mass_g è la colonna dell'etichetta di input. Per i modelli di regressione lineare,
la colonna dell'etichetta deve avere valori reali (ovvero i valori della colonna devono essere
numeri reali).
La clausola TRANSFORM di questa query utilizza le seguenti colonne dell'istruzione SELECT:
body_mass_g: utilizzato nell'addestramento senza alcuna modifica.culmen_depth_mm: utilizzato nell'addestramento senza alcuna modifica.flipper_length_mm: utilizzato nell'addestramento senza alcuna modifica.bucketized_culmen_length: generato daculmen_length_mmmediante la suddivisione in bucket diculmen_length_mmin base ai quantili utilizzando la funzione analiticaML.QUANTILE_BUCKETIZE().culmen_length_mm: il valoreculmen_length_mmoriginale, convertito in un valoreSTRINGe utilizzato nell'addestramento.species_sex: generato dall'incrocio dispeciesesexutilizzando la funzioneML.FEATURE_CROSS.
Non è necessario utilizzare tutte le colonne della tabella di addestramento
nella clausolaTRANSFORM.
La clausola WHERE, WHERE body_mass_g IS NOT NULL AND RAND() < 0.2,
esclude le righe in cui il peso dei pinguini è NULL e utilizza la funzione RAND
per estrarre un campione casuale dei dati.
Per creare il modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform` TRANSFORM( body_mass_g, culmen_depth_mm, flipper_length_mm, ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length, CAST(culmen_length_mm AS string) AS culmen_length_mm, ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex) OPTIONS ( model_type = 'linear_reg', input_label_cols = ['body_mass_g']) AS SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL AND RAND() < 0.2;
Il completamento della query richiede circa 15 minuti, dopodiché il modello
penguin_transformviene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODELper creare un modello, non vengono visualizzati i risultati della query.
Valuta il modello
Valuta le prestazioni del modello utilizzando la funzione ML.EVALUATE.
La funzione ML.EVALUATE valuta i pesi dei pinguini previsti restituiti dal modello rispetto ai pesi effettivi dei pinguini provenienti dai dati di addestramento.
L'istruzione SELECT e la clausola FROM nidificate di questa query sono le stesse
della query CREATE MODEL. Poiché hai utilizzato la clausola TRANSFORM durante la
creazione del modello, non devi specificare di nuovo le colonne e le trasformazioni
nella funzione ML.EVALUATE. La funzione li recupera automaticamente
dal modello.
Per valutare il modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL ));
I risultati dovrebbero essere simili ai seguenti:
+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 64.21134350607677 | 13016.433317859564 | 7.140935762696211E-4 | 15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
Una metrica importante nei risultati della valutazione è il coefficiente R2. Il coefficiente R2 è una misura statistica che determina se le previsioni della regressione lineare si avvicinano ai dati effettivi. Un valore pari a
0indica che il modello non spiega nessuna delle variabilità dei dati di risposta attorno alla media. Un valore pari a1indica che il modello spiega tutte le variabilità dei dati di risposta attorno alla media.Per saperne di più sull'output della funzione
ML.EVALUATE, consulta Output.Puoi anche chiamare
ML.EVALUATEsenza fornire dati di input. Utilizzerà le metriche di valutazione calcolate durante l'addestramento.
Utilizzare il modello per prevedere il peso dei pinguini
Utilizza il modello con la funzione ML.PREDICT per prevedere il peso dei pinguini maschi.
La funzione ML.PREDICT restituisce il valore previsto nella
colonna predicted_label_column_name, in questo caso
predicted_body_mass_g.
Quando utilizzi la funzione ML.PREDICT, non devi passare tutte le
colonne utilizzate nell'addestramento del modello. Sono obbligatorie solo le colonne utilizzate nella
clausola TRANSFORM. Analogamente a ML.EVALUATE, la funzione ML.PREDICT
recupera automaticamente le colonne e le trasformazioni
TRANSFORM dal modello.
Per ottenere le previsioni dal modello:
Nella console Google Cloud , vai alla pagina BigQuery.
Nell'editor di query, incolla la seguente query e fai clic su Esegui:
SELECT predicted_body_mass_g FROM ML.PREDICT( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE sex = 'MALE' ));
I risultati dovrebbero essere simili ai seguenti:
+-----------------------+ | predicted_body_mass_g | +-----------------------+ | 2810.2868541725757 | +-----------------------+ | 3813.6574220842676 | +-----------------------+ | 4098.844698262214 | +-----------------------+ | 4256.587135004173 | +-----------------------+ | 3008.393497302691 | +-----------------------+ | ... | +-----------------------+