一,FM算法:

1,逻辑回归上面进行了交叉特征。算法复杂度优化从O(n^3)->O(k*n^2)->O(k*n)。

2,本质:每个特征都有一个k维的向量,代表的是每个特征都有k个不可告人的信息。(FFM:面对不同的字段field都有k个不可告人的信息。)所以,得到了n*k的矩阵,每一行就是每一个特征的向量。

3,原理推导:https://zhuanlan.zhihu.com/p/37963267

4,代码:https://github.com/challenge-ICME2019-Bytedance/Bytedance_ICME_challenge/blob/master/model_zoo/fm.py

二,FFM算法:

1,FM上面多了一层field信息。

2,本质:每个特征面对不同的字段field都有k个不可告人的信息。

3,原理推导:

4,代码:

三,DeepFM:

1,把所有特征都embedding,FM和DNN并行。

2,本质:(DNN学习了高阶特征,两个模型共享了embedding。)

3,原理推导:https://www.jianshu.com/p/6f1c2643d31b   https://blog.csdn.net/horizonheart/article/details/89632046

4,代码:

5,优点:

  1. 不需要预训练FM得到隐向量
  2. 不需要人工特征工程
  3. 能同时学习低阶和高阶的组合特征
  4. FM模块和Deep模块共享Feature Embedding部分,可以更快的训练,以及更精确的训练学习

四,wide&deep:

1, 把逻辑回归和深度学习进行了结合,神经网络学习出来的向量和特征一起给逻辑回归。

2,本质:准确性和多样性。wide负责记忆,深度进行泛化(业务理解:多样性,尤其是对于没有同时出现过的特征)https://zhuanlan.zhihu.com/p/57247478

3,原理

4,代码:

五:模型之间的对比:

https://blog.csdn.net/ISMedal/article/details/100578354

在CTR预估以及推荐系统等场合下:

  • LR: LR最大的缺点就是无法组合特征,依赖于人工的特征组合,这也直接使得它表达能力受限,基本上只能处理线性可分或近似线性可分的问题。
  • FM: FM通过隐向量latent vector做内积来表示组合特征,从理论上解决了低阶和高阶组合特征提取的问题。但是实际应用中受限于计算复杂度,一般也就只考虑到2阶交叉特征。后面又进行了改进,提出了FFM,增加了Field的概念。
  • CNN: CNN模型的缺点是:偏向于学习相邻特征的组合特征。
  • RNN: RNN模型的缺点是:比较适用于有序列(时序)关系的数据。
  • FNN: 先使用预先训练好的FM,得到隐向量,然后作为DNN的输入来训练模型。缺点在于:受限于FM预训练的效果,Embedding的参数受FM的影响,不一定准确;预训练阶段增加了计算复杂度,训练效率低; FNN只能学习到高阶的组合特征。模型中没有对低阶特征建模。
  • PNN: PNN为了捕获高阶组合特征,在embedding layer和first hidden layer之间增加了一个product layer。但是内积的计算复杂度依旧非常高,原因是:product layer的输出是要和第一个隐藏层进行全连接的;product layer的输出需要与第一个隐藏层全连接,导致计算复杂度居高不下;和FNN一样,只能学习到高阶的特征组合。没有对于1阶和2阶特征进行建模。
  • Wide&Deep:同时学习低阶和高阶组合特征,它混合了一个线性模型(Wide part)和Deep模型(Deep part)。这两部分模型需要不同的输入,而Wide part部分的输入,依旧依赖人工特征工程。

但是,这些模型普遍都存在一个问题:偏向于提取低阶或者高阶的组合特征。不能同时提取这两种类型的特征。 需要专业的领域知识来做特征工程。无论是FNN还是PNN,他们都有一个绕不过去的缺点:对于低阶的组合特征,学习到的比较少。

  • DeepFM:在Wide&Deep的基础上进行改进,不需要预训练FM得到隐向量,不需要人工特征工程,能同时学习低阶和高阶的组合特征;FM模块和Deep模块共享Feature Embedding部分,可以更快的训练,以及更精确的训练学习。

六,深度学习:

1,https://www.cnblogs.com/liuyihai/p/8448977.html

