2021年2月26日 星期五

Feature Cross 模式:Machine Learning Design Patterns #3

本文為機器學習系統設計的好書 Machine Learning Design Patterns 中介紹的第三個模式:Feature Cross 的筆記。Feature cross 是一種常見的技巧,用來幫助模型學習不同特徵之間的關係,通常的作法是將數個特徵組合而成一個新的特徵。

書中拿紐約市的計程車資料當作例子。原始的資料包含了乘車時間、乘車經緯度、下車經緯度、以及計程車車資。而我們可以想到的是在平日尖峰時間以及假日或深夜的車資會因總共所花的時間不同,因此如果可以從原始的乘車時間擷取出星期幾(總共有七天)以及哪一個小時乘車(總共有二十四小時)結合起來成一個新的特徵,也就是一個 168 維的 one-hot encoding 表示哪一天的哪一小時上車,這樣很有可能將車資的模型建構得更好。

若使用 TensorFlow 的話,可以直接用 tf.feature_column.crossed_column 來實作 feature cross。Neural Network playground 中的 X1X2 也是一種常見的 feature cross 實作方法(如下圖所示)。

Feature Cross

 

  1. 處理 numerical 的特徵:在很多情況下資料是一個整數或浮點數,因此通常如果想 feature cross 的話我們會先將輸入的數字 bucketize,再 feature cross。
  2. 特徵的 high cardinality:feature cross 後的 one-hot encoding 向量維度很高,這時可用 embedding 來降低維度。
  3. Regularization:feature cross 會使每個 bucket 中的資料量不多,容易 overfitting。加入 L1 或 L2 regularization 可以幫助解決 overfitting 的問題。
  4. 要 cross 的特徵應該要盡可能越互相獨立越好,否則 cross 的新特徵與原本的特徵不會有太大區別。

 

沒有留言:

張貼留言