天天看点

FM(factorization machine)

1. 模型提出背景

FM解决的是预测性问题。也就是说给定输入值,给出输出值。但是针对预测性问题的解决,目前有较多的模型可以用,针对factorization machine这篇文章,作者主要是抓住FM和支持向量机的优劣比较,支持向量机最终是解决数值优化问题,如果自变量是稠密的,那么使用支持向量机是有较大优势的。但是如果自变量有较多的类别变量(指示变量),从而导致数据比较稀疏,也就是说一个样本点的输入多数都是零,这种情况在推荐系统中有较多,这时候支持向量机的劣势就体现出来了。那么就出现了如何解决输入比较稀疏时的预测性问题。

2.例子描述

首先我们借用factorization machine中的例子,因为本人也是从事推荐系统相关工作,也比较喜欢这个例子。

FM(factorization machine)

上述描述性数据,其中S表示事务型数据,我们把转换成符号型数据,每条记录表示一个事务

FM(factorization machine)

首先上图中蓝框中的数据表示用户信息,是指示型数据,表示一条记录中的用户,蓝框中的第一列表示是否是用户A,第二列表示是否是用户B等等。橘红色框表示这个事务中用户看的是那部电影,橘红框中的每条记录只有一个是1,其他的都为零。黄色框中表示用户都对哪些电影评过分,比如A对TI,NH,SW三部电影评过分,那么前三列为0.3,0.3,0.3 ,这里是将数据标准化了,使得每条记录值相加为1,绿色框表示的是时间,确定一个起始时间,数值表示距离起始时间的时间,最后一个框表示用户在评过事务中的这不电影前,还评过其他的哪些电影,预测值为Y,最后一列,表示用户对这部电影的评分。

我们的输入就类似这种情况,如果用户量非常多,电影量也非常多,那么这个输入是相当稀疏的,使用支持向量机之类的模型就显得力不从心,所以作者引出了因子机。

3.模型描述

因子机有度的概念,其实就是表示是多少个自变量相互影响,我们先从2度开始描述 ,假设需要预测的变量为Y,我们需要通过一个预测值 Y^ 来对Y进行预测,然后给定一个损失函数,最小化Y和 Y^ 之间的差距。

Y^(x)=w0+∑i=1nwixi+∑i=1n∑j=i+1n<vi,vj>xixj(1)

其中

w0∈R,w∈Rn,V∈Rn∗k

其中k是正整数,表示用k维的因子去表示一个变量,这个概念也是因子机名字的来源。

∑i=1n∑j=i+1n<vi,vj>xixj

表示两个变量之间的交互作用,这里使用的是向量 vi 和 vj 的内积,而不是单纯使用一个参数 wij ,其

优势1,就是可以 vi 向量在衡量 xi 和其他变量的相互作用强度时

都可以用到,如果使用 wij ,我们需要估计 n(n−1)/2 个参数,但是使用内积时我们只需要估计 kn 个参数,如果 k<n 的话,这个需要估计的参数也会减少很多。

优势2,如果使用 wij 时,训练集中没有出现过变量 xi,xj 同时不为零的情况,那么 wij 就会为零,但是测试集中出现了 xi,xj 同时不为零的情况,这样就无法衡量这两个变量之间的相互作用强度,但是使用内积便可以避免这种情况,只要 xi 有不为零的记录, xj 有不为零的记录,这样 <vi,vj> <script type="math/tex" id="MathJax-Element-8494"> </script>就不为零。

其中的第二个优势在推荐系统当中是相当有用的,比如说需要预测A对一部电影MN的评分,但是训练集中没有A对这不电影的评分,但是有A的对应变量对应的因子向量,有MN电影对应变量对应因子向量,这样就可以描述A和电影MN的相互作用,这对于预测评分是很重要的。

模型的求解

FM(factorization machine)

通过上述转换,我们将公式1转变成

Y^(x)=w0+∑i=1nwixi+1/2∑f=1k((∑i=1nvi,fxi)2−∑i=1nv2i,fx2i)

涉及的就只有 nk 个变量 ,

这样我们套用一些损失函数,比如回归问题套用均方误差等等 ,二分类问题使用logit损失等.

FFM(Field-aware Factorization Machines)

YUChin Juan 在2016年对FM模型进行改进,提出了Field-aware Factorization Machines,接下来我将详细的介绍这种算法,针对推荐算法中的变量,其实是可以分成若干了类别的。比如用户相关的特征,商品相关的特征,场景相关的特征,这样就可以将特征分成若干个field,在FM模型中,一个特征,举个例子,用户的年龄特征 x ,被一个隐因子表示,即k维的向量vx,当我们表征x 和其他特征 y 的交互作用时,其系数为<vx,vy>,无论y是哪一个特征,都是用 vx ,但是我们有理由相信,用户相关的特征 和商品相关的特征的交互作用 与用户相关的特征和场景相关的特征的交互作用是不一样的,那么当y是商品相关的特征时,交互作用的系数为 <vx,item,vy,user> <script type="math/tex" id="MathJax-Element-8503"> </script> .如果y是场景相关的特征,交互作用的系数为 <vx,scene,vy,user> <script type="math/tex" id="MathJax-Element-8504"> </script>

Y^(x)=w0+∑i=1nwixi+∑j1=1n∑j2=j1+1n<vj1,f2,vj2,f1>xj1xj2

FM

继续阅读