In dieser Anleitung erfahren Sie, wie Sie die Hyperparameter-Abstimmung in BigQuery ML verwenden, um ein Machine-Learning-Modell abzustimmen und seine Leistung zu verbessern.
Sie führen die Hyperparameter-Abstimmung durch, indem Sie die NUM_TRIALS-Option der CREATE MODEL-Anweisung in Kombination mit anderen modellspezifischen Optionen angeben. Wenn Sie diese Optionen festlegen, trainiert BigQuery ML mehrere Versionen oder Testläufe des Modells, die jeweils leicht unterschiedliche Parameter haben, und gibt den Testlauf zurück, der die beste Leistung erzielt.
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.
Ziele
In dieser Anleitung werden Sie durch die folgenden Aufgaben geführt:
- Verwenden Sie die Anweisung
CREATE MODEL, um ein lineares Basisregressionsmodell zu erstellen. - Das Basismodell mit der Funktion
ML.EVALUATEbewerten. - Verwenden Sie die
CREATE MODEL-Anweisung mit Optionen zur Hyperparameter-Abstimmung, um 20 Testläufe eines linearen Regressionsmodells zu trainieren. - Die Testläufe mit der
ML.TRIAL_INFO-Funktion prüfen. - Bewerten Sie die Testläufe mit der Funktion
ML.EVALUATE. - Mit der Funktion
ML.PREDICTkönnen Sie Vorhersagen zu Taxifahrten aus dem optimalen Modell unter den Testläufen abrufen.
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:
- BigQuery
- BigQuery ML
Weitere Informationen zu den Kosten von BigQuery finden Sie auf der Seite BigQuery-Preise.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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
Aktivieren Sie die BigQuery API, falls sie noch nicht aktiviert ist.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen
Erforderliche Berechtigungen
Sie benötigen die IAM-Berechtigung
bigquery.datasets.create, um das Dataset zu erstellen.Zum Erstellen des Modells benötigen Sie die folgenden Berechtigungen:
bigquery.jobs.createbigquery.models.createbigquery.models.getDatabigquery.models.updateData
Zum Ausführen von Inferenzen benötigen Sie die folgenden Berechtigungen:
bigquery.models.getDatabigquery.jobs.create
Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Einführung in IAM.
Dataset erstellen
Wählen Sie eine der folgenden Optionen aus, um ein BigQuery-Dataset zu erstellen:
Console
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
Klicken Sie im linken Bereich auf Explorer:

Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf Linkes Steuerfeld maximieren, um es zu öffnen.
Maximieren Sie im Explorer Ihr Projekt und klicken Sie dann auf Datasets.
Klicken Sie auf der Seite Datasets auf Dataset erstellen.
Führen Sie im Bereich Dataset erstellen die folgenden Schritte aus:
Geben Sie unter Dataset-ID
bqml_tutorialein.Wählen Sie unter Speicherort der Daten die Option USA aus.
Übernehmen Sie die anderen Standardeinstellungen.
Klicken Sie auf Dataset erstellen.
bq
Verwenden Sie den Befehl bq mk --dataset, um ein neues Dataset zu erstellen.
Erstellen Sie ein Dataset mit dem Namen
bqml_tutorialund dem DatenspeicherortUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Prüfen Sie, ob das Dataset erstellt wurde:
bq ls
API
Rufen Sie die Methode datasets.insert mit einer definierten Dataset-Ressource auf:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Tabelle mit Trainingsdaten erstellen
Erstellen Sie eine Tabelle mit Trainingsdaten basierend auf einer Teilmenge der Tabellendaten tlc_yellow_trips_2018.
So erstellen Sie die Tabelle:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 Basisregressionsmodell erstellen
Erstellen Sie ein lineares Regressionsmodell ohne Hyperparameter-Abstimmung und trainieren Sie es mit den Daten aus der Tabelle taxi_tip_input.
So erstellen Sie das Modell:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 vergleicht die vom Modell zurückgegebenen vorhergesagten Altersfreigaben für Inhalte mit den während des Modelltrainings berechneten Bewertungsmesswerten.
So bewerten Sie das Modell:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 r2_score-Wert für das Baseline-Modell ist negativ, was auf eine schlechte Anpassung an die Daten hinweist. Je näher der R2-Wert an 1 liegt, desto besser ist die Anpassung des Modells.
Lineares Regressionsmodell mit Hyperparameter-Abstimmung erstellen
Erstellen Sie ein lineares Regressionsmodell mit Hyperparameter-Abstimmung und trainieren Sie es mit den Daten aus der Tabelle taxi_tip_input.
Sie verwenden die folgenden Optionen für die Hyperparameter-Abstimmung in der CREATE MODEL-Anweisung:
- Mit der Option
NUM_TRIALSkönnen Sie die Anzahl der Tests auf 20 festlegen. - Die Option
MAX_PARALLEL_TRIALS, um zwei Testläufe in jedem Trainingsjob auszuführen, sodass insgesamt zehn Jobs und zwanzig Testläufe ausgeführt werden. Dadurch wird die erforderliche Trainingszeit verkürzt. Die beiden gleichzeitigen Versuche können jedoch nicht von den Trainingsergebnissen des jeweils anderen profitieren. - Mit der
L1_REG-Option können Sie in den verschiedenen Testläufen unterschiedliche L1-Regularisierungswerte ausprobieren. Durch die L1-Regularisierung werden irrelevante Merkmale aus dem Modell entfernt, was dazu beiträgt, eine Überanpassung zu verhindern.
Die anderen vom Modell unterstützten Optionen für die Hyperparameter-Abstimmung verwenden ihre Standardwerte:
L1_REG:0HPARAM_TUNING_ALGORITHM:'VIZIER_DEFAULT'HPARAM_TUNING_OBJECTIVES:['R2_SCORE']
So erstellen Sie das Modell:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 Trainingsversuchen erhalten
Mit der Funktion ML.TRIAL_INFO können Sie Informationen zu allen Tests abrufen, einschließlich ihrer Hyperparameterwerte, Ziele und des Status. Außerdem wird zurückgegeben, welcher Testlauf basierend auf diesen Informationen die beste Leistung erzielt hat.
So rufen Sie Informationen zum Testzeitraum auf:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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_optimalgibt an, dass Test 7 das optimale Modell ist, das vom Tuning zurückgegeben wurde.
Abgestimmte Modellversuche bewerten
Bewerten Sie die Leistung der Testläufe mit der Funktion ML.EVALUATE.
Die Funktion ML.EVALUATE vergleicht die vom Modell zurückgegebenen vorhergesagten Altersfreigaben für Inhalte mit den während des Trainings für alle Testläufe berechneten Bewertungsmesswerten.
So bewerten Sie die Modellversuche:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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
r2_score-Wert für das optimale Modell (Testlauf 7) ist0.66521103056591446. Das ist eine deutliche Verbesserung gegenüber dem Basismodell.
Sie können einen bestimmten Testlauf auswerten, indem Sie das Argument TRIAL_ID in der Funktion ML.EVALUATE angeben.
Weitere Informationen zum Unterschied zwischen ML.TRIAL_INFO-Zielvorhaben und ML.EVALUATE-Bewertungsmesswerten finden Sie unter Modellbereitstellung – Funktionen.
Abgestimmtes Modell verwenden, um Taxitipps vorherzusagen
Verwenden Sie das durch die Abstimmung zurückgegebene optimale Modell, um Trinkgelder für verschiedene Taxifahrten vorherzusagen. Das optimale Modell wird automatisch von der Funktion ML.PREDICT verwendet, sofern Sie nicht einen anderen Testlauf durch Angabe des Arguments TRIAL_ID auswählen. Die Vorhersagen werden in der Spalte predicted_label zurückgegeben.
So erhalten Sie Vorhersagen:
Rufen Sie in der Google Cloud Console die Seite BigQuery auf.
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 derGoogle 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:
- Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
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.