本教學課程將說明如何使用 CREATE MODEL
陳述式的 TRANSFORM
子句,在建立及訓練模型時同時執行特徵工程。您可以使用 TRANSFORM
子句指定一或多個預先處理函式,藉此轉換用於訓練模型的輸入資料。當您使用 ML.EVALUATE
和 ML.PREDICT
函式搭配模型時,系統會自動套用您套用至模型的預先處理程序。
本教學課程使用公開的 bigquery-public-data.ml_datasets.penguin
資料集。
目標
本教學課程會逐步引導您完成下列工作:
- 使用
CREATE MODEL
陳述式建立線性迴歸模型,以便預測服務呼叫類型。在CREATE MODEL
陳述式中,使用ML.QUANTILE_BUCKETIZE
和ML.FEATURE_CROSS
函式預先處理資料。 - 使用
ML.EVALUATE
函式評估模型。 - 使用
ML.PREDICT
函式,從模型取得預測結果。
費用
本教學課程使用 Google Cloud的計費元件,包括:
- BigQuery
- BigQuery ML
如要進一步瞭解 BigQuery 費用,請參閱 BigQuery 定價頁面。
事前準備
- 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。如要在現有的專案中啟用 BigQuery,請前往
Enable the BigQuery API.
建立資料集
建立 BigQuery 資料集來儲存機器學習模型。
控制台
前往 Google Cloud 控制台的「BigQuery」頁面。
在「Explorer」窗格中,按一下專案名稱。
依序點選
「View actions」(查看動作) >「Create dataset」(建立資料集)。在「Create dataset」頁面上執行下列操作:
在「Dataset ID」(資料集 ID) 中輸入
bqml_tutorial
。在「位置類型」中選取「多區域」,然後選取「美國 (多個美國區域)」。
保留其餘預設設定,然後點選「Create dataset」(建立資料集)。
bq
如要建立新的資料集,請使用 bq mk
指令搭配 --location
旗標。如需可能參數的完整清單,請參閱 bq mk --dataset
指令參考資料。
建立名為
bqml_tutorial
的資料集,並將資料位置設為US
,說明為BigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
這個指令採用
-d
捷徑,而不是使用--dataset
旗標。如果您省略-d
和--dataset
,該指令預設會建立資料集。確認資料集已建立:
bq ls
API
請呼叫 datasets.insert
方法,搭配已定義的資料集資源。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
在嘗試這個範例之前,請先參閱 BigQuery 快速入門:使用 BigQuery DataFrames,按照 BigQuery DataFrames 設定說明進行操作。詳情請參閱 BigQuery DataFrames 參考資料說明文件。
如要向 BigQuery 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定 ADC」。
建立模型
建立線性迴歸模型來預測企鵝體重,並在 penguins
範例資料表上訓練模型。
OPTIONS(model_type='linear_reg', input_label_cols=['body_mass_g'])
子句代表您在建立線性迴歸模型。線性迴歸模型會從輸入特徵的線性組合產生連續值。body_mass_g
資料欄是輸入標籤欄。針對線性迴歸模型,標籤欄必須是實值 (也就是資料欄值必須是實數)。
這個查詢的 TRANSFORM
子句會使用 SELECT
陳述式中的下列欄位:
body_mass_g
:在訓練中使用,不做任何變更。culmen_depth_mm
:在訓練中使用,不做任何變更。flipper_length_mm
:在訓練中使用,不做任何變更。bucketized_culmen_length
:使用ML.QUANTILE_BUCKETIZE()
分析函式,根據分位數將culmen_length_mm
區化,再從culmen_length_mm
產生。culmen_length_mm
:原始culmen_length_mm
值,會轉換為STRING
值並用於訓練。species_sex
:使用ML.FEATURE_CROSS
函式交叉species
和sex
產生。
您不必在 TRANSFORM
子句中使用訓練資料表的所有欄。
WHERE
子句 - WHERE body_mass_g IS NOT NULL AND RAND() < 0.2
:排除企鵝權重為 NULL
的資料列,並使用 RAND
函數隨機抽樣資料。
請按照下列步驟建立模型:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
CREATE OR REPLACE MODEL `bqml_tutorial.penguin_transform` TRANSFORM( body_mass_g, culmen_depth_mm, flipper_length_mm, ML.QUANTILE_BUCKETIZE(culmen_length_mm, 10) OVER () AS bucketized_culmen_length, CAST(culmen_length_mm AS string) AS culmen_length_mm, ML.FEATURE_CROSS(STRUCT(species, sex)) AS species_sex) OPTIONS ( model_type = 'linear_reg', input_label_cols = ['body_mass_g']) AS SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL AND RAND() < 0.2;
查詢作業大約需要 15 分鐘才能完成,之後「探索器」窗格就會顯示
penguin_transform
模型。由於查詢是使用CREATE MODEL
陳述式建立模型,因此您不會看到查詢結果。
評估模型
使用 ML.EVALUATE
函式評估模型效能。ML.EVALUATE
函式會根據模型傳回的預測企鵝權重,評估訓練資料中的實際企鵝權重。
這個查詢的巢狀 SELECT
陳述式和 FROM
子句與 CREATE MODEL
查詢中的相同。由於您在建立模型時使用了 TRANSFORM
子句,因此不必在 ML.EVALUATE
函式中再次指定資料欄和轉換。函式會自動從模型中擷取這些值。
如要評估模型,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE body_mass_g IS NOT NULL ));
結果應如下所示:
+---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | mean_absolute_error | mean_squared_error | mean_squared_log_error | median_absolute_error | r2_score | explained_variance | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+ | 64.21134350607677 | 13016.433317859564 | 7.140935762696211E-4 | 15.31788461553515 | 0.9813042531507734 | 0.9813186268757634 | +---------------------+--------------------+------------------------+-----------------------+--------------------+--------------------+
評估結果中有個重要的指標,就是 R2 分數。R2 分數是種統計量具,用來確認線性迴歸的預測結果是否趨近於實際資料。
0
值代表模型無法解釋平均值周圍之回應資料的變化。1
值表示模型能夠解釋所有平均值周圍之回應資料的變化。如要進一步瞭解
ML.EVALUATE
函式輸出內容,請參閱「迴歸模型」。您也可以不提供輸入資料,直接呼叫
ML.EVALUATE
。系統會使用訓練期間計算的評估指標。
使用模型預測企鵝重量
使用含有 ML.PREDICT
函式的模型,預測企鵝的體重。
ML.PREDICT
函式會在 predicted_label_column_name
資料欄 (在本例中為 predicted_body_mass_g
) 中輸出預測值。
使用 ML.PREDICT
函式時,您不必傳入模型訓練中使用的所有資料欄。只有在 TRANSFORM
子句中使用的資料欄為必填欄。與 ML.EVALUATE
類似,ML.PREDICT
函式會自動從模型擷取 TRANSFORM
資料欄和轉換。
如要取得模型的預測結果,請按照下列步驟操作:
前往 Google Cloud 控制台的「BigQuery」頁面。
在查詢編輯器中貼上以下查詢,然後點選「執行」:
SELECT predicted_body_mass_g FROM ML.PREDICT( MODEL `bqml_tutorial.penguin_transform`, ( SELECT * FROM `bigquery-public-data.ml_datasets.penguins` WHERE sex = 'MALE' ));
結果應如下所示:
+-----------------------+ | predicted_body_mass_g | +-----------------------+ | 2810.2868541725757 | +-----------------------+ | 3813.6574220842676 | +-----------------------+ | 4098.844698262214 | +-----------------------+ | 4256.587135004173 | +-----------------------+ | 3008.393497302691 | +-----------------------+ | ... | +-----------------------+
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。
- 您可以刪除建立的專案。
- 或者您可以保留專案並刪除資料集。
刪除資料集
刪除專案將移除專案中所有的資料集與資料表。若您希望重新使用專案,您可以刪除本教學課程中所建立的資料集。
如有必要,請在Google Cloud 控制台中開啟 BigQuery 頁面。
在導覽面板中,按一下您建立的 bqml_tutorial 資料集。
按一下視窗右側的「Delete dataset」。這項操作會刪除資料集、資料表和所有資料。
在「Delete dataset」(刪除資料集) 對話方塊中,輸入資料集的名稱 (
bqml_tutorial
),然後按一下 [Delete] (刪除) 來確認刪除指令。
刪除專案
如要刪除專案,請進行以下操作:
- 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.
後續步驟
- 如要進一步瞭解機器學習,請參閱機器學習速成課程。
- 如需 BigQuery ML 的總覽,請參閱 BigQuery ML 簡介。
- 如要進一步瞭解 Google Cloud 控制台,請參閱「使用 Google Cloud 控制台」一文。