可匯出模型

本頁說明如何匯出 BigQuery ML 模型。您可以將 BigQuery ML 模型匯出至 Cloud Storage,並用於線上預測,或在 Python 中編輯模型。您可以透過以下方式匯出 BigQuery ML 模型:

您可以匯出下列模型類型:

  • AUTOENCODER
  • AUTOML_CLASSIFIER
  • AUTOML_REGRESSOR
  • BOOSTED_TREE_CLASSIFIER
  • BOOSTED_TREE_REGRESSOR
  • DNN_CLASSIFIER
  • DNN_REGRESSOR
  • DNN_LINEAR_COMBINED_CLASSIFIER
  • DNN_LINEAR_COMBINED_REGRESSOR
  • KMEANS
  • LINEAR_REG
  • LOGISTIC_REG
  • MATRIX_FACTORIZATION
  • RANDOM_FOREST_CLASSIFIER
  • RANDOM_FOREST_REGRESSOR
  • TENSORFLOW (匯入的 TensorFlow 模型)
  • PCA
  • TRANSFORM_ONLY

匯出模型格式和樣本

下表列出每個 BigQuery ML 模型類型的匯出目的地格式,並提供在 Cloud Storage 儲存桶中寫入的檔案範例。

模型類型 匯出模型格式 匯出檔案範例
AUTOML_CLASSIFIER TensorFlow SavedModel (TF 2.1.0) gcs_bucket/
  assets/
    f1.txt
    f2.txt
  saved_model.pb
  variables/
    variables.data-00-of-01
    variables.index
AUTOML_REGRESSOR
AUTOENCODER TensorFlow SavedModel (TF 1.15 以上版本)
DNN_CLASSIFIER
DNN_REGRESSOR
DNN_LINEAR_COMBINED_CLASSIFIER
DNN_LINEAR_COMBINED_REGRESSOR
KMEANS
LINEAR_REGRESSOR
LOGISTIC_REG
MATRIX_FACTORIZATION
PCA
TRANSFORM_ONLY
BOOSTED_TREE_CLASSIFIER 輔助工具 (XGBoost 0.82) gcs_bucket/
  assets/
    0.txt
    1.txt
    model_metadata.json
  main.py
  model.bst
  xgboost_predictor-0.1.tar.gz
    ....
     predictor.py
    ....


main.py 是用於本機執行。詳情請參閱「模型部署」一文。
BOOSTED_TREE_REGRESSOR
RANDOM_FOREST_REGRESSOR
RANDOM_FOREST_REGRESSOR
TENSORFLOW (匯入) TensorFlow SavedModel 與匯入模型時的檔案完全相同

匯出使用 TRANSFORM 訓練的模型

如果模型是使用 TRANSFORM 子句進行訓練,則額外的預處理模型會在 TRANSFORM 子句中執行相同的邏輯,並以 TensorFlow SavedModel 格式儲存在 transform 子目錄下。您可以將使用 TRANSFORM 子句 訓練的模型部署至 Vertex AI 和本機。詳情請參閱模型部署

匯出模型格式 匯出檔案範例
預測模型:TensorFlow SavedModel 或 Booster (XGBoost 0.82)。
TRANSFORM 子句的預先處理模型:TensorFlow SavedModel (TF 2.5 以上版本)
gcs_bucket/
  ....(model files)
  transform/
    assets/
        f1.txt/
        f2.txt/
    saved_model.pb
    variables/
        variables.data-00-of-01
        variables.index

模型不包含在訓練期間在 TRANSFORM 子句 外執行的特徵工程資訊。例如 SELECT 陳述式中的任何內容。因此,您需要手動轉換輸入資料,然後再將資料輸入預處理模型。

支援的資料類型

匯出使用 TRANSFORM 子句訓練的模型時,系統支援將下列資料類型提供至 TRANSFORM 子句

TRANSFORM 輸入類型 TRANSFORM 輸入內容範例 匯出的預處理模型輸入樣本
INT64 10,
11
tf.constant(
  [10, 11],
  dtype=tf.int64)
NUMERIC NUMERIC 10,
NUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
BIGNUMERIC BIGNUMERIC 10,
BIGNUMERIC 11
tf.constant(
  [10, 11],
  dtype=tf.float64)
FLOAT64 10.0,
11.0
tf.constant(
  [10, 11],
  dtype=tf.float64)
BOOL TRUE,
FALSE
tf.constant(
  [True, False],
  dtype=tf.bool)
