1. 程式人生 > >Hulu機器學習問題與解答系列 | 二十二:特征工程—結構化數據

Hulu機器學習問題與解答系列 | 二十二:特征工程—結構化數據

實現 adk n) 過程 結果 點擊 推薦算法 cti 特征工程

聽說最近冒出的大批呱兒子個個都是撐著眼皮也要看書的無眠小青蛙。我們學習Machine Learning的腳步又怎能停下來?動動手指,上滑開始~

今天的內容是

【特征工程—結構化數據】

場景描述

特征工程是指結合問題尋找有效的特征並進行處理成適合模型的輸入形式。機器學習中有句經典的話叫做“Garbage in, garbage out”,意思是如果輸入的數據是垃圾,那麽得到的結果也是垃圾。可以看出模型成敗的關鍵並不僅僅取決於模型的選取,還取決於我們是否有根據特定的問題找到了行之有效的輸入。常用的數據可以分為結構化數據和非結構化數據,其中:結構化數據可以看成關系型數據庫的一張表,每列都有清晰的定義,包含了數值型、類別型兩種基本類型;非結構化數據主要包括文本數據和圖像數據,所有信息都是混在一起的,並沒有清晰的類別定義,並且每條數據的大小都是不一樣的。

問題描述

1. 為什麽需要對數值類型的特征做歸一化?

2. 怎樣處理類別型特征?

3. 怎樣處理高維組合特征?

4. 怎樣有效地找到組合特征?

解答與分析

1. 為什麽需要對數值類型的特征做歸一化?

對數值類型的特征做歸一化(normalization)可以將所有的特征都統一到一個大致相同的區間內。最常用的歸一化是z-score normalization,它會將特征變換映射到以均值為0、標準差為1的正態分布上。準確的來說,假設原始特征的均值為μ、標準差為σ,那麽z-score normalization定義為:

技術分享圖片

為什麽通常需要對數值型做歸一化呢?我們可以借助隨機梯度下降來說明歸一化的重要性。假設有兩種數值型特征,x

1的取值範圍為[0, 10],x2的取值範圍為[0, 3],可以構造一個目標函數符合以下等值圖:

技術分享圖片

在學習速率相同的情況下,x1的更新速度會大於x2,需要更多的叠代才能找到最優值[1]。如果將x1x2歸一化到相同的區間後,則優化目標的等值圖會變成右圖的圓形,x1x2的更新速度會比較一致,能夠更快的找到最優值。

那麽歸一化適用於哪些模型,又對哪些模型是不適用的呢?首先,通過梯度下降法求解的模型是需要歸一化的,包括包括線性回歸、logistic regression、支持向量機(Support Vector Machine)、神經網絡(Neuro Network)。但對於決策樹模型則是不適用的,以C4.5為例,決策樹在進行節點分裂時主要依據的是x >= threshold 和 x < threshold的信息增益比,而信息增益比跟x是否經過歸一化是無關的,因為歸一化並不會改變樣本在x上的相對順序。

2. 怎樣處理類別型特征?

類別型特征(categorical feature)主要是指性別(男、女)、血型(A、B、AB、O)等類似的在有限選項內取值的特征。通常類別型特征原始輸入都是字符串形式,只有決策樹等少數模型能直接處理字符串形式的輸入。對於Logistic Regression、線性支持向量機等模型來說,類別型特征必須經過處理轉換成數值型特征才能正確工作。

本節主要介紹三種常用的轉換方法:Ordinal Encoding、One-hot Encoding、Binary Encoding。

Ordinal Encoding通常用於處理類別間具有大小關系的數據,例如成績可以分為Low、Medium、High三檔,並且存在High > Medium > Low的排序關系。Ordinal Encoding會按照大小關系對類別型特征賦予一個數值ID,例如High表示為3、Medium表示為2、Low表示為1,轉換後依然保留了大小關系。

One-hot Encoding通常用於處理類別間不具有大小關系的特征,以血型為例,血型一共有四個取值(A、B、AB、O),在One-hot Encoding後血型會變成一個4維稀疏向量:A型血表示為(1, 0, 0, 0),B型血表示為(0, 1, 0, 0),AB型表示為(0, 0, 1, 0),O型血表示為(0, 0, 0, 1)。對於類別取值較多的情況下使用One-hot Encoding需要註意以下問題:

  • 使用稀疏向量來節省空間:在One-hot Encoding下,只有某一維取值為1,其他位置取值均為0。因此可以用向量的稀疏表示來有效節省空間,並且目前大部分的算法都會實現接受稀疏向量形式的輸入。

  • 配合特征選擇來降低維度:高維度特征會帶來兩方面的問題:(1)在K近鄰算法中,高緯空間下兩點之間的距離很難得到有效的衡量; (2) 在Logistic Regression中,模型的參數的數量會隨著維度的增高而增加,容易引起過擬合問題; (3) 通常只有部分維度是對分類、預測有幫助,因此可以考慮配合特征選擇來降低維度。

最後介紹Binary Encoding,該方法主要分為兩步:用Ordinal Encoding給每個類別賦予一個ID,然後將ID對應的二進制編碼作為結果。以血型A、B、AB、O為例,Binary Encoding的過程如下圖所示:A型血的Ordinal Encoding為1,二進制表示為(0, 0, 1);B型血的Ordinal Encoding為2,二進制表示為(0, 1, 0),以此類推可以得到AB型血和O型血的二進制表示。可以看出,Binary Encoding本質上是利用二進制編碼對ID進行哈希,最終得到了0/1向量維數要少於One-hot Encoding,節省了空間。

