b### 前言
不同于线性模型只能从利用数据的一阶特征,FM可以通过特征组合,利用数据的二阶甚至更高阶的特征,从而更好的完成回归或者分类任务。

下面,我们将分别介绍因子分解机(FM)、FFM以及DeepFM的原理。在此之后,我们将利用deepctr第三方库,对movielens数据集进行预测。

因子分解机

给定数据集T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\}T={(x1,y1),(x2,y2),...,(xN,yN)},其中,xi∈Rnx_i\in\mathbb{R}^nxiRnyiy_iyi为标签。通过线性模型预测,有
y^=w0+∑i=1nwi⋅x(i)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}y^=w0+i=1nwix(i)

但是这样是否就已经足够了呢?

举个例子,不同国家不同日期的用户购买决策

  • 数据特征维度:用户ID,国家,日期,商品
  • 数据1:0,中国,2016/02/05,灯笼
  • 数据2:1,美国,2016/12/25,火鸡
  • ……

上面的例子中,02/05是中国春节前夕,中国人更加倾向于购买年货;12/25是美国圣诞节前夕,美国人更加倾向于购买火鸡等过节物品。

这就说明v,当国家和日期这两个特征组合起来,构成的 国家+日期 这个新的特征,可能对用户购买商品的预测更有帮助。

这也是我们要用因子分解机的原因,因子分解机可以组合特征,利用一维特征和二维特征同时进行预测。

1. FM

我们在原有的线性模型上加入二阶特征,即FM,
y^=w0+∑i=1nwi⋅x(i)+∑i=1n∑j=i+1nwi,j⋅x(i)x(j)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}+\sum_{i=1}^n\sum_{j=i+1}^nw_{i, j}\cdot x^{(i)}x^{(j)}y^=w0+i=1nwix(i)+i=1nj=i+1nwi,jx(i)x(j)

这里,x(i)x(j)x^{(i)}x^{(j)}x(i)x(j)为二阶特征组合,wi,jw_{i, j}wi,j为二阶特征系数。

这存在一个问题,即原本数据集TTT中,能提取到多少二阶特征组合?一般来说,是非常少的,这就意味着仅仅能估计少量的wi,jw_{i, j}wi,j,而更多的系数无法估计。

为了解决这个困难,我们模仿MF的方法,令
wi,j=viTvjw_{i, j}=v_i^Tv_jwi,j=viTvj

其中,viv_ivikkk维列向量。这样,原始FM模型可以改为

y^=w0+∑i=1nwi⋅x(i)+∑i=1n∑j=i+1nviTvj⋅x(i)x(j)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}+\sum_{i=1}^n\sum_{j=i+1}^nv_i^Tv_j\cdot x^{(i)}x^{(j)}y^=w0+i=1nwix(i)+i=1nj=i+1nviTvjx(i)x(j)

紧接着,这带来计算复杂度的问题,为了计算∑i=1n∑j=i+1nviTvj⋅x(i)x(j)\sum_{i=1}^n\sum_{j=i+1}^nv_i^Tv_j\cdot x^{(i)}x^{(j)}i=1nj=i+1nviTvjx(i)x(j),计算的加法和乘法达到了O(kn2)O(kn^2)O(kn2)的复杂度。

为了简便计算,我们可以将原式化简,即
∑i=1n∑j=i+1nviTvj⋅x(i)x(j)=12(∑i=1n∑j=1nviTvj⋅x(i)x(j)−∑i=1nviTvi⋅x(i)x(i))=12((∑i=1nvix(i))2−∑i=1n(vix(i))2)\begin{array}{lll} &&\sum_{i=1}^n\sum_{j=i+1}^nv_i^Tv_j\cdot x^{(i)}x^{(j)}\\ &=&\frac{1}{2}(\sum_{i=1}^n\sum_{j=1}^nv_i^Tv_j\cdot x^{(i)}x^{(j)}-\sum_{i=1}^nv_i^Tv_i\cdot x^{(i)}x^{(i)})\\ &=& \frac{1}{2}\left((\sum_{i=1}^nv_ix^{(i)})^2-\sum_{i=1}^n(v_ix^{(i)})^2\right) \end{array} ==i=1nj=i+1nviTvjx(i)x(j)21(i=1nj=1nviTvjx(i)x(j)i=1nviTvix(i)x(i))21((i=1nvix(i))2i=1n(vix(i))2)

通过上面的化简,我们可以把计算的复杂度降为O(kn)O(kn)O(kn)

综上,我们可以把FM模型写为
y^=w0+∑i=1nwi⋅x(i)+12((∑i=1nvix(i))2−∑i=1n(vix(i))2)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}+\frac{1}{2}\left((\sum_{i=1}^nv_ix^{(i)})^2-\sum_{i=1}^n(v_ix^{(i)})^2\right)y^=w0+i=1nwix(i)+21((i=1nvix(i))2i=1n(vix(i))2)

