代码逻辑分析:改进的 Wide & Deep 模型
1. 核心目标
这段代码构建了一个改进版的 Wide & Deep 模型(Google 提出的经典推荐系统模型):
-
Wide 部分:捕捉特征间的直接关系(如用户点击了某个商品)
-
Deep 部分:捕捉深层特征组合(如用户偏好+商品特征的复杂关联)
-
创新点:增加了特征交叉层强化特征交互能力
2. 模型结构详解
(1) 输入层
wide_input = Input(shape=(wide_dim,), name='wide_input') # 宽输入:原始特征(如用户ID/商品ID)
deep_input = Input(shape=(deep_dim,), name='deep_input') # 深输入:嵌入特征(如用户偏好向量)
-
Wide 输入:低维特征(如用户行为统计)
-
Deep 输入:高维特征(如嵌入向量)
(2) 特征交叉层(创新点)
cross_layer = Dense(deep_dim, activation='relu')(wide_input)
cross_layer = Dense(deep_dim, activation='relu')(cross_layer) # 二次特征交叉
-
目的:自动学习 Wide 特征的组合关系(如“年轻用户+折扣商品”组合)
-
相当于用全连接层实现特征交叉(类似 FM 的升级版)
(3) Deep 路径
deep_path = Dense(256, activation='relu')(deep_input)
deep_path = Dense(128, activation='relu')(deep_path) # 经典MLP结构
-
通过多层神经网络挖掘 深层特征模式
-
类似人类大脑的抽象思考(例如从点击历史推断用户兴趣)
(4) 合并与输出
merged = concatenate([cross_layer, deep_path]) # 特征融合
output = Dense(1, activation='sigmoid')(merged) # 二分类概率输出
-
合并层:将记忆能力(Wide)与泛化能力(Deep)结合
-
Sigmoid 输出:预测用户行为概率(如点击率 CTR)
3. 模型编译配置
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), # 自适应学习率
loss='binary_crossentropy', # 二分类标准损失
metrics=['accuracy', tf.keras.metrics.AUC(name='auc')] # AUC评估排序能力
)
-
Adam 优化器:自动调整学习步长
-
AUC 指标:关键推荐指标(衡量正负样本区分能力)
4. 模型设计思想
组件 | 类比解释 | 推荐系统作用 |
---|---|---|
Wide 部分 | 人的短期记忆(记住具体事件) | 捕捉直接关联规则 |
Deep 部分 | 人的长期经验(抽象认知) | 发现潜在兴趣模式 |
特征交叉层 | 事件关联分析(分析规律) | 自动组合特征提升表达能力 |
AUC 指标 | 考试排名(区分好/差学生) | 衡量推荐排序质量 |
新人学习要点
-
分治思想:复杂模型 = Wide + Deep + 交叉层(各司其职)
- 特征工程:
-
Wide 特征:人工设计的特征组合
-
Deep 特征:神经网络自动学习
-
-
评估指标:AUC 比准确率更能反映推荐效果
- Keras 范式:
输入层 → 处理层 → 合并层 → 输出层 → 编译
💡 业务场景:当需要同时处理明确规则(如"iPhone用户常买AirPods")和隐性模式(如"科技爱好者偏好极简设计")时,此类模型特别有效。