当前位置: 首页 > news >正文

推荐系统FM模型

好的,我们通过一个电影评分预测的示例来解释因子分解机(Factorization Machines, FM)在推荐系统中的应用。


问题背景

假设有以下4个用户对电影的评分数据:

用户ID电影ID用户年龄电影类型评分
U1M125动作5
U1M225爱情3
U2M130动作4
U3M320科幻2

目标:预测用户对未评分电影的评分(如预测用户U2对电影M3的评分)。


数据预处理

将分类特征转换为数值特征(独热编码):

假设特征维度如下:

  • 用户ID:U1, U2, U3 → 3维
  • 电影ID:M1, M2, M3 → 3维
  • 用户年龄:直接保留数值
  • 电影类型:动作, 爱情, 科幻 → 3维

最终特征向量维度 = 3(用户) + 3(电影) + 1(年龄) + 3(类型) = 10维

例如,第一条样本 U1, M1, 25, 动作 的编码为:

[1,0,0, 1,0,0, 25, 1,0,0]

FM模型原理

FM的预测公式为:
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j \hat{y} = w_0 + \sum_{i=1}^n w_i x_i + \sum_{i=1}^n \sum_{j=i+1}^n \langle v_i, v_j \rangle x_i x_j y^=w0+i=1nwixi+i=1nj=i+1nvi,vjxixj
其中:

  • w 0 w_0 w0 是全局偏置项
  • w i w_i wi 是第i个特征的权重
  • v i ∈ R k v_i \in \mathbb{R}^k viRk 是第i个特征的隐向量(长度为k)
  • ⟨ v i , v j ⟩ \langle v_i, v_j \rangle vi,vj 是隐向量的点积,建模特征交互。

具体计算示例

假设我们为每个特征分配隐向量(设k=2),初始化参数如下:

特征权重 w i w_i wi隐向量 v i v_i vi
用户U10.1[0.2, -0.3]
用户U20.3[0.5, 0.1]
用户U3-0.2[-0.4, 0.2]
电影M10.5[0.1, 0.6]
电影M2-0.3[-0.2, 0.4]
电影M30.2[0.3, -0.1]
年龄250.4[0.1, -0.2]
动作类型0.6[0.5, 0.3]
爱情类型-0.1[-0.2, 0.4]
科幻类型0.3[0.2, -0.1]

以第一条样本 U1, M1, 25, 动作 为例(评分=5):

  1. 线性项
    0.1 ( U1 ) + 0.5 ( M1 ) + 0.4 ( 年龄25 ) + 0.6 ( 动作 ) = 0.1 + 0.5 + 0.4 + 0.6 = 1.6 0.1 (\text{U1}) + 0.5 (\text{M1}) + 0.4 (\text{年龄25}) + 0.6 (\text{动作}) = 0.1+0.5+0.4+0.6 = 1.6 0.1(U1)+0.5(M1)+0.4(年龄25)+0.6(动作)=0.1+0.5+0.4+0.6=1.6

  2. 交叉项(计算交互特征对的隐向量点积):

    • U1 & M1: ⟨ [ 0.2 , − 0.3 ] , [ 0.1 , 0.6 ] ⟩ = 0.2 ∗ 0.1 + ( − 0.3 ) ∗ 0.6 = − 0.16 \langle [0.2,-0.3], [0.1,0.6] \rangle = 0.2*0.1 + (-0.3)*0.6 = -0.16 ⟨[0.2,0.3],[0.1,0.6]⟩=0.20.1+(0.3)0.6=0.16
    • U1 & 年龄25: ⟨ [ 0.2 , − 0.3 ] , [ 0.1 , − 0.2 ] ⟩ = 0.2 ∗ 0.1 + ( − 0.3 ) ∗ ( − 0.2 ) = 0.08 \langle [0.2,-0.3], [0.1,-0.2] \rangle = 0.2*0.1 + (-0.3)*(-0.2) = 0.08 ⟨[0.2,0.3],[0.1,0.2]⟩=0.20.1+(0.3)(0.2)=0.08
    • U1 & 动作: ⟨ [ 0.2 , − 0.3 ] , [ 0.5 , 0.3 ] ⟩ = 0.2 ∗ 0.5 + ( − 0.3 ) ∗ 0.3 = 0.1 − 0.09 = 0.01 \langle [0.2,-0.3], [0.5,0.3] \rangle = 0.2*0.5 + (-0.3)*0.3 = 0.1 - 0.09 = 0.01 ⟨[0.2,0.3],[0.5,0.3]⟩=0.20.5+(0.3)0.3=0.10.09=0.01
    • M1 & 年龄25: ⟨ [ 0.1 , 0.6 ] , [ 0.1 , − 0.2 ] ⟩ = 0.1 ∗ 0.1 + 0.6 ∗ ( − 0.2 ) = − 0.11 \langle [0.1,0.6], [0.1,-0.2] \rangle = 0.1*0.1 + 0.6*(-0.2) = -0.11 ⟨[0.1,0.6],[0.1,0.2]⟩=0.10.1+0.6(0.2)=0.11
    • M1 & 动作: ⟨ [ 0.1 , 0.6 ] , [ 0.5 , 0.3 ] ⟩ = 0.1 ∗ 0.5 + 0.6 ∗ 0.3 = 0.23 \langle [0.1,0.6], [0.5,0.3] \rangle = 0.1*0.5 + 0.6*0.3 = 0.23 ⟨[0.1,0.6],[0.5,0.3]⟩=0.10.5+0.60.3=0.23
    • 年龄25 & 动作: ⟨ [ 0.1 , − 0.2 ] , [ 0.5 , 0.3 ] ⟩ = 0.1 ∗ 0.5 + ( − 0.2 ) ∗ 0.3 = − 0.01 \langle [0.1,-0.2], [0.5,0.3] \rangle = 0.1*0.5 + (-0.2)*0.3 = -0.01 ⟨[0.1,0.2],[0.5,0.3]⟩=0.10.5+(0.2)0.3=0.01

    交叉项总和 = -0.16 + 0.08 + 0.01 - 0.11 + 0.23 - 0.01 = 0.04

  3. 最终预测值
    y ^ = w 0 + 1.6 + 0.04 = 1.64 ( 假设  w 0 = 0 ) \hat{y} = w_0 + 1.6 + 0.04 = 1.64 \quad (\text{假设 } w_0=0) y^=w0+1.6+0.04=1.64(假设 w0=0)

  4. 计算损失
    真实评分=5,预测评分=1.64,平方误差为 ( 5 − 1.64 ) 2 = 11.28 (5-1.64)^2 = 11.28 (51.64)2=11.28,通过梯度下降更新参数。


