1. Übersicht
In diesem Lab durchlaufen Sie einen vollständigen ML-Workflow in der GCP. Aus einer Cloud AI Platform Notebooks-Umgebung nehmen Sie Daten aus einem öffentlichen BigQuery-Dataset auf, erstellen und trainieren ein XGBoost-Modell und stellen das Modell in AI Platform für Vorhersagen bereit.
Lerninhalte
Die folgenden Themen werden behandelt:
- BigQuery-Dataset in AI Platform Notebooks aufnehmen und analysieren
- XGBoost-Modell erstellen
- XGBoost-Modell in AI Platform bereitstellen und Vorhersagen abrufen
Die Gesamtkosten für die Ausführung dieses Labs in Google Cloud betragen etwa 1$.
2. Richten Sie Ihre Umgebung ein.
Sie benötigen ein Google Cloud Platform-Projekt mit aktivierter Abrechnung, um dieses Codelab auszuführen. Eine Anleitung zum Erstellen eines Projekts finden Sie hier.
Schritt 1: Cloud AI Platform Models API aktivieren
Rufen Sie den Bereich „AI Platform Models“ in der Cloud Console auf und klicken Sie auf „Aktivieren“, falls die API noch nicht aktiviert ist.

Schritt 2: Compute Engine API aktivieren
Rufen Sie Compute Engine auf und wählen Sie Aktivieren aus, falls die API noch nicht aktiviert ist. Sie benötigen sie, um Ihre Notebookinstanz zu erstellen.
Schritt 3: AI Platform Notebooks-Instanz erstellen
Rufen Sie den Bereich AI Platform Notebooks in der Cloud Console auf und klicken Sie auf Neue Instanz. Wählen Sie dann den neuesten Python-Instanztyp aus:

Verwenden Sie die Standardoptionen und klicken Sie auf Erstellen. Nachdem die Instanz erstellt wurde, wählen Sie JupyterLab öffnen aus:
Schritt 4: XGBoost installieren
Nachdem Ihre JupyterLab-Instanz geöffnet wurde, müssen Sie das XGBoost-Paket hinzufügen.
Wählen Sie dazu im Launcher „Terminal“ aus:

