推荐系统 FM因式分解

reference:知乎 FM算法解析

  • LR算法没有二阶交叉
    在这里插入图片描述
    如果是id类特征,这里的x是0/1,raw的特征输入就是float,当然,在我的理解里,一般会把raw的特征进行分桶,还是映射到0/1特征,不然这个 w i w_i wi的功能也太重了…?(想想其实是没有道理的)

其实为什么常把连续值的变量进行分桶,我也不是很清楚… 只是大家都这么干…似乎效果会更好

  • poly2算法引入二阶交叉
    二阶交叉能提升模型的表达能力(辛普森悖论)
    先进行特征的笛卡尔积,然后在赋予这个笛卡尔积各值一个权重。举例:

    3个特征分别是:

    • f1国家( 候选集为{中国,美国,加拿大} )
    • f2性别( 候选集为{男,女} )
    • f3人群( 候选集为{青年,中年,老年} )

    poly2算法就是先对特征进行笛卡尔积获得交叉特征,然后在交叉特征的基础上做LR,所以在此时会生成三个新二阶特征

    • f1f2国家x性别( 候选集为{中国男,中国女,美国男,美国女,加拿大男,加拿大女} )
    • f1f3国家x人群( 候选集为{中国青年,中国中年,中国老年,美国青年,美国中年,美国老年,加拿大青年,加拿大中年,加拿大老年} )
    • f2f3性别x人群( 候选集为{男青年,男中年,男老年,女青年,女中年,女老年} )。

    可以看到,此时二阶特征的候选集就一下子大了很多,每一个候选项都会对应一个权重(当特征为1的时候,该权重生效;特征为0的时候,权重就不生效,也不会得到反向传播的梯度进行自我更新),所以此时二阶交叉特征的权重变成了6+9+6=21个(一阶特征的权重有3+2+3=8个)。我举的例子中一阶特征候选集不大,但实际中一阶特征候选集是会比较大的(也就是常说的特征稀疏),比如类目特征可能就有几百上千维,再和另一个比较稀疏的特征进行笛卡尔积,二阶交叉特征的权重数量就会陡增,同时也因为两个稀疏特征的共现概率更低了,所以训练收敛难度会更高。

  • FM进行计算简化

    • 先将特征映射成稠密的隐向量,可以理解为one-hot的候选集映射到一个embedding-lookup table中
    • 复杂度分析
      • 参数量复杂度
      • 计算时间复杂度 O ( k n 2 ) O(kn^2) O(kn2) --> O ( k n ) O(kn) O(kn)
  • 其实现在大部分的W&D的模型里面,one-hot向量映射到embedding向量的过程,就是因式分解的一个过程;wide侧的手动特征交叉则是POLY2的思想

  • 复杂度分析:无论是训练还是推理,都是O(kn),其实参数量也是,具体分析见 知乎 FM算法解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值