《推荐系统笔记(七)》因子分解机(FM)和它的推广(FFM、DeepFM)
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}^nxi∈Rn,yiy_iyi为标签。通过线性模型预测,有
y^=w0+∑i=1nwi⋅x(i)\hat y=w_0+\sum_{i=1}^nw_i \cdot x^{(i)}y^=w0+i=1∑nwi⋅x(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=1∑nwi⋅x(i)+i=1∑nj=i+1∑nwi,j⋅x(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_ivi为kkk维列向量。这样,原始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=1∑nwi⋅x(i)+i=1∑nj=i+1∑nviTvj⋅x(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=1n∑j=i+1nviTvj⋅x(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=1n∑j=i+1nviTvj⋅x(i)x(j)21(∑i=1n∑j=1nviTvj⋅x(i)x(j)−∑i=1nviTvi⋅x(i)x(i))21((∑i=1nvix(i))2−∑i=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=1∑nwi⋅x(i)+21((i=1∑nvix(i))2−i=1∑n(vix(i))2)
用于回归问题时,我们可以采用平方误差,即
Loss=∑i=1N(yi−y^(xi))2Loss = \sum_{i=1}^N\left(y_i-\hat y(x_i)\right)^2Loss=i=1∑N(yi−y^(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=1∑N(yi⋅log(sigmoid(y^(xi)))+(1−yi)⋅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=1∑nwi⋅x(i)+i=1∑nj=i+1∑nvi,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)相关推荐
- 保持函数依赖的模式分解可以减轻或解决什么_推荐系统玩家 之 因子分解机FM(Factorization Machines)...
前言 因子分解机 (Factorization Machines) 是CTR预估的重要模型之一.自2010年被提出后,得到了大规模的应该,也是美团和头条做推荐和CTR预估的方法之一.要讲述因子分解机F ...
- 推荐系统入门(三):矩阵分解MF因子分解机FM(附代码)
推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 目录 推荐系统入门(三):矩阵分解MF&因子分解机FM(附代码) 一. 矩阵分解MF 1. 隐含语义分析技术 1.1 隐语义 ...
- 【机器学习】因子分解机(FM) 原理及在召回中的应用(python实现)
FM 原理及在召回中的应用(python实现) 1. 综述 为了学习推荐系统的召回模型,首先梳理了一下FM模型,权当是学习笔记,记录一下. FM(factor Machine,因子分解机)算法是一种基 ...
- 因子分解机(FM)家族
写在前面的话 在深度学习(Deep Learning,以下简称DL)大行其道的今天,因子分解机(Factorization Machines,以下简称FM)以其模型简单.可解释性强等优点在搜索广告 ...
- 6、因子分解机FM介绍
前言 在进行CTR(click through rate)预估时,除了单个特征外,通常要进行特征组合,FM算法是进行特征组合时的常见算法. 因子分解机(Factorization Machine),是 ...
- 因子分解机FM算法(Factorization Machine)
背景 数据输入 以一个广告分类的问题为例,根据用户画像.广告位以及一些其他的特征,来预测用户是否会点击广告(二分类问题).数据如下: Clicked Country Sex Ad_type 1 USA ...
- TransFM:基于因子分解机的序列推荐方法
▌概述 今天解读的论文是由 Rajiv Pasricha 和 Julian McAuley 两位大佬提出的发表在 RecSys18 上的,是 TransRec 和 FM 的结合版本.论文下载地址: h ...
- 推荐系统学习笔记之四 Factorization Machines 因子分解机 + Field-aware Factorization Machine(FFM) 场感知分解机
前言 Factorization Machines(FM) 因子分解机是Steffen Rendle于2010年提出,而Field-aware Factorization Machine (FFM) ...
- 推荐系统中的矩阵分解| 奇异值分解及改进、因子分解机
网络中的信息量呈现指数式增长,随之带来了信息过载问题.推荐系统是大数据时代下应运而生的产物,目前已广泛应用于电商.社交.短视频等领域.本文将针对推荐系统中基于隐语义模型的矩阵分解技术来进行讨论. 目录 ...
最新文章
- 计算机密码行业专题研究:网络安全最大弹性领域
- Eclipse在高分屏下图标过小的解决方法
- [云炬创业基础笔记]第五章创业机会评估测试8
- Qt C++ 检测优盘插入或拔出
- Highcharts 本地导出图片 Java
- 通过实验理解交换的三个fast特性
- 1.并发问题产生的三大根源与解决sync锁 目录 1. 并发问题产生的三大根源	1 1.1. 原子性 CPU缓存会导致可见问题 指令重排序	1 2. 并发问题根源之一:CPU切换线程执导致的
- python总是下载失败_Python 下载依赖包环境经常失败超时解决方法
- 【freeradius】使用radclient调试radius协议
- 这一年我都做了什么......
- Python基础知识——变量与运算符
- 喜大普奔!Maya 2022来了?!
- 微信小程序座位预约,微信小程序实现订座位,餐厅座位预约小程序毕设作品
- 高通MSM8909:LCD hx8394d驱动调试
- 危化品爆炸场景下的应急通信系统解决方案
- android 自动设置时区,Android Things入门-设置本地时区
- VUE弹窗加载另一个VUE页面
- NAND驱动分析--(二)
- 湖北省宜昌市谷歌高清卫星地图下载
- 亚马逊无人便利店正式开业,深度学习技术更进一步