FM的优势

  1. 自动学习特征交互:即使某些组合(如U3和科幻类型)在训练集中未出现,隐向量也会通过其他交互学习到泛化能力。
  2. 处理稀疏数据:适合推荐系统中的高维稀疏特征(如用户ID和物品ID)。
  3. 线性时间复杂度:通过公式变形,二阶交叉项的计算复杂度从 O ( k n 2 ) O(kn^2) O(kn2) 降低到 O ( k n ) O(kn) O(kn)

总结

FM通过隐向量建模特征交互,解决了传统线性模型无法捕捉特征组合的问题。在推荐系统中,它特别适合处理用户-物品交互数据中的稀疏性和隐式关系。

http://www.xdnf.cn/news/152263.html

相关文章:

  • 2025.4.26_STM32_SPI
  • 29、简要描述三层架构开发模式以及三层架构有哪些好处?
  • Vue3中AbortController取消请求的用法详解
  • Log4j Properties 配置项详细说明
  • 如何判断你的PyTorch是GPU版还是CPU版?
  • 4.23-4.26学习总结 HTML—CSS常见标签和样式
  • 实验四 进程调度实验
  • Adriuno:编程语言基础
  • 使用 Truffle 和 Ganache 搭建本地以太坊开发环境并部署一个简单智能合约
  • [mysql]约束(上)
  • 使用 Frida 绕过 iOS 应用程序中的越狱检测
  • 自动化测试实战篇
  • 【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
  • 关于Code_流苏:商务合作、产品开发、计算机科普、自媒体运营,一起见证科技与艺术的交融!
  • Kettle学习
  • 利器善其事:软件开发工具管理之道
  • Sam算法基本原理解析
  • 基于大模型对先天性幽门肥厚性狭窄预测及临床方案的研究报告
  • MH2103 MH22D3系列的JTAG/SWD复用功能和引脚映射,IO初始化的关键点
  • C#中常见的设计模式
  • 第十六届蓝桥杯网安初赛wp
  • 关于flink两阶段提交高并发下程序卡住问题
  • 2025.04.26-美团春招笔试题-第四题
  • 设计看似完美却测不过? Intra-Pair Skew 是「讯号完整性(Signal Integrity)」里最隐形的杀手
  • 【C】初阶数据结构12 -- 冒泡排序
  • 买币永续合约成全球交易热点,XBIT去中心化交易所平台显著提升市场流动性
  • 联想笔记本电脑在Windows下通过联想驱动实现风扇控制
  • 从像素到驾驶决策:Python与OpenCV赋能自动驾驶图像识别
  • django之账号管理功能
  • MySQL 数据类型