STRING 'abc',
'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
BYTES b'abc',
b'def'
tf.constant(
  ['abc', 'def'],
  dtype=tf.string)
DATE DATE '2020-09-27',
DATE '2020-09-28'
tf.constant(
  [
    '2020-09-27',
    '2020-09-28'
  ],
  dtype=tf.string)

"%F" format
DATETIME DATETIME '2023-02-02 02:02:01.152903',
DATETIME '2023-02-03 02:02:01.152903'
tf.constant(
  [
    '2023-02-02 02:02:01.152903',
    '2023-02-03 02:02:01.152903'
  ],
  dtype=tf.string)

"%F %H:%M:%E6S" format
時間 TIME '16:32:36.152903',
TIME '17:32:36.152903'
tf.constant(
  [
    '16:32:36.152903',
    '17:32:36.152903'
  ],
  dtype=tf.string)

"%H:%M:%E6S" format
時間戳記 TIMESTAMP '2017-02-28 12:30:30.45-08',
TIMESTAMP '2018-02-28 12:30:30.45-08'
tf.constant(
  [
    '2017-02-28 20:30:30.4 +0000',
    '2018-02-28 20:30:30.4 +0000'
  ],
  dtype=tf.string)

"%F %H:%M:%E1S %z" format
ARRAY ['a', 'b'],
['c', 'd']
tf.constant(
  [['a', 'b'], ['c', 'd']],
  dtype=tf.string)
ARRAY< STRUCT< INT64, FLOAT64>> [(1, 1.0), (2, 1.0)],
[(2, 1.0), (3, 1.0)]
tf.sparse.from_dense(
  tf.constant(
    [
      [0, 1.0, 1.0, 0],
      [0, 0, 1.0, 1.0]
    ],
    dtype=tf.float64))
NULL NULL,
NULL
tf.constant(
  [123456789.0e10, 123456789.0e10],
  dtype=tf.float64)

tf.constant(
  [1234567890000000000, 1234567890000000000],
  dtype=tf.int64)

tf.constant(
  [' __MISSING__ ', ' __MISSING__ '],
  dtype=tf.string)

支援的 SQL 函式

匯出使用 TRANSFORM 子句訓練的模型時,您可以在 TRANSFORM 子句 中使用下列 SQL 函式。

  • 運算子
    • +-*/=<><=>=!=<>[NOT] BETWEEN[NOT] INIS [NOT] NULLIS [NOT] TRUEIS [NOT] FALSENOTANDOR
  • 條件式運算式
    • CASE exprCASECOALESCEIFIFNULLNULLIF
  • 數學函式
    • ABSACOSACOSHASINHATANATAN2ATANHCBRTCEILCEILINGCOSCOSHCOTCOTHCSCCSCHEXPFLOORIS_INFIS_NANLNLOGLOG10MODPOWPOWERSECSECHSIGNSINSINHSQRTTANTANH
  • 轉換函式
    • CAST AS INT64CAST AS FLOAT64CAST AS NUMERICCAST AS BIGNUMERICCAST AS STRINGSAFE_CAST AS INT64SAFE_CAST AS FLOAT64
  • 字串函式
    • CONCATLEFTLENGTHLOWERREGEXP_REPLACERIGHTSPLITSUBSTRSUBSTRINGTRIMUPPER
  • 日期函式
    • DateDATE_ADDDATE_SUBDATE_DIFFDATE_TRUNCEXTRACTFORMAT_DATEPARSE_DATESAFE.PARSE_DATE
  • 日期時間函式
    • DATETIMEDATETIME_ADDDATETIME_SUBDATETIME_DIFFDATETIME_TRUNCEXTRACTPARSE_DATETIMESAFE.PARSE_DATETIME
  • 時間函式
    • TIMETIME_ADDTIME_SUBTIME_DIFFTIME_TRUNCEXTRACTFORMAT_TIMEPARSE_TIMESAFE.PARSE_TIME
  • 時間戳記函式
    • TIMESTAMPTIMESTAMP_ADDTIMESTAMP_SUBTIMESTAMP_DIFFTIMESTAMP_TRUNCFORMAT_TIMESTAMPPARSE_TIMESTAMPSAFE.PARSE_TIMESTAMPTIMESTAMP_MICROSTIMESTAMP_MILLISTIMESTAMP_SECONDSEXTRACTSTRINGUNIX_MICROSUNIX_MILLISUNIX_SECONDS
  • 手動預先處理函式
    • ML.IMPUTERML.HASH_BUCKETIZEML.LABEL_ENCODERML.MULTI_HOT_ENCODERML.NGRAMSML.ONE_HOT_ENCODERML.BUCKETIZEML.MAX_ABS_SCALERML.MIN_MAX_SCALERML.NORMALIZERML.QUANTILE_BUCKETIZEML.ROBUST_SCALERML.STANDARD_SCALER

