1. Panoramica
In questo lab, seguirai un flusso di lavoro ML completo su Google Cloud. Da un ambiente di Notebooks di Cloud AI Platform, importerai i dati da un set di dati pubblico BigQuery, creerai e addestrerai un modello XGBoost ed eseguirai il deployment del modello su AI Platform per la previsione.
Cosa imparerai
Al termine del corso sarai in grado di:
- Importa e analizza un set di dati BigQuery in AI Platform Notebooks
- crea un modello XGBoost
- Esegui il deployment del modello XGBoost su AI Platform e ottieni previsioni
Il costo totale per l'esecuzione di questo lab su Google Cloud è di circa $1.
2. Configura l'ambiente
Per eseguire questo codelab, è necessario un progetto Google Cloud con fatturazione abilitata. Per creare un progetto, segui le istruzioni riportate qui.
Passaggio 1: abilita l'API Cloud AI Platform Models
Vai alla sezione Modelli di AI Platform della console Cloud e fai clic su Abilita se non è già abilitata.
Passaggio 2: abilita l'API Compute Engine
Passa a Compute Engine e seleziona Abilita se non è già abilitato. Ne avrai bisogno per creare la tua istanza di blocco note.
Passaggio 3: crea un'istanza di AI Platform Notebooks
Vai alla sezione AI Platform Notebooks della console Cloud e fai clic su Nuova istanza. Quindi seleziona il tipo di istanza Python più recente:
Utilizza le opzioni predefinite e fai clic su Crea. Una volta creata l'istanza, seleziona Apri JupyterLab:
Passaggio 4: installa XGBoost
Una volta aperta l'istanza JupyterLab, dovrai aggiungere il pacchetto XGBoost.
Per farlo, seleziona Terminale da Avvio app:
Poi esegui questo comando per installare la versione più recente di XGBoost supportata da AI Platform:
pip3 install xgboost==0.82
Al termine, apri un'istanza di blocco note Python 3 dall'Avvio app. Puoi iniziare a usare il tuo blocco note.
Passaggio 5: importa i pacchetti Python
Nella prima cella del blocco note, aggiungi le seguenti importazioni ed esegui la cella. Per eseguirlo, premi il pulsante Freccia destra nel menu in alto o premi Invio:
import pandas as pd
import xgboost as xgb
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from google.cloud import bigquery
3. Esplorazione del set di dati BigQuery
BigQuery ha reso disponibili pubblicamente molti set di dati per le tue esplorazioni. Per questo lab, utilizzeremo il set di dati sulla natalità. Contiene dati su quasi tutte le nascite negli Stati Uniti in un periodo di 40 anni, tra cui il peso alla nascita del bambino e le informazioni demografiche sui genitori del neonato. Utilizzeremo un sottoinsieme di queste caratteristiche per prevedere il peso di un neonato alla nascita.
Passaggio 1: scarica i dati di BigQuery nel blocco note
Utilizzeremo la libreria client Python per BigQuery per scaricare i dati in un DataFrame Pandas. Il set di dati originale è di 21 GB e contiene 123 milioni di righe. Per semplificare le cose,utilizzeremo solo 10.000 righe del set di dati.
Crea la query e visualizza l'anteprima del DataFrame risultante con il codice seguente. Qui otteniamo 4 caratteristiche dal set di dati originale, insieme al peso del neonato (quello previsto dal nostro modello). Il set di dati risale a molti anni fa, ma per questo modello utilizzeremo solo dati successivi al 2000:
query="""
SELECT
weight_pounds,
is_male,
mother_age,
plurality,
gestation_weeks
FROM
publicdata.samples.natality
WHERE year > 2000
LIMIT 10000
"""
df = bigquery.Client().query(query).to_dataframe()
df.head()
Per ottenere un riepilogo delle caratteristiche numeriche nel nostro set di dati, esegui:
df.describe()
Mostra la media, la deviazione standard, il minimo e altre metriche per le colonne numeriche. Infine, prendiamo in considerazione alcuni dati sulla colonna booleana che indica il genere del neonato. Possiamo farlo con Pandas Metodo value_counts
:
df['is_male'].value_counts()
Sembra che il set di dati sia quasi bilanciato 50/50 per genere.
4. Prepara i dati per l'addestramento
In questa sezione, divideremo i dati in set di addestramento e test per prepararli per l'addestramento del modello.
Passaggio 1: estrai la colonna dell'etichetta
Elimina prima le righe con valori null dal set di dati ed esegui lo shuffling dei dati:
df = df.dropna()
df = shuffle(df, random_state=2)
Quindi, estrai la colonna dell'etichetta in una variabile separata e crea un DataFrame con solo le nostre funzionalità:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Se visualizzi l'anteprima del set di dati eseguendo data.head()
, dovresti vedere le quattro funzionalità che utilizzeremo per l'addestramento.
Passaggio 2: converti le caratteristiche categoriche in numeri interi
Poiché XGBoost richiede che tutti i dati siano numerici, dobbiamo cambiare il modo in cui li rappresentiamo nella colonna is_male
, che attualmente è impostata come stringhe Vero / Falso. Per farlo, cambia semplicemente il tipo di colonna:
data['is_male'] = data['is_male'].astype(int)
Passaggio 3: suddividi i dati in set di addestramento e test
Utilizzeremo l'utilità train_test_split
di Scikit Learn, che abbiamo importato all'inizio del blocco note, per suddividere i dati in set di addestramento e test:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Ora siamo pronti per creare e addestrare il nostro modello.
5. Una breve introduzione a XGBoost
XGBoost è un framework di machine learning che utilizza alberi decisionali e incremento del gradiente per creare modelli predittivi. Funziona raggruppando più alberi decisionali in base al punteggio associato ai diversi nodi foglia in un albero.
Il diagramma seguente è una visualizzazione semplificata di una rete di insiemi di alberi per un modello che valuta se un gioco per computer specifico piace o meno a qualcuno (dai documenti di XGBoost):
Perché utilizziamo XGBoost per questo modello? Sebbene le reti neurali tradizionali abbiano prestazioni ottimali su dati non strutturati come immagini e testi, gli alberi decisionali spesso hanno un ottimo rendimento con i dati strutturati, come il set di dati dei mutui che utilizzeremo in questo codelab.
6. Creare, addestrare e valutare un modello XGBoost
Passaggio 1: definisci e addestra il modello XGBoost
Creare un modello in XGBoost è semplice. Utilizzeremo la classe XGBRegressor
per creare il modello e dobbiamo solo passare il parametro objective
corretto per la nostra attività specifica. Qui stiamo utilizzando un modello di regressione poiché stiamo prevedendo un valore numerico (il peso del bambino). Se invece dovessimo raggruppare i dati per determinare se un bambino pesava più o meno di 2 kg, useremmo un modello di classificazione.
In questo caso utilizzeremo reg:squarederror
come scopo del modello.
Il codice seguente creerà un modello XGBoost:
model = xgb.XGBRegressor(
objective='reg:linear'
)
Puoi addestrare il modello con una sola riga di codice, chiamando il metodo fit()
e passandogli i dati e le etichette di addestramento.
model.fit(x_train, y_train)
Passaggio 2: valuta il modello sulla base dei dati di test
Ora possiamo utilizzare il nostro modello addestrato per generare previsioni sui dati di test con la funzione predict()
:
y_pred = model.predict(x_test)
Vediamo le prestazioni del modello sui primi 20 valori del set di test. Di seguito stamperemo il peso del neonato previsto insieme al peso effettivo del neonato per ogni esempio di test:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
Passaggio 3: salva il modello
Per eseguire il deployment del modello, esegui questo codice per salvarlo in un file locale:
model.save_model('model.bst')
7. Esegui il deployment del modello in Cloud AI Platform
Il nostro modello funziona in locale, ma sarebbe bello se potessimo fare previsioni da qualsiasi luogo (non solo da questo blocco note!). In questo passaggio ne eseguiremo il deployment nel cloud.
Passaggio 1: crea un bucket Cloud Storage per il nostro modello
Per prima cosa, definiamo alcune variabili di ambiente che utilizzeremo nel resto del codelab. Compila i valori seguenti con il nome del tuo progetto Google Cloud, il nome del bucket Cloud Storage che vuoi creare (deve essere univoco a livello globale) e il nome della versione della prima versione del modello:
# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'baby_weight'
Ora siamo pronti a creare un bucket di archiviazione in cui archiviare il file del modello XGBoost. Indicheremo Cloud AI Platform a questo file durante il deployment.
Esegui questo comando gsutil
dal blocco note per creare un bucket:
!gsutil mb $MODEL_BUCKET
Passaggio 2: copia il file del modello in Cloud Storage
Ora copieremo il file del modello salvato di XGBoost in Cloud Storage. Esegui il seguente comando gsutil:
!gsutil cp ./model.bst $MODEL_BUCKET
Vai al browser Storage nella console Cloud per verificare che il file sia stato copiato:
Passaggio 3: crea ed esegui il deployment del modello
Il seguente comando gcloud di ai-platform
creerà un nuovo modello nel progetto. Lo chiameremo xgb_mortgage
:
!gcloud ai-platform models create $MODEL_NAME
Ora è il momento di eseguire il deployment del modello. Possiamo farlo con questo comando gcloud:
!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=1.15 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT
Mentre è in esecuzione, controlla la sezione dei modelli della console di AI Platform. Dovresti vedere il deployment della nuova versione qui:
Una volta completato il deployment, vedrai un segno di spunta verde in corrispondenza della rotellina di caricamento. Il deployment dovrebbe richiedere 2-3 minuti.
Passaggio 4: testa il modello di cui è stato eseguito il deployment
Per assicurarti che il modello di cui hai eseguito il deployment funzioni, testalo utilizzando gcloud per fare una previsione. Innanzitutto, salva un file JSON con due esempi del nostro set di test:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Testa il tuo modello salvando l'output del seguente comando gcloud in una variabile e stampandolo:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
Nell'output dovresti vedere la previsione del modello. Il peso effettivo del neonato per questi due esempi è rispettivamente 1,9 e 8,1 libbre.
8. Esegui la pulizia
Se desideri continuare a utilizzare questo blocco note, ti consigliamo di disattivarlo quando non lo usi. Dall'interfaccia utente di Notebooks in Cloud Console, seleziona il blocco note, quindi seleziona Interrompi:
Per eliminare tutte le risorse che hai creato in questo lab, elimina l'istanza del blocco note anziché arrestarla.
Utilizzando il menu di navigazione nella console Cloud, vai a Storage ed elimina i bucket creati per archiviare gli asset del modello.