Führen Sie dann den folgenden Befehl aus, um die neueste Version von XGBoost zu installieren, die von AI Platform unterstützt wird:
pip3 install xgboost==0.82
Öffnen Sie danach im Launcher eine Python 3-Notebookinstanz. Sie können jetzt in Ihrem Notebook loslegen.
Schritt 5: Python-Pakete importieren
Fügen Sie in der ersten Zelle Ihres Notebooks die folgenden Importe hinzu und führen Sie die Zelle aus. Sie können sie ausführen, indem Sie im oberen Menü auf die Rechtspfeiltaste oder die Tastenkombination „Befehl + Eingabetaste“ drücken:
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. BigQuery-Dataset untersuchen
In BigQuery sind viele Datasets öffentlich verfügbar. In diesem Lab verwenden wir das Dataset „natality“. Es enthält Daten zu fast jeder Geburt in den USA über einen Zeitraum von 40 Jahren, einschließlich des Geburtsgewichts des Kindes und demografischer Informationen zu den Eltern des Babys. Wir verwenden eine Teilmenge der Merkmale, um das Geburtsgewicht eines Babys vorherzusagen.
Schritt 1: BigQuery-Daten in unser Notebook herunterladen
Wir verwenden die Python-Clientbibliothek für BigQuery, um die Daten in einen Pandas-DataFrame herunterzuladen. Das ursprüngliche Dataset ist 21 GB groß und enthält 123 Millionen Zeilen. Um es einfach zu halten,verwenden wir nur 10.000 Zeilen aus dem Dataset.
Erstellen Sie die Abfrage und sehen Sie sich den resultierenden DataFrame mit dem folgenden Code an. Hier rufen wir vier Merkmale aus dem ursprünglichen Dataset sowie das Gewicht des Babys ab (das, was unser Modell vorhersagen soll). Das Dataset reicht viele Jahre zurück, aber für dieses Modell verwenden wir nur Daten ab dem Jahr 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()
Führen Sie den folgenden Befehl aus, um eine Zusammenfassung der numerischen Merkmale in unserem Dataset zu erhalten:
df.describe()
Hier werden der Mittelwert, die Standardabweichung, das Minimum und andere Messwerte für unsere numerischen Spalten angezeigt. Zum Schluss rufen wir noch einige Daten zu unserer booleschen Spalte ab, die das Geschlecht des Babys angibt. Dazu können wir die Methode value_counts von Pandas verwenden:
df['is_male'].value_counts()
Das Dataset ist nach Geschlecht fast 50/50 ausgewogen.
4. Daten für das Training vorbereiten
In diesem Abschnitt teilen wir die Daten in Trainings- und Test-Datasets auf, um sie für das Training unseres Modells vorzubereiten.
Schritt 1: Labelspalte extrahieren
Entfernen Sie zuerst Zeilen mit Nullwerten aus dem Dataset und mischen Sie die Daten:
df = df.dropna()
df = shuffle(df, random_state=2)
Extrahieren Sie als Nächstes die Labelspalte in eine separate Variable und erstellen Sie einen DataFrame mit nur unseren Merkmalen:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Wenn Sie jetzt mit data.head() eine Vorschau unseres Datasets aufrufen, sollten die vier Merkmale zu sehen sein, die wir für das Training verwenden.
Schritt 2: Kategoriale Merkmale in Ganzzahlen umwandeln
Da XGBoost alle Daten in numerischer Form benötigt, müssen wir die Darstellung der Daten in der Spalte is_male ändern. Derzeit sind sie als „True“/„False“-Strings dargestellt. Dazu ändern wir einfach den Typ dieser Spalte:
data['is_male'] = data['is_male'].astype(int)
Schritt 3: Daten in Trainings- und Test-Datasets aufteilen
Wir verwenden das Tool train_test_split von Scikit-Learn, das wir am Anfang des Notebooks importiert haben, um unsere Daten in Trainings- und Test-Datasets aufzuteilen:
x,y = data,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)
Jetzt können wir unser Modell erstellen und trainieren.
5. Kurze Einführung in XGBoost
XGBoost ist ein Framework für maschinelles Lernen, das Entscheidungsbäume und Gradient Boosting verwendet, um Vorhersagemodelle zu erstellen. Dabei werden mehrere Entscheidungsbäume auf der Grundlage des Scores kombiniert, der mit verschiedenen Blattknoten in einem Baum verknüpft ist.
Das folgende Diagramm ist eine vereinfachte Visualisierung eines Ensemble-Baumnetzwerks für ein Modell, das bewertet, ob jemand ein bestimmtes Computerspiel mag oder nicht (aus der XGBoost-Dokumentation):

