推荐算法-因式分解机FM

本文介绍了因式分解机(Factorization Machines, FM)在处理高度稀疏数据时的优势,特别是对于推荐系统的应用。FM模型通过引入辅助向量表示特征交互,减少了参数数量,提高了模型的泛化能力。文章深入探讨了FM的二阶模型方程、复杂度分析、高阶推广、回归与分类任务的损失函数,以及优化方法,并对比了FM与矩阵分解模型(如MF)的关系。" 136378751,14003312,中间件大神之路:RabbitMQ、RocketMQ、Kafka深度解析,"['后端', 'java', 'java-ee', 'rabbitmq', 'rocketmq']
摘要由CSDN通过智能技术生成

Factorization Machines

参考

1. 刘建平的博客: https://www.cnblogs.com/pinard/p/6370127.html

2. Tracholar的博客: https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html

3. 知乎小孩不笨的文章: https://zhuanlan.zhihu.com/p/50426292

1 准备

通常,我们的机器学习模型是学习一个映射函数
f ( ⋅ ) → T f(\cdot) \rightarrow T f()T

该函数使我们输入的n维实值特征向量 x ∈ R n x \in R^n xRn 映射到一个目标域 T T T,例如对与回归问题,这个目标域 T = R T = R T=R,而对于分类问题, T = { C 1 , C 2 , . . . , C n } T = \{C1, C2, ..., C_n\} T={ C1,C2,...,Cn}。在常见的有监督学习任务中,我们的训练样本数据通常还带有一个标签 y y y,数据格式如:

D = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , . . . , ( x ( m ) , y ( m ) ) } D = \{(x^{(1)},y^{(1)}), (x^{(2)},y^{(2)}), ..., (x^{(m)},y^{(m)})\} D={ (x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}

其中 x ( i ) ∈ R n x^{(i)} \in R^n x(i)Rn为输入数据,对应样本的特征向量, y ( i ) y^{(i)} y(i)对应该样本的标签, m m m为样本的数目。

在现实世界中,许多应用问题(如文本分析、推荐系统等)会产生高度稀疏的(特征)数据,即特征向量 x ( i ) x^{(i)} x(i)中几乎所有的分量都为0

这里,我们以电影评分系统为例,给出一个关于高度稀疏数据的实例:

在这里插入图片描述
关于这个数据各部分含义这里不再解释。

在上面的例子中,特征向量x的实际维度为 ∣ U ∣ + ∣ I ∣ + ∣ I ∣ + 1 + ∣ I ∣ = ∣ U ∣ + 3 ∣ I ∣ + 1 |U|+|I|+|I|+1+|I| = |U|+3|I|+1 U+I+I+1+I=U+3I+1,真实场景中,用户数目 ∣ U ∣ |U| U与电影数目 ∣ I ∣ |I| I都非常大,而每个用户对电影的评分数目非常有限。以此可知我们的特征向量x将会多么的稀疏,用 N z ( X ) N_z(X) Nz(X)来表示一条样本数据/特征向量x的非0分量个数,并记:

N z ‾ ( X ) = 1 N ∑ i m N z ( x ( i ) ) \overline{N_z}(X) = \frac{1}{N} \sum_i^m N_z(x^{(i)}) Nz(X)=N1imNz(x(i))

N z ‾ ( X ) \overline{N_z}(X) Nz(X)表示训练集D中所有特征向量中非零分量数的平均数,显然,对于稀疏数据 N z ‾ ( X ) < < m \overline{N_z}(X) << m Nz(X)<<m

2 FM二阶模型方程

对于上面提到的样本数据D,我们先回顾一下线性回归的做法:

y ^ = w 0 + w 1 x 1 + . . . + w n x n \hat{y} = w_0 + w_1x_1 + ... + w_nx_n y^=w0+w1x1+...+wnxn

= w 0 + ∑ i = 1 n w i x i = w_0 + \sum_{i=1}^n w_i x_i =w0+i=1nwixi

如果我们采用单一的线性模型来学习用户的点击,打分习惯,各特征分量是相互独立的,没有考虑特征分量之间的相互关系,我们很容易忽略特征中潜在的组合关系,比方说“男性用户”喜欢看“漫威电影”,买“奶粉”的用户也常常买“尿不湿”等等。

为了学习特征间的交叉,SVM通过多项式核函数来实现特征的交叉,实际上和多项式模型是一样的,问题在于二阶项的参数过多,设特征维数为n,那么二阶项的参数数目为 n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1),对于广告点击率预估问题,由于存在大量id特征,导致 n 可能为 1 0 7 10^7 107维,这样一来,模型参数的量级为 1 0 14 10^{14} 1014,这导致只有极少数的二阶组合模式才能在样本中找到, 而绝大多数模式在样本中找不到,因而模型无法学出对应的权重。例如,对于某个 w i j w_{ij} wij,样本中找不到 x i = 1 , x j = 1 x_i=1,x_j=1 xi=1,xj=1 (这里假定所有的特征都是离散的特征,只取0和1两个值)这种样本,那么wij的梯度恒为0,从而导致参数学习失败!

很容易想到,可以对二阶项参数施加某种限制,减少模型参数的自由度。FM 施加的限制是要求二阶项系数矩阵是低秩的,能够分解为低秩矩阵的乘积。

下面我们做改进:

y ^ =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值