AFM (Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks)
可参考我的知乎专栏 推荐算法也可以很简单
├── utils.py
│ ├── create_criteo_dataset # Criteo 数据预处理,返回划分好的训练集与验证集,以及记录数值特征与类别特征的字典
├── layer.py
│ ├── Interaction_layer # 交互层
│ ├── Attention_layer # 注意力层
│ ├── AFM_layer # AFM 层
├── model.py
│ ├── AFM # AFM 模型搭建
├── train.py
│ ├── main # 将处理好的数据输入 AFM 模型进行训练,并评估结果
选择 Criteo 作为实验数据集,这里只使用部分样本(2000个)进行训练。
样本字段:
I1~I13:数值特征
C14~C39:类别特征
预处理:
- 对数值特征 I1~I13 的缺失值进行填充, 然后进行归一化处理;
- 对类别特征 C14~C39 进行 onehot 编码, 转换成稀疏的数值特征;
- 将数值特征与类别特征用字典保存为 feature_columns;
- 切分数据集,返回 feature_columns, (train_X, train_y), (test_X, test_y)。
模型准确率: Accuracy: 0.785
loss下降曲线: