reference:知乎 FM算法解析
其实为什么常把连续值的变量进行分桶,我也不是很清楚… 只是大家都这么干…似乎效果会更好
poly2算法引入二阶交叉
二阶交叉能提升模型的表达能力(辛普森悖论)
先进行特征的笛卡尔积,然后在赋予这个笛卡尔积各值一个权重。举例:
3个特征分别是:
poly2算法就是先对特征进行笛卡尔积获得交叉特征,然后在交叉特征的基础上做LR,所以在此时会生成三个新二阶特征:
可以看到,此时二阶特征的候选集就一下子大了很多,每一个候选项都会对应一个权重(当特征为1的时候,该权重生效;特征为0的时候,权重就不生效,也不会得到反向传播的梯度进行自我更新),所以此时二阶交叉特征的权重变成了6+9+6=21个(一阶特征的权重有3+2+3=8个)。我举的例子中一阶特征候选集不大,但实际中一阶特征候选集是会比较大的(也就是常说的特征稀疏),比如类目特征可能就有几百上千维,再和另一个比较稀疏的特征进行笛卡尔积,二阶交叉特征的权重数量就会陡增,同时也因为两个稀疏特征的共现概率更低了,所以训练收敛难度会更高。
FM进行计算简化
其实现在大部分的W&D的模型里面,one-hot向量映射到embedding向量的过程,就是因式分解的一个过程;wide侧的手动特征交叉则是POLY2的思想
复杂度分析:
下一篇:什么是ChatGPT?