限制

匯出模型時,請注意下列限制:

  • 如果在訓練期間使用下列任何功能,則無法匯出模型:

    • 輸入資料中含有 ARRAYTIMESTAMPGEOGRAPHY 地圖項目類型。
  • 匯出的模型類型 AUTOML_REGRESSORAUTOML_CLASSIFIER 不支援 Vertex AI 部署,無法進行線上預測。

  • 矩陣分解模型的匯出模型大小上限為 1 GB。模型大小大致與 num_factors 成正比,因此如果達到上限,您可以在訓練期間減少 num_factors 來縮減模型大小。

  • 如果模型是使用 BigQuery ML TRANSFORM 子句進行手動特徵預先處理而訓練,請參閱支援匯出的資料類型函式

  • 在 2023 年 9 月 18 日前,使用 BigQuery ML TRANSFORM 子句訓練的模型必須重新訓練,才能透過模型註冊服務部署,以便進行線上預測。

  • 在匯出模型時,系統支援 ARRAY<STRUCT<INT64, FLOAT64>>ARRAYTIMESTAMP 做為預轉換資料,但不支援做為後轉換資料。

匯出 BigQuery ML 模型

如要匯出模型,請按照下列步驟操作:

主控台

  1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

    前往「BigQuery」頁面

  2. 在導覽面板的「Resources」(資源) 區段,展開您的專案並選取資料集。找出並點選要匯出的模型。

  3. 按一下視窗右側的「Export Model」

    匯出模型

  4. 在「Export model to Cloud Storage」(將模型匯出至 Cloud Storage) 對話方塊中:

    • 針對「Select Cloud Storage location」(選取 Cloud Storage 位置),請瀏覽至您要匯出模型的值區或資料夾位置。
    • 按一下「Export」即可匯出模型。

如要查看工作進度,請查看「Export」工作的「Job history」導覽區頂端附近。

SQL

EXPORT MODEL 陳述式可讓您使用 GoogleSQL 查詢語法,將 BigQuery ML 模型匯出至 Cloud Storage

如要使用 EXPORT MODEL 陳述式在 Google Cloud 主控台匯出 BigQuery ML 模型,請按照下列步驟操作:

  1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

    前往 BigQuery

  2. 按一下 [Compose new query] (撰寫新查詢)

  3. 在「Query editor」(查詢編輯器) 欄位中輸入 EXPORT MODEL 陳述式。

    以下查詢會將名為 myproject.mydataset.mymodel 的模型匯出至具有 URI gs://bucket/path/to/saved_model/ 的 Cloud Storage 值區。

     EXPORT MODEL `myproject.mydataset.mymodel`
     OPTIONS(URI = 'gs://bucket/path/to/saved_model/')
     

  4. 按一下「執行」。查詢完成後,「Query results」窗格會顯示以下內容:Successfully exported model

bq

請使用 bq extract 指令,並加上 --model 旗標。

(選用) 提供 --destination_format 旗標,並選擇匯出模型的格式。(選用) 提供 --location 旗標,並將值設為您的位置

bq --location=location extract \
--destination_format format \
--model project_id:dataset.model \
gs://bucket/model_folder

其中:

  • location 是您的位置名稱。--location 是選用旗標。舉例來說,如果您在東京地區使用 BigQuery,就可以將旗標的值設為 asia-northeast1。您可以使用 .bigqueryrc 檔案,設定該位置的預設值。
  • destination_format 是匯出模型的格式:ML_TF_SAVED_MODEL (預設) 或 ML_XGBOOST_BOOSTER
  • project_id 是您的專案 ID。
  • dataset 是來源資料集的名稱。
  • model 是您要匯出的模型。
  • bucket 是匯出資料的目標 Cloud Storage 值區名稱。BigQuery 資料集與 Cloud Storage 值區必須位於相同的位置
  • model_folder 是匯出模型檔案的寫入資料夾名稱。

範例:

舉例來說,下列指令會將 TensorFlow SavedModel 格式的 mydataset.mymodel 匯出至名為 mymodel_folder 的 Cloud Storage 值區。

bq extract --model \
'mydataset.mymodel' \
gs://example-bucket/mymodel_folder

