1. Übersicht
In diesem Lab lernen Sie einen vollständigen ML-Workflow auf der GCP kennen. In 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 für die Vorhersage in AI Platform 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 das Lab in Google Cloud belaufen sich auf 1$.
2. Richten Sie Ihre Umgebung ein.
Sie benötigen ein Google Cloud Platform-Projekt mit aktivierter Abrechnung, um dieses Codelab auszuführen. Folgen Sie dieser Anleitung, um ein Projekt zu erstellen.
Schritt 1: Cloud AI Platform Models API aktivieren
Rufen Sie in der Cloud Console den Bereich AI Platform-Modelle auf und klicken Sie auf „Aktivieren“, falls die Option noch nicht aktiviert ist.
Schritt 2: Compute Engine API aktivieren
Gehen Sie zu Compute Engine und wählen Sie Aktivieren aus, falls dies noch nicht geschehen ist. Sie benötigen dies zum Erstellen Ihrer Notebookinstanz.
Schritt 3: AI Platform Notebooks-Instanz erstellen
Rufen Sie in der Cloud Console den Bereich AI Platform Notebooks auf und klicken Sie auf Neue Instanz. Wählen Sie dann den neuesten Python-Instanztyp aus:
Verwenden Sie die Standardoptionen und klicken Sie dann auf Erstellen. Nachdem die Instanz erstellt wurde, wählen Sie JupyterLab öffnen aus:
Schritt 4: XGBoost installieren
Nachdem die 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 von AI Platform unterstützte Version von XGBoost zu installieren:
pip3 install xgboost==0.82
Öffnen Sie anschließend eine Python 3-Notebookinstanz im Launcher. Jetzt können Sie in Ihrem Notizbuch 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 ihn ausführen, indem Sie im oberen Menü den Rechtspfeil oder Befehlstaste + 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
Mit BigQuery können Sie zahlreiche Datasets öffentlich analysieren. In diesem Lab verwenden wir das Dataset zur Geburtenrate (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 demografische Informationen über die Eltern des Babys. Wir verwenden eine Untergruppe dieser Funktionen, 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. Der Einfachheit halber verwenden wir nur 10.000 Zeilen aus dem Dataset.
Erstellen Sie die Abfrage und sehen Sie sich eine Vorschau des resultierenden DataFrames mit dem folgenden Code an. Hier erhalten wir vier Merkmale aus dem ursprünglichen Dataset sowie das Babygewicht (das, was unser Modell vorhersagt). Das Dataset reicht viele Jahre zurück, aber für dieses Modell verwenden wir nur Daten aus der Zeit nach 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 die numerischen Spalten angezeigt. Zum Schluss rufen wir einige Daten in der booleschen Spalte ab, die das Geschlecht des Babys angeben. Mit dem Pandas-Tool value_counts
-Methode:
df['is_male'].value_counts()
Sieht so aus, als wäre das Dataset zu 50:50 nach Geschlecht 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
Löschen Sie zuerst Zeilen mit Nullwerten aus dem Dataset und mischen die Daten nach dem Zufallsprinzip um:
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, der nur unsere Features enthält:
labels = df['weight_pounds']
data = df.drop(columns=['weight_pounds'])
Wenn Sie jetzt eine Vorschau des Datasets mit data.head()
ausführen, sollten Sie die vier Features sehen, die wir für das Training verwenden werden.
Schritt 2: Kategoriale Merkmale in Ganzzahlen umwandeln
Da bei XGBoost alle Daten numerisch sein müssen, müssen wir ändern, wie die Daten in der Spalte is_male
dargestellt werden. Das sind aktuell die Strings „Wahr“ und „Falsch“. Dazu ändern wir einfach den Typ der Spalte:
data['is_male'] = data['is_male'].astype(int)
Schritt 3: Daten in Trainings- und Test-Datasets aufteilen
Wir verwenden das Dienstprogramm train_test_split
von Scikit Learn, das wir am Anfang des Notebooks importiert haben, um unsere Daten in Trainings- und Testsets 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. Eine 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 basierend auf dem Wert zusammengefasst, der den verschiedenen Blattknoten in einem Baum zugeordnet ist.
Das folgende Diagramm zeigt eine vereinfachte Visualisierung eines Ensemble-Baum-Netzwerks 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 traditionelle neuronale Netzwerke nachweislich am besten mit unstrukturierten Daten wie Bildern und Text funktionieren, funktionieren Entscheidungsbäume häufig sehr gut mit strukturierten Daten wie dem Hypotheken-Dataset, das wir in diesem Codelab verwenden werden.
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 XGBRegressor
-Klasse, um das Modell zu erstellen, und müssen für unsere spezifische Aufgabe nur den richtigen objective
-Parameter übergeben. Hier verwenden wir ein Regressionsmodell, da wir einen numerischen Wert (das Gewicht des Babys) vorhersagen. Würden wir stattdessen unsere Daten in Buckets gruppieren, um festzustellen, ob ein Baby mehr oder weniger als 1,8 kg 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
Jetzt können wir das trainierte Modell verwenden, um Vorhersagen für unsere Testdaten mit der Funktion predict()
zu generieren:
y_pred = model.predict(x_test)
Sehen wir uns an, wie das Modell bei den ersten 20 Werten aus unserem Test-Dataset abgeschnitten hat. Im Folgenden 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
Führen Sie den folgenden Code aus, um das Modell bereitzustellen und in einer lokalen Datei zu speichern:
model.save_model('model.bst')
7. Modell in Cloud AI Platform bereitstellen
Unser Modell läuft zwar lokal, aber es wäre schön, wenn wir von überall aus Vorhersagen treffen könnten (nicht nur von diesem Notebook!). In diesem Schritt stellen wir es in der Cloud bereit.
Schritt 1: Cloud Storage-Bucket für das Modell erstellen
Definieren wir zuerst einige Umgebungsvariablen, die wir im weiteren Codelab verwenden. Geben Sie unten 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 ein:
# 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 zum Speichern der XGBoost-Modelldatei erstellen. Cloud AI Platform verweist bei der Bereitstellung auf diese Datei.
Führen Sie den folgenden 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 die in XGBoost gespeicherte Modelldatei nach Cloud Storage. Führen Sie den folgenden gsutil-Befehl aus:
!gsutil cp ./model.bst $MODEL_BUCKET
Prüfen Sie im Storage-Browser in der Cloud Console, ob die Datei kopiert wurde:
Schritt 3: Modell erstellen und bereitstellen
Mit dem folgenden gcloud-Befehl ai-platform
wird ein neues Modell in Ihrem Projekt erstellt. Wir nennen diese Datei xgb_mortgage
:
!gcloud ai-platform models create $MODEL_NAME
Jetzt ist es an der Zeit, das Modell bereitzustellen. Dazu können wir folgenden gcloud-Befehl verwenden:
!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
Prüfen Sie während der Ausführung den Abschnitt „Modelle“ in der AI Platform Console. Dort sollte Ihre neue Version bereitgestellt werden:
Wenn die Bereitstellung erfolgreich abgeschlossen wurde, wird an der Stelle, an der sich das Ladesymbol befindet, ein grünes Häkchen angezeigt. Die Bereitstellung dauert 2–3 Minuten.
Schritt 4: Bereitgestelltes Modell testen
Prüfen Sie, ob das bereitgestellte Modell funktioniert, indem Sie es mit gcloud testen, um eine Vorhersage zu treffen. Speichern Sie zunächst 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 sollten Sie die Vorhersage Ihres Modells sehen. Das tatsächliche Babygewicht beträgt in diesen beiden Beispielen 1,9 bzw. 8,1 Pfund.
8. Bereinigen
Wenn Sie dieses Notebook weiterverwenden möchten, empfehlen wir Ihnen, es bei Nichtgebrauch auszuschalten. Wählen Sie in der Notebooks-UI in der Cloud Console das Notebook und dann Beenden aus:
Wenn Sie alle Ressourcen löschen möchten, die Sie in diesem Lab erstellt haben, löschen Sie einfach die Notebookinstanz, anstatt sie zu beenden.
Gehen Sie im Navigationsmenü der Cloud Console zu „Storage“ und löschen Sie beide Buckets, die Sie zum Speichern Ihrer Modell-Assets erstellt haben.