2,

推荐算法之---FM算法;的更多相关文章

  1. FM算法(一):算法理论

    主要内容: 动机 FM算法模型 FM算法VS 其他算法   一.动机 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合:非线性SVM可 ...

  2. CTR预估算法之FM, FFM, DeepFM及实践

    https://blog.csdn.net/john_xyz/article/details/78933253 目录目录CTR预估综述Factorization Machines(FM)算法原理代码实 ...

  3. FM算法

    1.FM背景 在计算广告中,CTR预估(click-through rate)是非常重要的一个环节,因为DSP后面的出价要依赖于CTR预估的结果.在前面的相关博文中,我们已经提到了CTR中相关特征工程 ...

  4. FM算法解析及Python实现

    1. 什么是FM? FM即Factor Machine,因子分解机. 2. 为什么需要FM? 1.特征组合是许多机器学习建模过程中遇到的问题,如果对特征直接建模,很有可能会忽略掉特征与特征之间的关联信 ...

  5. FM算法(二):工程实现

    主要内容: 实现方法 Python实现FM算法 libFM   一.实现方法 1.FM模型函数 变换为线性复杂度的计算公式: 2.FM优化目标 根据不同的应用,FM可以采用不同的损失函数loss fu ...

  6. FM算法 的总结

    FM的总结: 1.FM算法与线性回归相比增加了特征的交叉.自动选择了所有特征的两两组合,并且给出了两两组合的权重. 2.上一条所说的,如果给两两特征的组合都给一个权重的话,需要训练的参数太多了.比如我 ...

  7. FM算法及FFM算法

    转自:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html http://blog.csdn. ...

  8. 个性化排序算法实践(一)——FM算法

    因子分解机(Factorization Machine,简称FM)算法用于解决大规模稀疏数据下的特征组合问题.FM可以看做带特征交叉的LR. 理论部分可参考FM系列,通过将FM的二次项化简,其复杂度可 ...

  9. (转载)FM 算法

    (转载)FM算法 https://zhuanlan.zhihu.com/p/33184179

随机推荐

  1. batchsize用法 平均准确度和平均损失,以及实现前向运算的矩阵乘法方式,loss怎么反向传播的

    batchsize用法 平均准确度和平均损失,以及实现前向运算的矩阵乘法方式,loss怎么反向传播的 待办 使用batchsize可以把矩阵缩小,采用矩阵乘法的形式可以一次计算多个经过神经网络的结果, ...

  2. [CodeForces]Educational Round 52

    幸好我没有打这场,我VP的时候在C题就卡死了,我果然还是太菜了. A Vasya and Chocolate 题意:一个巧克力\(c\)元,买\(a\)赠\(b\),一共有\(n\)元,问能买几个巧克 ...

  3. python如何离线装包 离线如何部署python环境

    1,安装python windows: 我用的是python3.6.6.exe安装包,需要提前下载好 ubuntu: 自带的python,如果是ubuntu18.04的话,自带的应该是3.6.8 2, ...

  4. util之Set

    1.定义: Set<Integer>set = new TreeSet<Integer>(); 注意: TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不 ...

  5. layui表单之单选框提交

    <div class="layui-form-item"> <label class="layui-form-label">状态< ...

  6. input如何上传文件

    1)绑定input[type='file']的change事件 <input @change="uploadPhoto($event)" type="file&qu ...

  7. 题解【洛谷P3662】[USACO17FEB]Why Did the Cow Cross the Road II S

    本题是练习前缀和的好题!我们可以枚举前端点,确定一个长度为k的区间,然后利用前缀和统计区间内损坏的灯的数量,最后取最小值即可.AC代码: #include <bits/stdc++.h> ...

  8. python 小故事1

    def test(a:str,b:int)->str: print(test.__annotations__) return a+str(b) def doc_print(): "&q ...

  9. jmeter的使用---用户变量

    用户变量有以下方式: 一.外部引入:csv引入参数 二.sample传递参数:http请求的body参数 三.定义用户变量:全局变量 (1)用户定义的变量 name,和value   一对一 (2)用 ...

  10. centos7安装Nginx 配置及反向代理

    Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Ngin ...