destination_format 的預設值為 ML_TF_SAVED_MODEL

以下指令會將 mydataset.mymodel 以 XGBoost Booster 格式匯出至名為 mymodel_folder 的 Cloud Storage 值區。

bq extract --model \
--destination_format ML_XGBOOST_BOOSTER \
'mydataset.mytable' \
gs://example-bucket/mymodel_folder

API

如要匯出模型,請建立 extract 工作並填入工作設定。

(選用) 在工作資源jobReference 區段中,於 location 屬性指定您的位置。

  1. 建立指向 BigQuery ML 模型和 Cloud Storage 目的地的擷取工作。

  2. 使用包含專案 ID、資料集 ID 和模型 ID 的 sourceModel 設定物件,指定來源模型。

  3. destination URI(s) 屬性必須完整且符合下列格式:gs://bucket/model_folder

  4. 設定 configuration.extract.destinationFormat 屬性,藉此指定目的地格式。舉例來說,如要匯出提升樹模型,請將此屬性設為 ML_XGBOOST_BOOSTER

  5. 如要查看工作狀態,請使用初始要求傳回的工作 ID 呼叫 jobs.get(job_id)

    • 如果是 status.state = DONE,代表工作已順利完成。
    • 如果出現 status.errorResult 屬性,代表要求執行失敗,且該物件將包含所發生錯誤的相關訊息。
    • 如果沒有出現 status.errorResult,代表工作已順利完成,但過程中可能發生了幾個不嚴重的錯誤。不嚴重的錯誤都會列在已傳回工作物件的 status.errors 屬性中。

API 附註:

  • 最佳做法就是產生唯一識別碼,並在呼叫 jobs.insert 來建立工作時,將該唯一識別碼當做 jobReference.jobId 傳送。這個方法較不受網路故障問題的影響,這是因為用戶端可使用已知的工作 ID 進行輪詢或重試。

  • 對指定的工作 ID 呼叫 jobs.insert 是一種冪等運算;換句話說,您可以對同一個工作 ID 重試無數次,最多會有一個作業成功。

Java

在嘗試這個範例之前,請先按照 BigQuery 快速入門:使用用戶端程式庫中的 Java 設定說明進行操作。詳情請參閱 BigQuery Java API 參考說明文件

如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「設定用戶端程式庫的驗證機制」。

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ExtractJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.ModelId;

// Sample to extract model to GCS bucket
public class ExtractModel {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectName = "bigquery-public-data";
    String datasetName = "samples";
    String modelName = "model";
    String bucketName = "MY-BUCKET-NAME";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    extractModel(projectName, datasetName, modelName, destinationUri);
  }

  public static void extractModel(
      String projectName, String datasetName, String modelName, String destinationUri)
      throws InterruptedException {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      ModelId modelId = ModelId.of(projectName, datasetName, modelName);

      ExtractJobConfiguration extractConfig =
          ExtractJobConfiguration.newBuilder(modelId, destinationUri).build();

      Job job = bigquery.create(JobInfo.of(extractConfig));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to extract due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Model extract successful");
    } catch (BigQueryException ex) {
      System.out.println("Model extraction job was interrupted. \n" + ex.toString());
    }
  }
}

模型部署

您可以將匯出的模型部署至 Vertex AI 和本機。如果模型的 TRANSFORM 子句包含日期函式、日期時間函式、時間函式或時間戳記函式,您必須在容器中使用 bigquery-ml-utils 程式庫。但如果您透過 Model Registry 部署,則不必匯出模型或提供容器。

Vertex AI 部署

匯出模型格式 部署作業
TensorFlow SavedModel (非 AutoML 模型) 部署 TensorFlow SavedModel。 您必須使用 TensorFlow 的支援版本建立 SavedModel 檔案。
TensorFlow SavedModel (AutoML 模型) 不支援。
XGBoost 輔助工具 使用自訂預測處理常式。對於 XGBoost Booster 模型,預先處理和後置處理資訊會儲存在匯出的檔案中,而自訂預測處理常式可讓您使用額外匯出的檔案部署模型。

您必須使用 XGBoost 的支援版本建立模型檔案。

本機部署

匯出模型格式 部署作業
TensorFlow SavedModel (非 AutoML 模型) SavedModel 是標準格式,您可以在 TensorFlow 服務 Docker 容器中部署 SavedModel。