Warum verwenden wir XGBoost für dieses Modell? Während herkömmliche neuronale Netze bei unstrukturierten Daten wie Bildern und Texten die besten Ergebnisse erzielen, schneiden Entscheidungsbäume oft bei strukturierten Daten wie dem Hypothekendatensatz, den wir in diesem Codelab verwenden, sehr gut ab.
6. XGBoost-Modell erstellen, trainieren und bewerten
Schritt 1: XGBoost-Modell definieren und trainieren
Das Erstellen eines Modells in XGBoost ist einfach. Wir verwenden die Klasse XGBRegressor, um das Modell zu erstellen, und müssen nur den richtigen Parameter objective für unsere spezifische Aufgabe übergeben. Hier verwenden wir ein Regressionsmodell, da wir einen numerischen Wert vorhersagen (Gewicht des Babys). Wenn wir stattdessen unsere Daten in Gruppen einteilen würden, um zu ermitteln, ob ein Baby mehr oder weniger als 6 Pfund wiegt, würden wir ein Klassifizierungsmodell verwenden.
In diesem Fall verwenden wir reg:squarederror als Ziel unseres Modells.
Mit dem folgenden Code wird ein XGBoost-Modell erstellt:
model = xgb.XGBRegressor(
objective='reg:linear'
)
Sie können das Modell mit einer Codezeile trainieren, indem Sie die Methode fit() aufrufen und ihr die Trainingsdaten und Labels übergeben.
model.fit(x_train, y_train)
Schritt 2: Modell anhand von Testdaten bewerten
Wir können jetzt unser trainiertes Modell verwenden, um mit der Funktion predict() Vorhersagen zu unseren Testdaten zu treffen:
y_pred = model.predict(x_test)
Sehen wir uns an, wie das Modell bei den ersten 20 Werten aus unserem Test-Dataset abgeschnitten hat. Unten geben wir das vorhergesagte Gewicht des Babys zusammen mit dem tatsächlichen Gewicht für jedes Testbeispiel aus:
for i in range(20):
print('Predicted weight: ', y_pred[i])
print('Actual weight: ', y_test.iloc[i])
print()
Schritt 3: Modell speichern
Um das Modell bereitzustellen, führen Sie den folgenden Code aus, um es in einer lokalen Datei zu speichern:
model.save_model('model.bst')
7. Modell in Cloud AI Platform bereitstellen
Unser Modell funktioniert lokal, aber es wäre schön, wenn wir Vorhersagen von überall aus treffen könnten (nicht nur in diesem Notebook). In diesem Schritt stellen wir es in der Cloud bereit.
Schritt 1: Cloud Storage-Bucket für unser Modell erstellen
Definieren wir zuerst einige Umgebungsvariablen, die wir im Rest des Codelabs verwenden. Ersetzen Sie die Werte unten durch den Namen Ihres Google Cloud-Projekts, den Namen des Cloud Storage-Buckets, den Sie erstellen möchten (muss global eindeutig sein), und den Versionsnamen für die erste Version Ihres Modells:
# 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'
Jetzt können wir einen Storage-Bucket erstellen, um unsere XGBoost-Modelldatei zu speichern. Wir verweisen Cloud AI Platform bei der Bereitstellung auf diese Datei.
Führen Sie diesen gsutil-Befehl in Ihrem Notebook aus, um einen Bucket zu erstellen:
!gsutil mb $MODEL_BUCKET
Schritt 2: Modelldatei in Cloud Storage kopieren
Als Nächstes kopieren wir unsere gespeicherte XGBoost-Modelldatei in Cloud Storage. Führen Sie den folgenden gsutil-Befehl aus:
!gsutil cp ./model.bst $MODEL_BUCKET
Rufen Sie den Storage-Browser in der Cloud Console auf, um zu prüfen, ob die Datei kopiert wurde:

Schritt 3: Modell erstellen und bereitstellen
Mit dem folgenden ai-platform-gcloud-Befehl wird ein neues Modell in Ihrem Projekt erstellt. Wir nennen es xgb_mortgage:
!gcloud ai-platform models create $MODEL_NAME
Jetzt ist es an der Zeit, das Modell bereitzustellen. Dazu verwenden wir diesen gcloud-Befehl:
!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
Während der Ausführung können Sie den Bereich „Modelle“ in der AI Platform-Konsole aufrufen. Dort sollte die Bereitstellung Ihrer neuen Version zu sehen sein:

Wenn die Bereitstellung abgeschlossen ist, wird das Wartesymbol durch ein grünes Häkchen ersetzt. Die Bereitstellung sollte 2–3 Minuten dauern.
Schritt 4: Bereitgestelltes Modell testen
Um zu prüfen, ob Ihr bereitgestelltes Modell funktioniert, testen Sie es mit gcloud, um eine Vorhersage zu treffen. Speichern Sie zuerst eine JSON-Datei mit zwei Beispielen aus unserem Test-Dataset:
%%writefile predictions.json
[0.0, 33.0, 1.0, 27.0]
[1.0, 26.0, 1.0, 40.0]
Testen Sie Ihr Modell, indem Sie die Ausgabe des folgenden gcloud-Befehls in einer Variablen speichern und ausgeben:
prediction = !gcloud ai-platform predict --model=$MODEL_NAME --json-instances=predictions.json --version=$VERSION_NAME
print(prediction.s)
In der Ausgabe sollte die Vorhersage Ihres Modells zu sehen sein. Das tatsächliche Gewicht der Babys für diese beiden Beispiele beträgt 1,9 bzw. 8,1 Pfund.
8. Bereinigen
Wenn Sie dieses Notebook weiterhin verwenden möchten, sollten Sie es ausschalten, wenn es nicht verwendet wird. Wählen Sie in der Notebooks-UI in der Cloud Console das Notebook aus und wählen Sie dann Beenden aus:

Wenn Sie alle in diesem Lab erstellten Ressourcen löschen möchten, löschen Sie einfach die Notebookinstanz, anstatt sie zu beenden.
Rufen Sie im Navigationsmenü der Cloud Console „Storage“ auf und löschen Sie beide Buckets, die Sie zum Speichern Ihrer Modellassets erstellt haben.