Modellleistung durch Hyperparameter-Abstimmung verbessern

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 aus, indem Sie die NUM_TRIALS Option der Anweisung CREATE MODEL in Kombination mit anderen modellspezifischen Optionen angeben. Wenn Sie diese Optionen festlegen, trainiert BigQuery ML mehrere Versionen oder Tests des Modells, jeweils mit leicht unterschiedlichen Parametern, und gibt den Test zurück, der die beste Leistung erbringt.

In dieser Anleitung wird die öffentliche tlc_yellow_trips_2018 Beispieltabelle 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:

  • Mit der CREATE MODEL Anweisung ein lineares Basisregressionsmodell erstellen.
  • Das Basismodell mit der ML.EVALUATE Funktion bewerten.
  • Mit der Anweisung CREATE MODEL und Optionen für die Hyperparameter-Abstimmung 20 Tests eines linearen Regressionsmodells trainieren.
  • Die Tests mit der ML.TRIAL_INFO Funktion überprüfen.
  • Die Tests mit der Funktion ML.EVALUATE bewerten.
  • Mit der Funktion ML.PREDICTVorhersagen zu Taxifahrten aus dem optimalen Modell unter den 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.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie eines, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. BigQuery ist in neuen Projekten automatisch aktiviert. Zum Aktivieren von BigQuery in einem bereits bestehenden Projekt wechseln Sie zu

    Aktivieren Sie die BigQuery API.

    Erforderliche Rollen zum Aktivieren von APIs

    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.

    API aktivieren

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.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • 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

Wählen Sie eine der folgenden Optionen aus, um ein BigQuery-Dataset zu erstellen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie im linken Steuerfeld auf Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn das linke Steuerfeld nicht angezeigt wird, klicken Sie auf Linkes Steuerfeld maximieren , um es zu öffnen.

  3. Maximieren Sie in Explorer Ihr Projekt und klicken Sie dann auf Datasets.

  4. Klicken Sie auf der Seite Datasets auf Dataset erstellen.

  5. Führen Sie im Bereich Dataset erstellen die folgenden Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie unter Speicherort der Daten die Option USA aus.

    Behalten Sie die übrigen Standardeinstellungen bei.

  6. Klicken Sie auf Dataset erstellen.

bq

Verwenden Sie den bq mk --dataset Befehl, um ein neues Dataset zu erstellen.

  1. Erstellen Sie ein Dataset mit dem Namen bqml_tutorial und legen Sie den Speicherort der Daten auf US fest:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Bestätigen Sie, dass das Dataset erstellt wurde:

    bq ls

API

Rufen Sie die datasets.insert Methode mit einer definierten Dataset-Ressource auf:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Tabelle mit Trainingsdaten erstellen

Erstellen Sie eine Tabelle mit Trainingsdaten, die auf einer Teilmenge der Daten aus der Tabelle tlc_yellow_trips_2018 basiert.

So erstellen Sie die Tabelle:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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 Inhaltsbewertungen mit den Bewertungsmesswerten, die während des Modelltrainings berechnet wurden.

So bewerten Sie das Modell:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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 Basismodell ist negativ, was auf eine schlechte Anpassung an die Daten hindeutet. 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.

In der Anweisung CREATE MODEL werden die folgenden Optionen für die Hyperparameter-Abstimmung verwendet:

  • Die NUM_TRIALS Option wird verwendet, um die Anzahl der Tests auf 20 festzulegen.
  • Mit der MAX_PARALLEL_TRIALS Option werden zwei Tests in jedem Trainingsjob ausgeführt, insgesamt also zehn Jobs und 20 Tests. Dadurch wird die erforderliche Trainingszeit verkürzt. Die beiden gleichzeitigen Tests profitieren jedoch nicht von den Trainingsergebnissen des jeweils anderen.
  • Mit der L1_REG Option werden in den verschiedenen Tests unterschiedliche Werte für die L1-Regularisierung verwendet. Durch die L1-Regularisierung werden irrelevante Features aus dem Modell entfernt, was eine Überanpassung verhindert.

Die anderen Optionen für die Hyperparameter-Abstimmung, die vom Modell unterstützt werden, verwenden die folgenden Standardwerte:

  • L1_REG: 0
  • HPARAM_TUNING_ALGORITHM: 'VIZIER_DEFAULT'
  • HPARAM_TUNING_OBJECTIVES: ['R2_SCORE']

So erstellen Sie das Modell:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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 abrufen

Mit der Funktion ML.TRIAL_INFO können Sie Informationen zu allen Tests abrufen, einschließlich der Hyperparameterwerte, Ziele und des Status. Diese Funktion gibt auch Informationen dazu zurück, welcher Test basierend auf diesen Informationen die beste Leistung erbringt.

So rufen Sie Informationen zu Tests ab:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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 Abstimmung zurückgegeben wurde.

Abgestimmte Modelltests bewerten

Bewerten Sie die Leistung der Tests mit der Funktion ML.EVALUATE. Die Funktion ML.EVALUATE vergleicht die vom Modell zurückgegebenen vorhergesagten Inhaltsbewertungen mit den Bewertungsmesswerten, die während des Trainings für alle Tests berechnet wurden.

So bewerten Sie die Modelltests:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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 r2_score für das optimale Modell, also Test 7, ist 0.66521103056591446, was eine deutliche Verbesserung gegenüber dem Basismodell darstellt.

Sie können einen bestimmten Test bewerten, indem Sie das Argument TRIAL_ID in der Funktion ML.EVALUATE angeben.

Weitere Informationen zum Unterschied zwischen den ML.TRIAL_INFO Zielen und den 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 Abstimmung zurückgegeben wurde, um Tipps für verschiedene Taxifahrten vorherzusagen. Das optimale Modell wird automatisch von der Funktion ML.PREDICT 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 rufen Sie Vorhersagen ab:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. 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:

  1. Rufen Sie, falls erforderlich, die Seite „BigQuery“ in der Google Cloud Console auf.

    Zur Seite „BigQuery“

  2. Wählen Sie im Navigationsbereich das Dataset bqml_tutorial aus, das Sie erstellt haben.

  3. Klicken Sie auf der rechten Seite des Fensters auf Dataset löschen. Das Dataset, die Tabelle und alle Daten werden gelöscht.

  4. 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:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.

Nächste Schritte