您也可以利用 Vertex AI 線上預測服務的本機執行功能。
TensorFlow SavedModel (AutoML 模型) 容器化並執行模型
XGBoost 輔助工具 如要在本機執行 XGBoost Booster 模型,您可以使用匯出的 main.py 檔案:
  1. 將 Cloud Storage 中的所有檔案下載到本機目錄。
  2. predictor.py 檔案從 xgboost_predictor-0.1.tar.gz 解壓縮至本機目錄。
  3. 執行 main.py (請參閱 main.py 中的操作說明)。

預測輸出格式

本節將說明每種模型類型的匯出模型預測輸出格式。所有匯出的模型都支援批次預測,可一次處理多個輸入資料列。例如,以下輸出格式範例中的每個輸入列都有兩個輸入列。

AUTOENCODER

預測輸出格式 輸出內容範例
+------------------------+------------------------+------------------------+
|      LATENT_COL_1      |      LATENT_COL_2      |           ...          |
+------------------------+------------------------+------------------------+
|       [FLOAT]          |         [FLOAT]        |           ...          |
+------------------------+------------------------+------------------------+
        
+------------------+------------------+------------------+------------------+
|   LATENT_COL_1   |   LATENT_COL_2   |   LATENT_COL_3   |   LATENT_COL_4   |
+------------------------+------------+------------------+------------------+
|    0.21384512    |    0.93457112    |    0.64978097    |    0.00480489    |
+------------------+------------------+------------------+------------------+
        

AUTOML_CLASSIFIER

預測輸出格式 輸出內容範例
+------------------------------------------+
| predictions                              |
+------------------------------------------+
| [{"scores":[FLOAT], "classes":[STRING]}] |
+------------------------------------------+
        
+---------------------------------------------+
| predictions                                 |
+---------------------------------------------+
| [{"scores":[1, 2], "classes":['a', 'b']},   |
|  {"scores":[3, 0.2], "classes":['a', 'b']}] |
+---------------------------------------------+
        

AUTOML_REGRESSOR

預測輸出格式 輸出內容範例
+-----------------+
| predictions     |
+-----------------+
| [FLOAT]         |
+-----------------+
        
+-----------------+
| predictions     |
+-----------------+
| [1.8, 2.46]     |
+-----------------+
        

BOOSTED_TREE_CLASSIFIER 和 RANDOM_FOREST_CLASSIFIER

預測輸出格式 輸出內容範例
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

BOOSTED_TREE_REGRESSOR AND RANDOM_FOREST_REGRESSOR

預測輸出格式 輸出內容範例
+-----------------+
| predicted_label |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| predicted_label |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_CLASSIFIER

預測輸出格式 輸出內容範例
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_REGRESSOR

預測輸出格式 輸出內容範例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

DNN_LINEAR_COMBINED_CLASSIFIER

預測輸出格式 輸出內容範例
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [INT64]       | [STRING]    | INT64     | STRING  | FLOAT                  | [FLOAT]| [FLOAT]       |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| ALL_CLASS_IDS | ALL_CLASSES | CLASS_IDS | CLASSES | LOGISTIC (binary only) | LOGITS | PROBABILITIES |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.36]                 | [-0.53]| [0.64, 0.36]  |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
| [0, 1]        | ['a', 'b']  | [0]       | ['a']   | [0.2]                  | [-1.38]| [0.8, 0.2]    |
+---------------+-------------+-----------+---------+------------------------+--------+---------------+
        

DNN_LINEAR_COMBINED_REGRESSOR

預測輸出格式 輸出內容範例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
        

KMEANS

預測輸出格式 輸出內容範例
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [FLOAT]            | [INT64]      | INT64               |
+--------------------+--------------+---------------------+
        
+--------------------+--------------+---------------------+
| CENTROID_DISTANCES | CENTROID_IDS | NEAREST_CENTROID_ID |
+--------------------+--------------+---------------------+
| [1.2, 1.3]         | [1, 2]       | [1]                 |
+--------------------+--------------+---------------------+
| [0.4, 0.1]         | [1, 2]       | [2]                 |
+--------------------+--------------+---------------------+
        

LINEAR_REG

預測輸出格式 輸出內容範例
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| FLOAT           |
+-----------------+
        
+-----------------+
| PREDICTED_LABEL |
+-----------------+
| [1.8]           |
+-----------------+
| [2.46]          |
+-----------------+
       

LOGISTIC_REG

預測輸出格式 輸出內容範例
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [FLOAT]     | [STRING]     | STRING          |
+-------------+--------------+-----------------+
        
