扒一扒 FM 算法的实现
发布网友
发布时间:2024-09-04 08:46
我来回答
共1个回答
热心网友
时间:2024-11-23 02:56
FM模型源自LR和POLY2,与POLY2的区别在于使用两个向量的内积取代单一的权重系数。具体来说,FM为每个特征学习了一个隐向量权重,在做特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。
模型的表达式如下:
[公式]
其中,[公式] 代表特征数量,[公式]是第 [公式] 个特征的值, [公式] 是模型参数。
[公式]
FM算法引入隐向量的做法,与矩阵分解用隐向量表示用户和物品的做法类似。FM是将矩阵分解隐向量的思想进行了扩展,从单纯的user embedding、item embedding扩展到了所有的特征上。
隐向量的引入使FM能够更好地解决数据稀疏性的问题。举例来说,在某商品推荐的场景下,样本有2个特征,分别是频道(channel)和品牌(brand),某训练样本的特征组合是 (ESPN, Adidas)。在POLY2中,只有当ESPN和Adidas同时出现在一个训练样本中,模型才能学到这个组合特征对应的权重;而在FM中,ESPN的隐向量也可以通过(ESPN, Nike)样本进行更新,Adidas的隐向量也可以通过(NBC, Adidas)进行更新,大幅度降低了模型对数据稀疏性的要求。同时对于一个未曾出现过的组合 (NBC, Nike),由于模型之前已经分别学习过NBC和Nike的隐向量,已经具备计算该特征组合权重的能力,泛化性得到大幅提升。
代码安排:
1. 先使用原生的模式计算一下交叉项,即: [公式]
2. 使用隐向量模式计算一下交叉项,即: [公式]
可以看到方式1和方式2的结果是一致的。
接下来继续,通过实际例子应用一下FM算法。
一、准备数据
titanic数据集 的目标是根据乘客信息预测他们在Titanic号撞击冰山沉没后能否生存。结构化数据一般会使用Pandas中的DataFrame进行预处理。
字段说明:
二、构建模型
(1)加载python模块
(2)定义类别变量的输入层和Embedding层
(3)定义线性层、FM二阶交叉层、预测层
(4)定义FM模型结构
(5)开始应用 FM 模型
(6)打印FM 模型 summary
(7)输出FM 模型结构图
(8)编译 FM 模型,训练模型
(9)绘制损失函数图
参考:
1. 深度学习推荐系统,王喆著
2. FM算法解析, 王多鱼:FM算法解析
3. shenweichen/DeepCTR
4. 结构化数据建模流程范例.md