In dieser Anleitung erfahren Sie, wie Sie mit der Hyperparameter-Abstimmung in BigQuery ML ein Modell für maschinelles Lernen optimieren und seine Leistung verbessern.
Sie führen die Hyperparameter-Abstimmung durch Angabe der Option NUM_TRIALS
der CREATE MODEL
-Anweisung in Kombination mit anderen modellspezifischen Optionen durch. Wenn Sie diese Optionen festlegen, trainiert BigQuery ML mehrere Versionen oder Tests des Modells, jeweils mit leicht unterschiedlichen Parametern, und gibt den Test mit der besten Leistung zurück.
In dieser Anleitung wird die öffentliche Beispieltabelle tlc_yellow_trips_2018
verwendet, die Informationen zu Taxifahrten in New York City im Jahr 2018 enthält.
Lernziele
In dieser Anleitung werden Sie durch die folgenden Aufgaben geführt:
- Mit der Anweisung
CREATE MODEL
ein lineares Regressionsmodell als Referenz erstellen - Bewertung des Basismodells mit der
ML.EVALUATE
-Funktion - Mit der Anweisung
CREATE MODEL
mit Optionen zur Hyperparameter-Abstimmung werden 20 Tests für ein lineares Regressionsmodell trainiert. - Test mit der Funktion
ML.TRIAL_INFO
überprüfen - Die Tests mit der Funktion
ML.EVALUATE
auswerten. - Mit der Funktion
ML.PREDICT
können Sie Vorhersagen zu Taxifahrten aus dem optimalen Modell der Tests abrufen.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen zu den Kosten von BigQuery finden Sie auf der Seite BigQuery-Preise.
Vorbereitung
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- BigQuery ist in neuen Projekten automatisch aktiviert.
Zum Aktivieren von BigQuery in einem vorhandenen Projekt wechseln Sie zu
Enable the BigQuery API.
.
Erforderliche Berechtigungen
- Sie benötigen die IAM-Berechtigung
bigquery.datasets.create
, um das Dataset zu erstellen. Zum Erstellen der Verbindungsressource benötigen Sie die folgenden Berechtigungen:
bigquery.connections.create
bigquery.connections.get
Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.models.getData
bigquery.jobs.create
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.
Dataset erstellen
Erstellen Sie ein BigQuery-Dataset, um Ihr ML-Modell zu speichern:
Rufen Sie in der Google Cloud Console die Seite „BigQuery“ auf.
Klicken Sie im Bereich Explorer auf den Namen Ihres Projekts.
Klicken Sie auf
Aktionen ansehen > Dataset erstellen.Führen Sie auf der Seite Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorial
ein.Wählen Sie als Standorttyp die Option Mehrere Regionen und dann USA (mehrere Regionen in den USA) aus.
Die öffentlichen Datasets sind am multiregionalen Standort
US
gespeichert. Der Einfachheit halber sollten Sie Ihr Dataset am selben Standort speichern.Übernehmen Sie die verbleibenden Standardeinstellungen unverändert und klicken Sie auf Dataset erstellen.
Tabelle mit Trainingsdaten erstellen
Erstellen Sie eine Tabelle mit Trainingsdaten, die auf einer Teilmenge der Tabelle tlc_yellow_trips_2018
basieren.
So erstellen Sie die Tabelle:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE TABLE `bqml_tutorial.taxi_tip_input` AS SELECT * EXCEPT (tip_amount), tip_amount AS label FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2018` WHERE tip_amount IS NOT NULL LIMIT 100000;
Lineares Regressionsmodell für die Kontrollgruppe erstellen
Erstellen Sie ein lineares Regressionsmodell ohne Hyperparameter-Abstimmung und trainieren Sie es anhand der Daten in der Tabelle taxi_tip_input
.
So erstellen Sie das Modell:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE MODEL `bqml_tutorial.baseline_taxi_tip_model` OPTIONS ( MODEL_TYPE = 'LINEAR_REG' ) AS SELECT * FROM `bqml_tutorial.taxi_tip_input`;
Die Abfrage dauert etwa 2 Minuten.
Basismodell bewerten
Bewerten Sie die Leistung des Modells mit der Funktion ML.EVALUATE
.
Die Funktion ML.EVALUATE
wertet die vom Modell zurückgegebenen vorhergesagten Inhaltsbewertungen anhand der Bewertungsmesswerte aus, die während des Modelltrainings berechnet wurden.
So bewerten Sie das Modell:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.baseline_taxi_tip_model`);
Die Ergebnisse sehen in etwa so aus:
+---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+ | 2.5853895559690323 | 23760.416358496139 | 0.017392406523370374 | 0.0044248227819481123 | -1934.5450533482465 | -1934.3513857946277 | +---------------------+--------------------+------------------------+-----------------------+---------------------+---------------------+
Der Wert für r2_score
für das Referenzmodell ist negativ, was auf eine schlechte Anpassung an die Daten hinweist. Je näher der Wert für R2 an 1 liegt, desto besser ist die Modellanpassung.
Lineares Regressionsmodell mit Hyperparameter-Abstimmung erstellen
Erstellen Sie ein lineares Regressionsmodell mit Hyperparameter-Abstimmung und trainieren Sie es anhand der Daten in der Tabelle taxi_tip_input
.
In der CREATE MODEL
-Anweisung können Sie die folgenden Optionen für die Hyperparameter-Abstimmung verwenden:
- Die Option
NUM_TRIALS
, um die Anzahl der Tests auf 20 festzulegen. - Die Option
MAX_PARALLEL_TRIALS
, mit der in jedem Trainingsjob zwei Tests ausgeführt werden, insgesamt also zehn Jobs und 20 Tests. Dadurch verkürzt sich die Trainingszeit. Die beiden gleichzeitigen Versuche profitieren jedoch nicht von den Trainingsergebnissen des jeweils anderen. - Mit der Option
L1_REG
können Sie in den verschiedenen Tests unterschiedliche L1-Regulierungswerte ausprobieren. Bei der L1-Regularisierung werden irrelevante Merkmale aus dem Modell entfernt, um eine Überanpassung zu verhindern.
Für die anderen vom Modell unterstützten Optionen zur Hyperparameter-Abstimmung werden die Standardwerte verwendet:
L1_REG
:0
HPARAM_TUNING_ALGORITHM
:'VIZIER_DEFAULT'
HPARAM_TUNING_OBJECTIVES
:['R2_SCORE']
So erstellen Sie das Modell:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
CREATE OR REPLACE MODEL `bqml_tutorial.hp_taxi_tip_model` OPTIONS ( MODEL_TYPE = 'LINEAR_REG', NUM_TRIALS = 20, MAX_PARALLEL_TRIALS = 2, L1_REG = HPARAM_RANGE(0, 5)) AS SELECT * FROM `bqml_tutorial.taxi_tip_input`;
Die Abfrage dauert etwa 20 Minuten.
Informationen zu den Trainingstests
Mit der Funktion ML.TRIAL_INFO
können Sie Informationen zu allen Tests abrufen, einschließlich ihrer Hyperparameterwerte, Ziele und Status. Diese Funktion gibt auch Informationen dazu zurück, welcher Test die beste Leistung erzielt.
So erhalten Sie Informationen zum Testzeitraum:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.TRIAL_INFO(MODEL `bqml_tutorial.hp_taxi_tip_model`) ORDER BY is_optimal DESC;
Die Ergebnisse sehen in etwa so aus:
+----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+ | trial_id | hyperparameters | hparam_tuning_evaluation_metrics | training_loss | eval_loss | status | error_message | is_optimal | +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+ | 7 | {"l1_reg":"4.999999999999985"} | {"r2_score":"0.653653627638174"} | 4.4677841296238165 | 4.478469742512195 | SUCCEEDED | NULL | true | | 2 | {"l1_reg":"2.402163664510254E-11"} | {"r2_score":"0.6532493667964732"} | 4.457692508421795 | 4.483697081650438 | SUCCEEDED | NULL | false | | 3 | {"l1_reg":"1.2929452948742316E-7"} | {"r2_score":"0.653249366811995"} | 4.45769250849513 | 4.483697081449748 | SUCCEEDED | NULL | false | | 4 | {"l1_reg":"2.5787102060628228E-5"} | {"r2_score":"0.6532493698925899"} | 4.457692523040582 | 4.483697041615808 | SUCCEEDED | NULL | false | | ... | ... | ... | ... | ... | ... | ... | ... | +----------+-------------------------------------+-----------------------------------+--------------------+--------------------+-----------+---------------+------------+
Der Wert in der Spalte
is_optimal
gibt an, dass Test 7 das optimale Modell ist, das durch die Optimierung zurückgegeben wurde.
Tests für das optimierte Modell bewerten
Mit der Funktion ML.EVALUATE
können Sie die Leistung der Tests bewerten.
Die Funktion ML.EVALUATE
wertet die vom Modell zurückgegebenen vorhergesagten Inhaltsbewertungen anhand der Bewertungsmesswerte aus, die während des Trainings für alle Tests berechnet wurden.
So bewerten Sie die Modelltests:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.EVALUATE(MODEL `bqml_tutorial.hp_taxi_tip_model`) ORDER BY r2_score DESC;
Die Ergebnisse sehen in etwa so aus:
+----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | trial_id | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 7 | 1.151814398002232 | 4.109811493266523 | 0.4918733252641176 | 0.5736103414025084 | 0.6652110305659145 | 0.6652144696114834 | | 19 | 1.1518143358927102 | 4.109811921460791 | 0.4918672150119582 | 0.5736106106914161 | 0.6652109956848206 | 0.6652144346901685 | | 8 | 1.152747850702547 | 4.123625876152422 | 0.4897808307399327 | 0.5731702310239184 | 0.6640856984144734 | 0.664088410199906 | | 5 | 1.152895108945439 | 4.125775524878872 | 0.48939088205957937 | 0.5723300569616766 | 0.6639105860807425 | 0.6639132416838652 | | ... | ... | ... | ... | ... | ... | ... | +----------+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
Der Wert für
r2_score
für das optimale Modell, also Test 7, ist0.66521103056591446
. Das ist eine deutliche Verbesserung gegenüber dem Kontrollmodell.
Sie können einen bestimmten Test bewerten, indem Sie das Argument TRIAL_ID
in der Funktion ML.EVALUATE
angeben.
Weitere Informationen zum Unterschied zwischen ML.TRIAL_INFO
-Zielen und ML.EVALUATE
-Bewertungsmesswerten finden Sie unter Funktionen für die Modellbereitstellung.
Abgestimmtes Modell verwenden, um Taxitipps vorherzusagen
Verwenden Sie das optimale Modell, das durch die Optimierung zurückgegeben wurde, um Trinkgelder für verschiedene Taxifahrten vorherzusagen. Das optimale Modell wird von der Funktion ML.PREDICT
automatisch verwendet, es sei denn, Sie wählen einen anderen Test aus, indem Sie das Argument TRIAL_ID
angeben. Die Vorhersagen werden in der Spalte predicted_label
zurückgegeben.
So erhalten Sie Vorhersagen:
Öffnen Sie in der Google Cloud Console die Seite BigQuery.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und klicken Sie auf Ausführen:
SELECT * FROM ML.PREDICT( MODEL `bqml_tutorial.hp_taxi_tip_model`, ( SELECT * FROM `bqml_tutorial.taxi_tip_input` LIMIT 5 ));
Die Ergebnisse sehen in etwa so aus:
+----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+ | trial_id | predicted_label | vendor_id | pickup_datetime | dropoff_datetime | passenger_count | trip_distance | rate_code | store_and_fwd_flag | payment_type | fare_amount | extra | mta_tax | tolls_amount | imp_surcharge | total_amount | pickup_location_id | dropoff_location_id | data_file_year | data_file_month | label | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+ | 7 | 1.343367839584448 | 2 | 2018-01-15 18:55:15 | 2018-01-15 18:56:18 | 1 | 0 | 1 | N | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 193 | 193 | 2018 | 1 | 0 | | 7 | -1.176072791783461 | 1 | 2018-01-08 10:26:24 | 2018-01-08 10:26:37 | 1 | 0 | 5 | N | 3 | 0.01 | 0 | 0 | 0 | 0.3 | 0.31 | 158 | 158 | 2018 | 1 | 0 | | 7 | 3.839580104168765 | 1 | 2018-01-22 10:58:02 | 2018-01-22 12:01:11 | 1 | 16.1 | 1 | N | 1 | 54.5 | 0 | 0.5 | 0 | 0.3 | 55.3 | 140 | 91 | 2018 | 1 | 0 | | 7 | 4.677393985230036 | 1 | 2018-01-16 10:14:35 | 2018-01-16 11:07:28 | 1 | 18 | 1 | N | 2 | 54.5 | 0 | 0.5 | 0 | 0.3 | 55.3 | 138 | 67 | 2018 | 1 | 0 | | 7 | 7.938988937253062 | 2 | 2018-01-16 07:05:15 | 2018-01-16 08:06:31 | 1 | 17.8 | 1 | N | 1 | 54.5 | 0 | 0.5 | 0 | 0.3 | 66.36 | 132 | 255 | 2018 | 1 | 11.06 | +----------+--------------------+-----------+---------------------+---------------------+-----------------+---------------+-----------+--------------------+--------------+-------------+-------+---------+--------------+---------------+--------------+--------------------+---------------------+----------------+-----------------+-------+
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
- Sie können das von Ihnen erstellte Projekt löschen.
- Sie können das Projekt aber auch behalten und das Dataset löschen.
Dataset löschen
Wenn Sie Ihr Projekt löschen, werden alle Datasets und Tabellen entfernt. Wenn Sie das Projekt wieder verwenden möchten, können Sie das in dieser Anleitung erstellte Dataset löschen:
Rufen Sie, falls erforderlich, die Seite "BigQuery" in der Google Cloud Console auf.
Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.
Klicken Sie auf der rechten Seite des Fensters auf Dataset löschen. Das Dataset, die Tabelle und alle Daten werden gelöscht.
Bestätigen Sie im Dialogfeld Dataset löschen den Löschbefehl. Geben Sie dazu den Namen des Datasets (
bqml_tutorial
) ein und klicken Sie auf Löschen.
Projekt löschen
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Nächste Schritte
- Weitere Informationen über das maschinelle Lernen im Machine Learning Crash Course lesen
- Eine Übersicht über BigQuery ML finden Sie unter Einführung in BigQuery ML.
- Weitere Informationen zur Google Cloud Console finden Sie unter Google Cloud Console verwenden.