自動特徵預先處理

BigQuery ML 會使用 CREATE MODEL 陳述式,在訓練期間自動執行預先處理作業。自動預先處理作業包括缺失值推論特徵轉換

如要瞭解 BigQuery ML 支援的特徵預先處理作業,請參閱「特徵預先處理作業總覽」。

如要瞭解每個模型類型支援的 SQL 陳述式和函式,請參閱「每個模型的端對端使用者歷程」。

缺少資料的推論

在統計學中,插補法是指以替代值取代遺漏資料的一種機制。當您使用 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 多重熱編碼 針對所有非數值 ARRAY 欄,BigQuery ML 會執行多熱編碼轉換。這種轉換方式會為 ARRAY 中的每個不重複元素產生一個獨立特徵。
TIMESTAMP 時間戳記轉換 當線性或邏輯迴歸模型遇到 TIMESTAMP 資料欄時,會從 TIMESTAMP 擷取一組元件,並對擷取的元件執行標準化和 one-hot 編碼。針對 Unix 時間 (秒) 元件,BigQuery ML 會使用標準化。針對所有其他元件,則使用 one-hot 編碼。

詳情請參閱下方的時間戳記轉換表
STRUCT 結構體展開 當 BigQuery ML 遇到 STRUCT 資料欄時,會展開 STRUCT 內的欄位,以建立單一資料欄。STRUCT 的所有欄位都必須命名。不允許巢狀 STRUCT。展開後的資料欄名稱格式為 {struct_name}_{field_name}
STRUCTARRAY 不轉換
NUMERICARRAY 不轉換

TIMESTAMP 特徵轉換

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

TIMESTAMP 元件 processed_input 筆結果 轉換方法
Unix 時間 (以秒為單位) [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 編碼。

虛擬編碼

Dummy 編碼與 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

如果 warm_start 用於最初以 'DUMMY_ENCODING' 訓練的模型,則會從第一次訓練作業中刪除相同的預留位置變數。模型無法在訓練執行期間變更編碼方法。

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

標籤編碼

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

舉例來說,假設您有以下類型的書籍資料集:

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

標籤編碼值可能會類似以下內容:

標題 類型 (文字) 類型 (數字)
書籍 1 奇幻 1
書籍 2 烹飪 2
書籍 3 記錄 3
書籍 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              |
+------------------------+----------------------+

強化樹狀模型支援目標編碼。