用于回归问题时,我们可以采用平方误差,即
Loss=∑i=1N(yi−y^(xi))2Loss = \sum_{i=1}^N\left(y_i-\hat y(x_i)\right)^2Loss=i=1N(yiy^(xi))2

在二分类问题时,我们则可以采用logloss,即
Loss=−1N∑i=1N(yi⋅log(sigmoid(y^(xi)))+(1−yi)⋅log(sigmoid(y^(xi))))Loss=-\frac{1}{N}\sum_{i=1}^N\left(y_i\cdot log(sigmoid(\hat y(x_i)))+(1-y_i)\cdot log(sigmoid(\hat y(x_i)))\right)Loss=N1i=1N(yilog(sigmoid(y^(xi)))+(1yi)log(sigmoid(y^(xi))))

2. FFM

在FM模型中,我们用特征iii的隐向量viv_ivi来拟合二阶项系数wi,jw_{i, j}wi,j。实际上,我们的特征往往是通过one-hot编码得到。

举个例子

  • 原始两个特征:国家 节日
  • 数据1:中国 圣诞
  • 数据2:中国 春节
  • 数据3:美国 圣诞
  • 数据4:美国 春节
  • one-hot编码之后四个特征:国家_中国 国家_美国 节日_圣诞 节日_春节
  • 数据1:1 0 1 0
  • 数据2:1 0 0 1
  • 数据3:0 1 1 0
  • 数据4:0 1 0 1

编码之后有四个特征,它们两两组合,形成二阶特征。每个特征x(i)x^{(i)}x(i)都对应着一个隐向量viv_ivi,二阶特征的系数wi,jw_{i, j}wi,j即为对应两个特征隐向量的乘积viTvjv_i^Tv_jviTvj

但是,对于特征组合

  • 国家_中国 * 国家_美国
  • 国家_中国 * 节日_春节

而言,国家_中国 对应的都是同一个隐向量,我们说这可能并不合理。为了解决这个可能的问题,我们说,对于不同filed的特征,在特征组合时某个特征x(i)x^{(i)}x(i)对应的隐向量也应该不同。这里的field={国家,节日}。

具体来说,二阶特征的系数wi,jw_{i, j}wi,j即为对应两个特征隐向量的乘积vi,f(j)Tvj,f(i)v_{i,f(j)}^Tv_{j, f(i)}vi,f(j)Tvj,f(i),即
wi,j=vi,f(j)Tvj,f(i)w_{i, j}=v_{i,f(j)}^Tv_{j, f(i)}wi,j=vi,f(j)Tvj,f(i)

其中,f(i)f(i)f(i)是特征x(i)x^{(i)}x(i)所处的field。

这样,FFM模型可以写为
y^=w0+∑i=1nwi⋅x(i)+∑i=1n∑j=i+1nvi,f(j)Tvj,f(i)⋅x(i)x(j)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}+\sum_{i=1}^n\sum_{j=i+1}^nv_{i,f(j)}^Tv_{j, f(i)}\cdot x^{(i)}x^{(j)}y^=w0+i=1nwix(i)+i=1nj=i+1nvi,f(j)Tvj,f(i)x(i)x(j)

这个时候是没办法化简的。

3. DeepFM

上面的内容我们仅仅考虑了二阶特征组合,为了考虑更高阶特征组合的问题,我们引入深度神经网络(DNN)。

我们可以将DeepFM分成两个部分:

  • FM部分,提取一阶特征和二阶特征组合
  • DNN部分,提取更高阶的特征组合
  • 最后将两部分得到的结果结合起来,生成最终结果

由于我们的输入经过one-hot编码之后,变成一个非常庞大的稀疏矩阵,要想有效通过DNN得到结果,必须将其降维,一个通用的做法是通过dense embedding将输入转化为稠密的较小规模输入。

接下来,我们将分别说明,DeepFM如何获取一阶特征、二阶特征以及更高阶特征。

  • 在原有特征的基础上进行one-hot编码,得到的特征向量维度很大,却也稀疏
  • 一阶特征:FM部分,直接用one-hot编码之后获得的特征向量,进行线性相加
  • 二阶特征:FM部分,对one-hot编码之后获得的特征向量进行dense embedding,其实就是获得各个特征对应的隐向量的过程,对隐向量做乘法
  • 高阶特征:DNN部分,通过上面的步骤,获得每个特征的隐向量,对于一个输入,每个field内必然只有一个k维隐向量,将这些隐向量拼接起来,作为DNN的输入
  • 对于FM和DNN获得的结果,我们通过下式加以综合,作为最终结果 y^=sigmoid(yFM+yDNN)\hat y=sigmoid(y_{FM}+y_{DNN})y^=sigmoid(yFM+yDNN)

