1. 模型提出背景
FM解决的是预测性问题。也就是说给定输入值,给出输出值。但是针对预测性问题的解决,目前有较多的模型可以用,针对factorization machine这篇文章,作者主要是抓住FM和支持向量机的优劣比较,支持向量机最终是解决数值优化问题,如果自变量是稠密的,那么使用支持向量机是有较大优势的。但是如果自变量有较多的类别变量(指示变量),从而导致数据比较稀疏,也就是说一个样本点的输入多数都是零,这种情况在推荐系统中有较多,这时候支持向量机的劣势就体现出来了。那么就出现了如何解决输入比较稀疏时的预测性问题。
2.例子描述
首先我们借用factorization machine中的例子,因为本人也是从事推荐系统相关工作,也比较喜欢这个例子。
上述描述性数据,其中S表示事务型数据,我们把转换成符号型数据,每条记录表示一个事务
首先上图中蓝框中的数据表示用户信息,是指示型数据,表示一条记录中的用户,蓝框中的第一列表示是否是用户A,第二列表示是否是用户B等等。橘红色框表示这个事务中用户看的是那部电影,橘红框中的每条记录只有一个是1,其他的都为零。黄色框中表示用户都对哪些电影评过分,比如A对TI,NH,SW三部电影评过分,那么前三列为0.3,0.3,0.3 ,这里是将数据标准化了,使得每条记录值相加为1,绿色框表示的是时间,确定一个起始时间,数值表示距离起始时间的时间,最后一个框表示用户在评过事务中的这不电影前,还评过其他的哪些电影,预测值为Y,最后一列,表示用户对这部电影的评分。
我们的输入就类似这种情况,如果用户量非常多,电影量也非常多,那么这个输入是相当稀疏的,使用支持向量机之类的模型就显得力不从心,所以作者引出了因子机。
3.模型描述
因子机有度的概念,其实就是表示是多少个自变量相互影响,我们先从2度开始描述 ,假设需要预测的变量为Y,我们需要通过一个预测值
Y^
来对Y进行预测,然后给定一个损失函数,最小化Y和
Y^
之间的差距。
其中
其中k是正整数,表示用k维的因子去表示一个变量,这个概念也是因子机名字的来源。
表示两个变量之间的交互作用,这里使用的是向量 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的相互作用,这对于预测评分是很重要的。
模型的求解
通过上述转换,我们将公式1转变成
涉及的就只有 nk 个变量 ,
这样我们套用一些损失函数,比如回归问题套用均方误差等等 ,二分类问题使用logit损失等.
FFM(Field-aware Factorization Machines)
YUChin Juan 在2016年对FM模型进行改进,提出了Field-aware Factorization Machines,接下来我将详细的介绍这种算法,针对推荐算法中的变量,其实是可以分成若干了类别的。比如用户相关的特征,商品相关的特征,场景相关的特征,这样就可以将特征分成若干个field,在FM模型中,一个特征,举个例子,用户的年龄特征
x
,被一个隐因子表示,即k维的向量