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

「特徵工程—結構化數據」

[場景描述]

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

[問題描述]

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

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

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

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

[解答與分析]

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

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

為什麼通常需要對數值型做歸一化呢?我們可以藉助隨機梯度下降來說明歸一化的重要性。假設有兩種數值型特徵,x1的取值範圍為[0, 10],x2的取值範圍為[0, 3],可以構造一個目標函數符合以下等值圖:

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

那麼歸一化適用於哪些模型,又對哪些模型是不適用的呢?首先,通過梯度下降法求解的模型是需要歸一化的,包括包括線性回歸、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] coursera.org/learn/mach

[2] contrib.scikit-learn.org

[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」微信公號,點擊菜單欄「機器學習」獲得更多系列文章。下期再見。

weixin.qq.com/r/_EMrM0T (二維碼自動識別)


推薦閱讀:

AI大事件丨Paige.ai斥資將機器學習帶入癌症病理學
何愷明團隊計算機視覺最新進展:從特徵金字塔網路、Mask R-CNN 到學習分割一切
阿里巴巴6大行業報告免費分享啦!限時0積分下載!
商湯研究院招個一兩個實習生
前沿 | 人工智慧如何攻佔仲裁領域?

TAG:人工智慧 | 機器學習 | 面試問題 |