- 原始论文: Factorization Machines
- 代码实例:fm.py
理论解读
- 计算公式:
- 解读: $v_i,v_j 是x_i,x_j 对应的特征向量$,<*,*>是向量内积
具体实现
整体部分
FM
是由2部分来实现的,线性部分和交叉项部分。而且其所有的输入均为类别性特征,不存在连续值特征。所以整体实现如下:
线性部分
线性部分
:该部分的实现主要依赖Embedding
映射,其中offsets
部分可以忽略,该部分只对二维的数据起作用,而且用以映射embedding。
交叉项部分
交叉项部分
:该部分是对交叉项的实现,而且使用了效率最高的实现方式。原公式中交叉项的时间复杂度是$O(kn^2)$,经过简化 时间复杂度可以变成$O(kn)$。这部分网上有大把资料不做赘述。