自動預先處理特徵

BigQuery ML 會在訓練期間使用 CREATE MODEL 陳述式,自動執行前處理作業。自動前處理包含遺漏值插補特徵轉換

如要瞭解 BigQuery ML 的特徵前處理支援功能,請參閱「特徵前處理總覽」。

遺漏資料插補

在統計學中,插補法是指以替代值取代遺漏資料的一種機制。當您使用 BigQuery ML 訓練模型時,系統會將 NULL 值視為遺漏資料。當您透過 BigQuery ML 預測結果時,如果 BigQuery ML 發現 NULL 值或從未出現的值,結果中就可能會出現遺漏值。BigQuery ML 會根據資料欄中的資料類型,以不同方式處理遺漏資料。

資料欄類型 插補方法
數字 在訓練和預測中,數值資料欄的 NULL 值會替換為原始輸入資料中的特徵欄所計算出的平均值。
one-hot/multi-hot 編碼 在訓練和預測中,編碼資料欄的 NULL 值會對應至新增至資料的額外類別。在預測期間,如果有之前沒出現過的資料,系統指派的權重值會是 0。
TIMESTAMP TIMESTAMP 資料欄混用經過標準化和 one-hot 編碼資料欄的插補方法。針對產生的 Unix 時間資料欄,BigQuery ML 會將值替換為原始資料欄的平均 Unix 時間。針對其他產生的值,BigQuery ML 會為每個擷取的特徵指派相應的 NULL 類別。
STRUCT 在訓練和預測期間,系統會根據 STRUCT 的類型,推斷每個欄位的值。

特徵轉換

根據預設,BigQuery ML 會將輸入特徵轉換成下列格式:

輸入資料類型 轉換方法 說明
INT64
NUMERIC
BIGNUMERIC
FLOAT64
標準化 對於大多數模型,BigQuery ML 會將數值資料欄標準化,並將零值的資料欄置中後再傳送至訓練。但有例外情況,即提升樹狀結構和隨機森林模型,這兩種模型不會進行任何標準化,而 k-means 模型則會根據 STANDARDIZE_FEATURES 選項,決定是否要標準化數值特徵。
BOOL
STRING
BYTES
DATE
DATETIME
TIME
經過 one-hot 編碼 針對 TIMESTAMP 以外的所有非數值、非陣列資料欄,BigQuery ML 會對所有模型執行 one-hot 編碼轉換,但提升樹狀結構和隨機森林模型除外。這種轉換方式會為資料欄中的每個不重複值產生一個獨立特徵。標籤編碼轉換作業會用於訓練提升樹狀結構和隨機森林模型,將每個不重複值轉換為數值。
ARRAY 經過 multi-hot 編碼 針對所有非數值 ARRAY 資料欄,BigQuery ML 會執行 multi-hot 編碼轉換。這種轉換方式會為 ARRAY 中的每個不重複元素產生一個獨立特徵。
TIMESTAMP 時間戳記轉換 當線性或邏輯迴歸模型遇到 TIMESTAMP 資料欄時,會從 TIMESTAMP 擷取一組元件,並對擷取的元件執行標準化和 one-hot 編碼。針對 Unix 紀元時間 (秒) 元件,BigQuery ML 會使用標準化。所有其他元件則使用 one-hot 編碼。

詳情請參閱下列時間戳記特徵轉換表
STRUCT 結構擴充 當 BigQuery ML 遇到 STRUCT 資料欄時,會展開 STRUCT 內的欄位,建立單一資料欄。這項功能需要為 STRUCT 的所有欄位命名。不允許巢狀結構的 STRUCT。展開後的資料欄名稱格式為 {struct_name}_{field_name}
ARRAY 列,共 STRUCT 沒有轉換
ARRAY 列,共 NUMERIC 沒有轉換

TIMESTAMP 特徵轉換

下表顯示從 TIMESTAMP 欄擷取的元件,以及對應的轉換方法。

TIMESTAMP 元件 processed_input 筆結果 轉換方法
以秒為單位的 Unix Epoch 紀元時間 [COLUMN_NAME] 標準化
當月第幾日 _TS_DOM_[COLUMN_NAME] one-hot 編碼
星期幾 _TS_DOW_[COLUMN_NAME] one-hot 編碼
月份 _TS_MOY_[COLUMN_NAME] one-hot 編碼
時段 _TS_HOD_[COLUMN_NAME] one-hot 編碼
每小時中的某分鐘 _TS_MOH_[COLUMN_NAME] one-hot 編碼
年度第幾週 (週日是一週的開始) _TS_WOY_[COLUMN_NAME] one-hot 編碼
年份 _TS_YEAR_[COLUMN_NAME] one-hot 編碼

