ML.EVALUATE-Funktion

ML.EVALUATE-Funktion

Mit der ML.EVALUATE-Funktion lassen sich Messwerte von Modellen bewerten. Die ML.EVALUATE-Funktion kann mit linearen Regressions-, logistischen Regressions-, k-Means-, Matrixfaktorisierungs- und ARIMA-basierten Zeitachsenmodellen verwendet werden. Für die Bewertung logistischer Regressionsmodelle steht auch die Funktion ML.ROC_CURVE zur Verfügung. ML.ROC_CURVE wird aber nicht für Modelle mit mehreren Klassen unterstützt.

Die Ausgabe der ML.EVALUATE-Funktion besteht aus einer einzelnen Zeile mit allgemeinen Messwerten, die auf den bereitgestellten Modelltyp anwendbar sind.

ML.EVALUATE gibt die folgenden Spalten für ein logistisches oder mehrklassiges Regressionsmodell zurück:

  • precision
  • recall
  • accuracy
  • f1_score
  • log_loss
  • roc_auc

ML.EVALUATE gibt für ein lineares Regressionsmodell oder für ein explizites Matrixfaktorisierungsmodell die folgenden Spalten zurück:

  • mean_absolute_error
  • mean_squared_error
  • mean_squared_log_error
  • median_absolute_error
  • r2_score
  • explained_variance

ML.EVALUATE gibt für ein k-Means-Modell die folgenden Spalten zurück:

ML.EVALUATE gibt für ein implizites Matrixfaktorisierungsmodell die folgenden Spalten zurück:

ML.EVALUATE gibt die folgenden Spalten für ARIMA-basierte Zeitachsenmodelle zurück:

  • time_series_id
  • non_seasonal_p
  • non_seasonal_d
  • non_seasonal_q
  • has_drift
  • log_likelihood
  • AIC
  • variance
  • seasonal_periods

ML.EVALUATE-Einschränkungen

Für die Funktion ML.EVALUATE gelten die folgenden Einschränkungen:

  • ML.EVALUATE unterstützt keine importierten TensorFlow-Modelle.
  • Die Option threshold kann nicht mit mehrklassigen logistischen Regressionsmodellen und nicht mit Matrixfaktorisierungsmodellen verwendet werden.

ML.EVALUATE-Syntax

ML.EVALUATE(MODEL model_name
           [, {TABLE table_name | (query_statement)}]
           [, STRUCT(<T> AS threshold)])

model_name

model_name ist der Name des Modells, das Sie bewerten. Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie die Projekt-ID dem Modellnamen im folgenden Format voran: `[PROJECT_ID].[DATASET].[MODEL]` (einschließlich der Backticks); zum Beispiel `myproject.mydataset.mymodel`.

table_name

(Optional) table_name ist der Name der Eingabetabelle, die die Bewertungsdaten enthält. Wenn Sie kein Standardprojekt konfiguriert haben, stellen Sie dem Tabellennamen die Projekt-ID im folgenden Format voran: "[PROJECT_ID].[DATASET].[TABLE]" (einschließlich der Backticks); zum Beispiel `myproject.mydataset.mytable`.

Wenn table_name angegeben ist, müssen die Namen der Eingabespalten in der Tabelle mit den Spaltennamen im Modell übereinstimmen und ihre Typen sollten gemäß den BigQuery-Regeln für die implizite Erzwingung kompatibel sein. Die Eingabe muss eine Spalte enthalten, die dem Namen der Labelspalte entspricht, die während des Trainings angegeben wurde. Dieser Wert wird mit der Option input_label_cols bereitgestellt. Wenn input_label_cols nicht angegeben ist, wird in den Trainingsdaten die Spalte "label" verwendet.

Wenn weder table_name noch query_statement angegeben ist, berechnet ML.EVALUATE die Bewertungsergebnisse so:

  • Wenn die Daten während des Trainings aufgeteilt werden, werden die aufgeteilten Bewertungsdaten zum Berechnen der Bewertungsergebnisse verwendet.
  • Wenn die Daten während des Trainings nicht aufgeteilt werden, wird die gesamte Trainingseingabe zum Berechnen der Bewertungsergebnisse verwendet.

query_statement

(Optional) Die query_statement-Klausel gibt die Standard-SQL-Abfrage an, die zum Generieren der Auswertungsdaten verwendet wird. Die unterstützte SQL-Syntax der query_statement-Klausel finden Sie auf der Seite Standard-SQL-Abfragesyntax.

Wenn query_statement angegeben ist, müssen die Namen der Eingabespalten aus der Abfrage mit den Spaltennamen im Modell übereinstimmen und ihre Typen sollten gemäß den BigQuery-Regeln für die implizite Erzwingung kompatibel sein. Die Eingabe muss eine Spalte enthalten, die dem Namen der Labelspalte entspricht, die während des Trainings angegeben wurde. Dieser Wert wird mit der Option input_label_cols bereitgestellt. Wenn input_label_cols nicht angegeben ist, wird in den Trainingsdaten die Spalte "label" verwendet. Die zusätzlichen Spalten werden ignoriert.

Wenn die TRANSFORM-Klausel in derCREATE MODEL-Anweisung zum Erstellen von model_name enthalten war, müssen in query_statement nur die in der TRANSFORM-Klausel angegebenen Eingabespalten vorhanden sein.

Wenn weder table_name noch query_statement angegeben ist, berechnet ML.EVALUATE die Bewertungsergebnisse so:

  • Wenn die Daten während des Trainings aufgeteilt werden, werden die aufgeteilten Bewertungsdaten zum Berechnen der Bewertungsergebnisse verwendet.
  • Wenn die Daten während des Trainings nicht aufgeteilt werden, wird die gesamte Trainingseingabe zum Berechnen der Bewertungsergebnisse verwendet. Da in k-Means-Modellen keine Datenaufteilung zulässig ist, werden beim Aufruf von ML.EVALUATE für ein k-Means-Modell ohne Angabe von query_statement oder table_name Ergebnisse für die gesamte Trainingseingabe berechnet.

threshold

(Optional) threshold ist ein benutzerdefinierter Schwellenwert für das logistische Regressionsmodell, das für die Bewertung verwendet wird. Der Standardwert ist 0,5. Der bereitgestellte Schwellenwert muss vom Typ STRUCT sein.

Ein Wert von null für die Genauigkeit oder die Trefferquote bedeutet, dass der ausgewählte Schwellenwert keine echt positiven Labels erzeugt hat. Ein NaN-Wert für die Genauigkeit bedeutet, dass der ausgewählte Schwellenwert keine positiven, echt positiven und falsch positiven Labels erzeugt hat.

Wenn weder table_name noch query_statement angegeben ist, können Sie keinen Schwellenwert verwenden. Außerdem kann threshold nicht mit mehrklassigen logistischen Regressionsmodellen verwendet werden.

Beispiele für ML.EVALUATE

ML.EVALUATE ohne angegebene Eingabedaten

Mit der folgenden Abfrage wird ein Modell bewertet, für das keine Eingabedaten angegeben wurden:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `mydataset.mymodel`)

ML.EVALUATE mit einem benutzerdefinierten Schwellenwert und Eingabedaten

Die folgende Abfrage bewertet das Modell. Dafür werden Eingabedaten und ein benutzerdefinierter Schwellenwert von 0,55 angegeben:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `mydataset.mymodel`,
    (
    SELECT
      custom_label,
      column1,
      column2
    FROM
      `mydataset.mytable`),
    STRUCT(0.55 AS threshold))