《推荐系统笔记(七)》因子分解机(FM)和它的推广(FFM、DeepFM)相关推荐

  1. 保持函数依赖的模式分解可以减轻或解决什么_推荐系统玩家 之 因子分解机FM(Factorization Machines)...

    前言 因子分解机 (Factorization Machines) 是CTR预估的重要模型之一.自2010年被提出后,得到了大规模的应该,也是美团和头条做推荐和CTR预估的方法之一.要讲述因子分解机F ...

  2. 推荐系统入门(三):矩阵分解MF因子分解机FM(附代码)

    推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 目录 推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 一. 矩阵分解MF 1. 隐含语义分析技术 1.1 隐语义 ...

  3. 【机器学习】因子分解机(FM) 原理及在召回中的应用(python实现)

    FM 原理及在召回中的应用(python实现) 1. 综述 为了学习推荐系统的召回模型,首先梳理了一下FM模型,权当是学习笔记,记录一下. FM(factor Machine,因子分解机)算法是一种基 ...

  4. 因子分解机(FM)家族

    写在前面的话   在深度学习(Deep Learning,以下简称DL)大行其道的今天,因子分解机(Factorization Machines,以下简称FM)以其模型简单.可解释性强等优点在搜索广告 ...

  5. 6、因子分解机FM介绍

    前言 在进行CTR(click through rate)预估时,除了单个特征外,通常要进行特征组合,FM算法是进行特征组合时的常见算法. 因子分解机(Factorization Machine),是 ...

  6. 因子分解机FM算法(Factorization Machine)

    背景 数据输入 以一个广告分类的问题为例,根据用户画像.广告位以及一些其他的特征,来预测用户是否会点击广告(二分类问题).数据如下: Clicked Country Sex Ad_type 1 USA ...

  7. TransFM:基于因子分解机的序列推荐方法

    ▌概述 今天解读的论文是由 Rajiv Pasricha 和 Julian McAuley 两位大佬提出的发表在 RecSys18 上的,是 TransRec 和 FM 的结合版本.论文下载地址: h ...

  8. 推荐系统学习笔记之四 Factorization Machines 因子分解机 + Field-aware Factorization Machine(FFM) 场感知分解机

    前言 Factorization Machines(FM) 因子分解机是Steffen Rendle于2010年提出,而Field-aware Factorization Machine (FFM) ...

  9. 推荐系统中的矩阵分解| 奇异值分解及改进、因子分解机

    网络中的信息量呈现指数式增长,随之带来了信息过载问题.推荐系统是大数据时代下应运而生的产物,目前已广泛应用于电商.社交.短视频等领域.本文将针对推荐系统中基于隐语义模型的矩阵分解技术来进行讨论. 目录 ...

最新文章

  1. 计算机密码行业专题研究:网络安全最大弹性领域
  2. Eclipse在高分屏下图标过小的解决方法
  3. [云炬创业基础笔记]第五章创业机会评估测试8
  4. Qt C++ 检测优盘插入或拔出
  5. Highcharts 本地导出图片 Java
  6. 通过实验理解交换的三个fast特性
  7. 1.并发问题产生的三大根源与解决sync锁 目录 1. 并发问题产生的三大根源 1 1.1. 原子性 CPU缓存会导致可见问题 指令重排序 1 2. 并发问题根源之一:CPU切换线程执导致的
  8. python总是下载失败_Python 下载依赖包环境经常失败超时解决方法
  9. 【freeradius】使用radclient调试radius协议
  10. 这一年我都做了什么......
  11. Python基础知识——变量与运算符
  12. 喜大普奔!Maya 2022来了?!
  13. 微信小程序座位预约,微信小程序实现订座位,餐厅座位预约小程序毕设作品
  14. 高通MSM8909:LCD hx8394d驱动调试
  15. 危化品爆炸场景下的应急通信系统解决方案
  16. android 自动设置时区,Android Things入门-设置本地时区
  17. VUE弹窗加载另一个VUE页面
  18. NAND驱动分析--(二)
  19. 湖北省宜昌市谷歌高清卫星地图下载
  20. 亚马逊无人便利店正式开业,深度学习技术更进一步

热门文章

  1. Minimum Inversion Number 线段树
  2. Java实验8 T2.编程包含一个文本框和一个文本区域
  3. ## CSP 201509-2 日期计算(C语言)(100分)
  4. 《南溪的目标检测学习笔记》——目标检测模型的设计笔记
  5. 东大OJ-最大子序列问题的变形
  6. Markdown标题、行首缩进、换行。csdn(1)
  7. 关于Meta标签中format-detection属性及含义
  8. [POJ3096]Surprising Strings
  9. 无向图的割顶、桥、BCC和eBCC相关
  10. mysql存入中文乱码解决方法(windows环境)