GCP的特徵工程
本文將介紹:
- 區分機器學習和統計學
- BigQuery ML 的特徵工程
區分機器學習(ML)和統計學
在統計學中,處裡一個column中的缺失值通常會為這個column估算一個平均值,所以從哲學上講,這就是ML和統計學開始出現分歧的地方。在ML中,這個做法就是為有資料和沒有資料的情況建立一個單獨的模型。我們可以在ML 中做到這一點,無論我們實際上有資料還是沒有資料,因為在 ML 中,我們有大數據,可以建立盡可能細緻度的東西。
另一方面,統計學是關於保存我們所有的資料並從現有資料中取得最佳結果。哲學上的差異會影響我們對待異常值(outliers)的方式。 在ML中,我們會有很多的異常值,使其成為可以實際訓練的東西。但是在統計學中,是取得所有能夠收集到的資料,因此刪除異常值。
這是一個哲學上的差異,因為ML和統計學的使用情境不同。統計資料通常用於ML處理大量資料的有限資料環境中,因此在ML 中通常會使用額外的欄位來標記所有缺失的資料。
當資料不夠時,我們可以估算資料或用平均值代替。現在,上面例子是預測房屋價值。資料集包括我們看到的兩個峰值,一個是 SFO,另一個是 LAX。
在我們的模型中將緯度(latitude)呈現為浮點特徵是沒有意義的。這是因為緯度和房屋價值之間不存在線性關係。例如,緯度 35 的房屋並不比緯度 34 的房屋貴 35 倍、34 倍。那該如何處理這個巨大的差異呢?
我們不只有一個浮點特徵,而是有 11 個不同的布林特徵,Yes、No、LatitudeBin1、LatitudeBin2 一直到 LatitudeBin11,其中有Yes、No的布林值。這裡我們只是使用了fixed-bin boundaries。
資料科學家常用的另一種選擇是設定分位數邊界(quantile boundaries),以便每個box中的值的數量是恆定的。我們會在回歸問題中經常看到這種情況。需要花費相當多的訓練週期來嘗試正確獲取異常值的實例,因此我們要在 ML 中收集上圖中的長尾部分,而不是將它們從那些集合和正常統計資料中刪除。
如果房子有50個房間,我們將其設置為4個房間,這是我們範圍的上限。想法是,一間房子的價格要幾千萬,而房間數量卻很少,優化器傳統上很難處理這個問題。價格最終決定梯度。
現在,由於上圖的批量標準化(batch normalization),ML的現代架構最終會將變數幅度(variable magnitudes)考量在內。儘管如果一批example恰好都具有不尋常的值,可能會遇到問題,但這並不像以前那麼重要。因為ML可以處理離值。
基本的特徵工程
資料預處裡分為兩個面向:
- Feature representation transformation
- Feature construction
Feature representation transformation
- 將數字特徵轉換為分類特徵(Bucketization)
- 將分類特徵轉換為數字呈現(one-hot encoding、learning with counts、sparse feature embeddings等)
- 有些模型適用於數字或分類特徵
- 其他型號可處理混合類型特徵
Feature construction
- 使用典型技術(使用單變量數學函數進行多項式展開,或透過特徵交叉來擷取特徵交互作用)來建立新特徵
- 也可以使用來自 ML 使用案例領域的業務邏輯來建構
BigQuery ML
BQ ML支援兩種的特徵預處理:
- 自動化 — 在訓練過程中進行自動化預處理
- 手動 — 提供transform clause,以便可以使用手動預處理函數定義自訂預處理。我們也可以在 transform clause之外使用這些函數。
BQ 可以幫助進行特徵工程,因為它使用 SQL 來執行常見的預處理任務。例如上圖,如果我們正在預處理包含紐約市出租車乘坐記錄的資料集,則可以指定 SQL 過濾操作以從訓練示例資料集中排除虛假資料,例如距離為零英里的乘坐記錄。
內建的SQL 數學和資料處理函數對於對來源資料進行簡單的計算加法也是有價值。資料處理功能對於解析常見資料格式(如時間戳記)以提取有關一天中的時間的詳細資訊也很有價值。過濾掉虛假數據。例如,行程距離必須大於零,提取每小時數據,執行計算以獲取新欄位,車資。
EXTRACT ( DAYOFWEEK FROM pickup_datetime) AS dayofweek,
EXTRACT (HOUR FROM pickup_datetime) AS hourofday,
CONCAT (CAST(EXTRACT(DAYOFWEEK FROM pickup_datetime) AS STRING), CAST(EXTRACT(HOUR FROM pickup_datetime) AS STRING) ) AS hourofday,
例如,上面範例是在 BQ ML 中使用 SQL 對日期進行三種預處理。將日期的各個部分提取到不同的欄位:年、月、日等等。提取目前日期與年、月、日等column之間的時間段。提取日期的一些特定特徵,星期幾、是否是週末、是否為假期等等。
上面是使用 SQL 提取的星期幾和一天中的小時查詢並在 Data Studio 中以表格形式可視化的範例。需要注意,對於除timestamp之外的所有非數字column,BQ ML 執行one-hot encoding轉換。此轉換為column中的每個唯一值產生一個單獨的特徵。
以下說明將特徵工程納入BQ ML模型的說明。我們將使用紐約計程車司機資料集來檢查特徵工程對模型預測的影響。這個ML問題是一個回歸問題。我們將使用的測量方法是 RMSE( root mean square error)。
這個ML問題使用 BQ ML 預測紐約市的計程車價格。我們將從一個基準模型開始,幫助我們為錯誤測量設定一個良好的目標值。了解基準(Baseline)很重要,因為它們可以幫助我們確定問題的合理或良好的指標。
上圖將用來評估模型的代碼。需要注意,BQ 會自動拆分我們提供的資料,並僅對部分資料進行訓練,使用其餘資料進行評估。建立模型後,可以使用 ML.EVALUATE 函數評估回歸器的效能。 ML.EVALUATE 函數根據實際資料評估預測值…RMSE。
所以此 ML 問題的主要評估指標是 RMSE。 RMSE 測量模型預測值與觀測值之間的差異。較大的 RMSE 相當於較大的平均誤差,因此 RMSE 值越小越好。 RMSE 的一個很好的特性是,誤差以測量單位給出,因此可以非常直接地判斷模型在未見的資料上有多不正確。當評估模型時,注意從用於評估的基準模型開始,然後從用於評估 RMSE 的基準模型開始。基準模型沒有特徵工程。最終模型具有特徵工程,計程車資的 RMSE 較低,為 4.65 美元。
進階特徵工程: 特徵交叉(Feature crosses)
BQ ML提供了一些進階特徵工程函數:
- ML.FEATURE_CROSS(STRUCT(features)) 對所有組合進行特徵交叉
- TRANSFORM
(ML.FEATURE_CROSS(STRUCT (features) ), ML. BUCKETIZE (f, split_points) etc … )。TRANSFORM 子句可在模型建立期間指定所有預處理。預處理在ML的"預測和評估"階段會自動套用。 - ML.BUCKETIZE(f, split_points),其中 split_points 是一個陣列(array)。
特徵交叉與記憶有關。記憶(Memorization)與概括化(Generalization)相反,而概括正是ML的目標。記憶與概括化是視狀況使用。當我們有非常多的資料時,就使用記憶,因為對於輸入空間中的任何單一網格單元(Grid cell),資料分佈都具有統計意義。這樣的話,ML就能記住了。本質上只是在學習每個網格單元的平均值。
深度學習也需要大量的資料,無論是想要特徵交叉還是想要使用多層,都需要大量的資料。如果我們熟悉傳統的ML,那麼可能沒有聽說過特徵交叉,因為它們具有記憶功能並且僅適用於大型資料集。資料越大,box就越小,就能記憶得越精細。特徵交叉是一種針對大型資料集的強大的特徵預處理技術。
特徵交叉產生稀疏性(Sparsity)
透過建立結合一天中的時間和一周中的某天的新特徵(這稱為特徵交叉),讓模型學習交通模式。
稀疏模型(Sparse models)包含較少的特徵,因此更容易在有限的資料上進行訓練。特徵越少也意味著過度擬合的可能性越小。特徵更少也意味著更容易向人類解釋,因為只保留最有意義的特徵。
上圖是稀疏矩陣的樣子,非常非常寬,具有許多很多的特徵。我們想要使用線性模型來最小化自由參數的數量。如果各個column是獨立的,則線性模型就足夠了。
Bucketize與Transform函數
BUCKETIZE 是一個建立buckets 或 bins 的預處理函數。也就是說,它將連續的數值特徵分成幾個群租(稱為分桶)為以bucket name稱作為值的字串(string)特徵。在這裡,我們將所有的接送經緯度連接起來,並將它們放入儲存桶中。此函數為每一行輸出一個字串,即bucket name。 Bucket name的格式為bin。目前我們的模型使用 ST_geogpoint 函數來匯出接送特徵。
在進行預測之前,我們應該將整個特徵集封裝在 TRANSFORM 子句中。 BQ ML 現在支援在模型建立期間定義資料轉換,這將在預測和評估期間自動應用。這是透過現有建立模型語句中的 TRANSFORM 子句完成的。當使用 TRANSFORM 子句時,使用者在訓練期間指定的轉換將在模型服務、預測、評估等過程中自動套用。