技術分享圖片

除了本章介紹的Encoding方法外,有興趣的讀者還可以參照[2]了解其他的編碼方式,包括Helmert Contrast、Sum Contrast、Polynomial Contrast、Backward Difference Contrast。

3. 怎樣處理高維組合特征?

為了提高復雜關系的擬合能力,在特征工程中經常會把一階離散特征兩兩組合成高階特征,構成交互特征(Interaction Feature)。以廣告點擊預估問題為例,如圖1所示,原始數據有語言和類型兩種離散特征。為了提高擬合能力,語言和類型可以組成二階特征,如圖2所示:

技術分享圖片

△ 圖1

技術分享圖片

△ 圖2

以Logistic Regression為例,假設數據的特征向量X = (x_1, x_2, …, x_k),我們有

技術分享圖片

wij的維度等於|xi| * |xj|。在上面的廣告點擊預測問題當中,w的維度是4(2x2,語言取值為中文或者英文、 類型的取值為電影或者電視劇)。

在上面廣告預測的問題看起來特征組合是沒有任何問題的,但當引入ID類型的特征時,問題就出現了。以推薦問題為例,原始數據如圖3所示,用戶ID和物品ID組合成新的特征後的數據如圖4所示:

技術分享圖片

△ 圖3

技術分享圖片

△ 圖4

假設用戶的數量為m、物品的數量為n,那麽需要學習的參數的規模為m × n。在互聯網環境下,用戶數量和物品數量都可以到達千萬量級,幾乎無法學習m × n的參數規模。在這種情況下,一種行之有效的方法是將用戶和物品分別用k維的低維向量表示(k << m, k << n),

技術分享圖片

其中wijxi · xj,在這裏xixj分別表示對應的低維向量。在上面的推薦問題中,需要學習的參數的規模為m × k + n × k。熟悉推薦算法的同學可以看出來這等於矩陣分解,希望這篇文章提供了另一個理解矩陣分解的思路。

4. 怎樣有效地找到組合特征?

在上節中我們介紹了如何利用降維方法來減少兩個高維特征進行組合需要學習的參數。但是在很多實際數據當中,我們常常需要面對多種高維特征。如果簡單的兩兩組合,參數過多、容易過擬合的問題依然存在,並且並不是所有的特征組合都是有意義地。因此,我們迫切需要一種有效地方法來幫助我們找到哪些特征應該進行組合。

本節介紹介紹一種基於決策樹的特征組合尋找方法[3]。以點擊預測問題為例,假設原始輸入特征包含年齡、性別、用戶類型(試用期、付費)、物品類型(護膚、食品等)四個方面的信息,並且假設我們根據原始輸入和標簽(點擊與否)構造出了兩個決策樹,那麽每一條從根節點到葉子節的路徑都可以看成一種特征組合的方式。具體來說,我們可以將“年齡<=35”且“性別=女”看成一個特征組合,將“年齡<=35”且“物品類別=護膚”看出是一個特征組合,將“用戶類型=付費”且“物品類型=食品”看成是一種特征組合,將“用戶類型=付費”且“年齡<=40”看成是一種特征組合。假設我們有兩個樣本如下表所示,那麽第一行可以編碼為(1, 1, 0, 0),因為既滿足“年齡<=35”且“性別=女”,也滿足“年齡<=35”且“物品類別=護膚”。同理可以看出第二個樣本可以編碼為(0, 0, 1, 1),因為既滿足“用戶類型=付費”且“物品類型=食品”,又滿足“用戶類型=付費”且“年齡<=40”。

技術分享圖片技術分享圖片

最後,那麽給定原始輸入該如何有效構造多棵決策樹呢?在這裏我們采用梯度提升決策樹 (gradient boosting decision tree),該方法地思想是每次都在之前構建的決策樹的殘差(residual)上構建下一棵決策樹,對GDBT感興趣的讀者可以參考原始文獻[4]。

參考文獻:

[1] https://www.coursera.org/learn/machine-learning

[2] http://contrib.scikit-learn.org/categorical-encoding/index.html

[3] Practical Lessons from Predicting Clicks on Ads at Facebook, ADKDD’14

[4] J. H. Friedman. Greedy function approximation: A gradient boosting machine. Annals of Statistics, 29:1189–1232, 1999.


下一題預告

【神經網絡訓練中的批量歸一化】

場景描述

深度神經網絡的訓練中涉及諸多手調參數,如學習率,權重衰減系數,Dropout比例等,這些參數的選擇會顯著影響模型最終的訓練效果。批量歸一化(Batch Normalization, BN)方法從數據分布入手,有效減弱了這些復雜參數對網絡訓練產生的影響,在加速訓練收斂的同時也提升了網絡的泛化能力。

問題描述

1. BN基本動機與原理是什麽?

2. BN的具體實現中怎樣恢復前一層學習到的特征分布?

3. 簡述BN在卷積神經網絡中如何使用?(簡述)

Hulu機器學習問題與解答系列 | 二十二:特征工程—結構化數據