跳轉到

3.6 Mixed Feature DNN

範例程式:Open In Colab

實務表格資料很少只有純數值欄位。客戶資料會有城市、會員方案、裝置類型;工廠資料會有設備型號、產線、班別;交易資料會有通路、付款方式、商品類別。這些類別欄位不能直接丟進 Dense layer,必須先轉成模型可讀的數字表示。

本篇示範如何用 Keras Functional API 建立同時處理數值欄位與類別欄位的 DNN。

1. 為什麼需要 Functional API?

Sequential 適合單一路徑模型。但 mixed feature 任務有多種輸入:數值欄位需要 normalization,類別欄位需要 lookup 或 embedding,不同欄位處理後再合併。Functional API 可以清楚描述這種多輸入模型。

2. 範例資料

Notebook 建立一份合成客戶資料:ageincomevisits 是數值欄位;cityplandevice 是類別欄位;target 是二元分類標籤。

這種資料型態很接近真實表格資料。

3. 數值欄位前處理

normalizer = tf.keras.layers.Normalization()
normalizer.adapt(train_df[numeric_cols].astype('float32').values)

Normalization layer 會學習訓練集平均值與變異,並在模型內完成標準化。這樣模型保存時,前處理也會一起保存。

4. 類別欄位前處理

lookup = tf.keras.layers.StringLookup(output_mode='one_hot')
lookup.adapt(tf.constant(train_df[col].astype(str).values.reshape(-1, 1)))

StringLookup 會建立字串類別到向量的 mapping。類別少時 one-hot 很直覺;類別多時,可改成 integer lookup 搭配 embedding。

5. 合併多種輸入

每個輸入各自建立 Input,前處理後用 Concatenate() 合併,再接 Dense layers。這讓模型同時學習數值特徵與類別特徵。

6. 如何套用自己的資料?

先整理:

numeric_cols = ['age', 'income', 'visits']
categorical_cols = ['city', 'plan', 'device']
target_col = 'target'

所有 normalization 與 lookup 都只用訓練資料 adapt()

7. 小結

Mixed Feature DNN 是表格資料實務中的重要模板。它讓訓練與推論使用一致的前處理流程,也更接近部署需求。