+-------------+--------------+-----------------+
| LABEL_PROBS | LABEL_VALUES | PREDICTED_LABEL |
+-------------+--------------+-----------------+
| [0.1, 0.9]  | ['a', 'b']   | ['b']           |
+-------------+--------------+-----------------+
| [0.8, 0.2]  | ['a', 'b']   | ['a']           |
+-------------+--------------+-----------------+
        

MATRIX_FACTORIZATION

注意:我們目前只支援以輸入使用者和輸出前 50 個 (predicted_rating、predicted_item) 組合,並依 predicted_rating 由高至低排序。

預測輸出格式 輸出內容範例
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [FLOAT]          | [STRING]       |
+------------------+----------------+
        
+--------------------+--------------+
| PREDICTED_RATING | PREDICTED_ITEM |
+------------------+----------------+
| [5.5, 1.7]       | ['A', 'B']     |
+------------------+----------------+
| [7.2, 2.7]       | ['B', 'A']     |
+------------------+----------------+
        

TENSORFLOW (匯入)

預測輸出格式
與匯入的模型相同

PCA

預測輸出格式 輸出內容範例
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [INT64]           |             [FLOAT]             |
+-------------------------+---------------------------------+
        
+-------------------------+---------------------------------+
| PRINCIPAL_COMPONENT_IDS | PRINCIPAL_COMPONENT_PROJECTIONS |
+-------------------------+---------------------------------+
|       [1, 2]            |             [1.2, 5.0]          |
+-------------------------+---------------------------------+
        

TRANSFORM_ONLY

預測輸出格式
與模型的 TRANSFORM 子句中指定的欄相同

XGBoost 模型視覺化

匯出模型後,您可以使用 plot_tree Python API 將提升樹狀圖視覺化。舉例來說,您可以利用 Colab 而無需安裝依附元件:

  1. 將提升樹模型匯出至 Cloud Storage 值區。
  2. 從 Cloud Storage 值區下載 model.bst 檔案。
  3. Colab 筆記本中,將 model.bst 檔案上傳至 Files
  4. 在筆記本中執行下列程式碼:

    import xgboost as xgb
    import matplotlib.pyplot as plt
    
    model = xgb.Booster(model_file="model.bst")
    num_iterations = <iteration_number>
    for tree_num in range(num_iterations):
      xgb.plot_tree(model, num_trees=tree_num)
    plt.show
    

這個範例會繪製多個樹狀結構 (每個疊代一個樹狀結構):

匯出模型

目前,我們不會在模型中儲存功能名稱,因此您會看到「f0」、「f1」等名稱。您可以在 assets/model_metadata.json 匯出檔案中找到對應的特徵名稱,這些名稱會以索引的形式顯示 (例如「f0」)。

所需權限

如要將 BigQuery ML 模型匯出至 Cloud Storage,您必須擁有存取 BigQuery ML 模型的權限、執行匯出工作的權限,以及將資料寫入 Cloud Storage 值區的權限。

BigQuery 權限

  • 您至少必須具備 bigquery.models.export 權限,才能匯出模型。以下是擁有 bigquery.models.export 權限的預先定義 Identity and Access Management (IAM) 角色:

    • bigquery.dataViewer
    • bigquery.dataOwner
    • bigquery.dataEditor
    • bigquery.admin
  • 您至少必須擁有 bigquery.jobs.create 權限,才能執行匯出工作。以下是擁有 bigquery.jobs.create 權限的預先定義 IAM 角色:

    • bigquery.user
    • bigquery.jobUser
    • bigquery.admin

Cloud Storage 權限

  • 如要將資料寫入現有的 Cloud Storage 值區,您必須擁有 storage.objects.create 權限。以下是擁有 storage.objects.create 權限的預先定義 IAM 角色:

    • storage.objectCreator
    • storage.objectAdmin
    • storage.admin

如要進一步瞭解 BigQuery ML 中的身分與存取權管理角色和權限,請參閱「存取權控管」。

在不同位置之間移動 BigQuery 資料

資料集建立之後,即無法更改位置,但您可以建立資料集副本

配額政策

如要瞭解匯出工作配額,請參閱「配額與限制」頁面的「匯出工作」一節。

定價

匯出 BigQuery ML 模型並不收費,但匯出作業須遵循 BigQuery 的配額與限制。如要進一步瞭解 BigQuery 定價,請參閱「定價」頁面。

匯出資料之後,系統會因您在 Cloud Storage 中儲存資料而向您收取費用。如要進一步瞭解 Cloud Storage 的計價方式,請參閱 Cloud Storage 定價頁面。

後續步驟