自動預先處理特徵
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 會將輸入特徵轉換成下列格式:
| 輸入資料類型 | 轉換方法 | 說明 | 
|---|---|---|
| INT64NUMERICBIGNUMERICFLOAT64 | 標準化 | 對於大多數模型,BigQuery ML 會將數值資料欄標準化,並將零值的資料欄置中後再傳送至訓練。但有例外情況,即提升樹狀結構和隨機森林模型,這兩種模型不會進行任何標準化,而 k-means 模型則會根據 STANDARDIZE_FEATURES選項,決定是否要標準化數值特徵。 | 
| BOOLSTRINGBYTESDATEDATETIMETIME | 經過 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 的特徵資料欄,且包含 Apple、Banana 和 Cranberry 類別,如下所示:
| 列 | 水果 | 
|---|---|
| 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 陳述式和函式,請參閱下列文件: