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_tutorial
con la località dei dati impostata suUS
e 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-d
e--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_mm
mediante la suddivisione in bucket diculmen_length_mm
in base ai quantili utilizzando la funzione analiticaML.QUANTILE_BUCKETIZE()
.culmen_length_mm
: il valoreculmen_length_mm
originale, convertito in un valoreSTRING
e utilizzato nell'addestramento.species_sex
: generato dall'incrocio dispecies
esex
utilizzando 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_transform
viene visualizzato nel riquadro Explorer. Poiché la query utilizza un'istruzioneCREATE MODEL
per 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
0
indica che il modello non spiega nessuna delle variabilità dei dati di risposta attorno alla media. Un valore pari a1
indica 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.EVALUATE
senza 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 | +-----------------------+ | ... | +-----------------------+