類別特徵編碼

如要為經過單熱編碼的特徵指定其他預設編碼方法,請使用模型選項 CATEGORY_ENCODING_METHOD。對於廣義線性模型 (GLM) 模型,您可以將 CATEGORY_ENCODING_METHOD 設為下列其中一個值:

one-hot 編碼

One-hot 編碼會將特徵的每個類別對應至各自的二進位特徵,其中 0 代表特徵不存在,1 代表特徵存在 (稱為虛擬變數)。這項對應會建立 N 個新的特徵資料欄,其中 N 是訓練資料表中特徵的不重複類別數量。

舉例來說,假設訓練資料表有名為 fruit 的特徵資料欄,且包含 AppleBananaCranberry 類別,如下所示:

水果
1 Apple
2 香蕉黃
3 蔓越莓

在此情況下,CATEGORY_ENCODING_METHOD='ONE_HOT_ENCODING' 選項會將資料表轉換為下列內部表示法:

fruit_Apple fruit_Banana fruit_Cranberry
1 1 0 0
2 0 1 0
3 0 0 1

線性迴歸和邏輯迴歸以及提升樹狀結構模型支援 one-hot 編碼。

虛擬編碼

虛擬編碼與 one-hot 編碼類似,都是將類別特徵轉換為一組預留位置變數。虛擬編碼會使用 N-1 預留位置變數,而不是 N 預留位置變數,代表某項功能的 N 類別。舉例來說,如果您將 CATEGORY_ENCODING_METHOD 設為 'DUMMY_ENCODING',用於前一個熱編碼範例中顯示的相同 fruit 特徵資料欄,則資料表會轉換為下列內部表示法:

fruit_Apple fruit_Banana
1 1 0
2 0 1
3 0 0

系統會捨棄訓練資料集中出現次數最多的類別。如果多個類別的出現次數最多,系統會從該組類別中隨機捨棄一個。

最終權重集 (ML.WEIGHTS) 仍會包含已捨棄的類別,但其權重一律為 0.0。對於 ML.ADVANCED_WEIGHTS,已捨棄變數的標準誤差和 p 值為 NaN

如果對最初使用 'DUMMY_ENCODING' 訓練的模型使用 warm_start,系統會從第一次訓練執行中捨棄相同的預留位置變數。模型無法在訓練期間變更編碼方法。

線性迴歸和邏輯迴歸模型支援虛擬編碼。

標籤編碼

標籤編碼會將類別特徵的值轉換為 INT64 值 (以 [0, <number of categories>] 為單位)。

舉例來說,假設您有下列書籍資料集:

標題 類型
書籍 1 奇幻
書籍 2 烹飪
書籍 3 記錄
Book 4 烹飪

編碼後的標籤值可能如下所示:

標題 類型 (文字) 類型 (數字)
書籍 1 奇幻 1
書籍 2 烹飪 2
書籍 3 記錄 3
Book 4 烹飪 2

編碼字彙會依字母順序排序。不在詞彙中的 NULL 值和類別會編碼為 0

升級樹狀結構模型支援標籤編碼。

目標編碼

目標編碼會將類別特徵值替換為分類模型的目標機率,或是迴歸模型的目標期望值。

經過目標編碼的特徵可能類似下列範例:

# Classification model
+------------------------+----------------------+
| original value         | target encoded value |
+------------------------+----------------------+
| (category_1, target_1) |     0.5              |
| (category_1, target_2) |     0.5              |
| (category_2, target_1) |     0.0              |
+------------------------+----------------------+

# Regression model
+------------------------+----------------------+
| original value         | target encoded value |
+------------------------+----------------------+
| (category_1, 2)        |     2.5              |
| (category_1, 3)        |     2.5              |
| (category_2, 1)        |     1.5              |
| (category_2, 2)        |     1.5              |
+------------------------+----------------------+

目標編碼適用於提升樹狀結構模型

後續步驟

如要進一步瞭解支援自動特徵前處理的模型的支援 SQL 陳述式和函式,請參閱下列文件: