Factorization Machines(因子分解机)

本文深入解析因子分解机(FM)模型,强调其提取交叉特征的能力,并对比支持向量机(SVM)。通过直观示例说明FM如何处理用户与项目的交互,避免过拟合,适用于稀疏数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是大阪大学的Steffen Rendle 文章Factorization Machines ,该作者是因子分解机的提出者,后续又对其进行改进,本文是对其原始论文的解读。

一、FM的优点在于其可以提取用户和项目的交叉特征,由于在提取特征的时候采用的是类似矩阵分解的方法,可通过控制特征的维数k来保持模型的泛华能力,避免过拟合的问题,在稀疏数据下仍然适用。

二、FACTORIZATIONMACHINES(FM)

因子分解机的模型为:


这里,w0是总体的偏置,wi是xi的系数,

2.1因子分解机的直观理解


下面我将从男女生恋爱的角度对因子分解机做直观分析。首先做下声明,得分y为男生对女生的喜欢程度,用户U代表男生,项目I代表女生。

式子(1)包括三个部分,第一部分常数项可以理解为总体男生对总体女生的底分。第二项是wixi的和,对于男生部分的wi,,可以理解为男生的痴情程度,一个男生越痴情,那么他对女生的依恋程度就越高,该男生对女生的总体评分会相对较高;对于女生部分的wi,可以理解为女生的优秀程度,女生越优秀,显然男生会更加喜欢,那么该女生的总体评分则越高。第三部分是男生女生的交互关系,可以理解为男女之间的感觉,这个感觉包括k维的特征,k是一个超参数,其k值大小取决于男生的人数,女生的人数以及男生对女生评分数据的稀缺程度。下面重点来探索下男女之间的感觉。

如果男生A和男生B对女生1的感觉是一致的,那么vA和vB也必然是一致的。这是因为感觉一致即dot(vA,v1)和dot(vB,v1)这两个值是相等的,由于是同一个女生,所以v1也是相等的,那么vA=vB。如果一个男生对两个女生的感觉一致,那么这两个女生v1=v2。反之,如果两个男生A,C对同个女生差距很大,则vA和vC差别很大,如果一个男生对两个女生1,3的感觉差别很大,那么v1和v3的差别也是很大。

从本质上说,因子分解机也是探索一种相似性,其与协同过滤算法是类似的,但是这两者的区别在于,因子分解机同时考虑了男生和男生间的相似性以及女生和女生间的相似性,但是协同过滤要么只考虑男生之间的相似性,要么只考虑女生之间的相似性。

2.2因子分解机计算复杂度


如果对式子1直接进行计算,那么其复杂度是O(kn2),但是我们可以通过简单的数学变换将其转化为O(kn),由于前面两项的计算复杂度都是O(kn),所以我们只需要对第三项进行处理


2.3因子分解机的梯度计算


三、SVM vs FM

3.1SVM

对于线性核的svm其得分的预测为:


从式10可以看出,它预测得分时仅仅考虑了男生的痴情程度和女生的优秀程度。

对于二次项核的svm,其得分的预测为:


由于wu和wu,u都是作用用户的编码,wi和wi,i都是作用在项目的编码,可以将其合并成一个,那么上式与式10的区别在于多了wu,i这个交叉项,下面来考虑这个交叉项的作用。

由于在svm中假设u和i是独立的,即(1,3)和(2,3)是没有任何关系的,对于test集的某一个项目(u,i),它必然不可能包含在训练集中,那么对应的wu,i的值是无法得到的,可能就是初始化的值0,所以使用二项式的核函数的svm跟线性核的svm本质上是一样的。而FM考虑了不假设用户和项目这种交互关系是独立的,因而其参数估计wi,j是通过vi,vj点乘得到的,如果k的设置得当,可以有效的避免overfitting的问题。




### 广义因子分解机概述 广义因子分解机Factorization Machines, FGM)是一种预测模型,能够有效地捕捉特征之间的交互作用。该模型不仅适用于稀疏数据集,在推荐系统、广告点击率预估等领域表现出色[^1]。 FGM 的核心优势在于能够在低维空间中表示高阶特征组合,并通过矩阵分解技术来估计这些组合的影响。这种特性使得 FGM 能够处理大规模且高度稀疏的数据集,而不会遇到维度灾难问题[^2]。 #### 数学表达形式 对于给定样本 \( (x_1,x_2,...,x_n) \),其中每个 \( x_i \in R^d \) 表示第 i 个输入变量,则二阶项可以被定义为: \[ \sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j>x_ix_j \] 这里 \( v_i \in R^k \) 是与原始特征向量对应的隐含因素向量,\( k << d \)[^3]。 ```python import numpy as np def factorization_machine(X, V): """ 计算FM的二次项部分 参数: X -- 输入特征矩阵 shape=(m,n) V -- 隐向量矩阵 shape=(n,k) 返回: fm_output -- FM计算结果 shape=(m,) """ # m: 样本数量; n: 特征数量; k: 隐向量长度 m, n = X.shape _, k = V.shape sum_of_products = np.zeros((m,)) for f in range(k): feature_interactions = np.dot(X * V[:,f], X.T * V[:,f].T).diagonal() sum_of_squares = np.sum(V[:,f]**2 * X**2,axis=-1) sum_of_products += 0.5*(feature_interactions - sum_of_squares) return sum_of_products ``` #### 应用场景实例 在实际应用方面,FGM 已经成功应用于多个领域: - **推荐系统**: 利用用户行为历史记录构建个性化推荐引擎; - **在线广告投放优化**: 提升CTR预估值准确性从而提高转化效率; - **社交网络分析**: 探索节点间潜在联系并用于社区发现等任务[^4];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值