IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 搜索引擎(六)-- 矩阵分解 -> 正文阅读

[数据结构与算法]搜索引擎(六)-- 矩阵分解

一、引言

在搜索引擎(五)中我们提到了推荐系统中矩阵的稀疏问题,很多数据或者用户的交互数据过少,并且有部分交互数据也存在信息冗余的情况。因此,我们需要用矩阵降维的方法,将矩阵投射到对结果有影响的最重要的因素中,并基于此构建新的评价方法。
除此以外,在此前提到的Memory-Based推荐里,我们常常也需要去评价物品或用户的相似度,这些物品或用户也有许多attributes,需要我们进一步进行指标压缩,对属性表进行降维后更方便相似度的对比。譬如一个文档-关键词的特征表。
本文章将对SVD和SVD++两种方法展开进行描述。

二、奇异值分解SVD

SVD可以将一个较大的矩阵分解为多个方便计算和存储的矩阵,目前许多矩阵分解算法都是基于SVD完成的。假设A矩阵是被正则化过的一个大小为 m × n m\times n m×n的待分解矩阵,我们定义A的SVD分解为 A = U Σ V T A=U\Sigma V^T A=UΣVT
其中 U U U是一个 m × m m\times m m×m的方阵; Σ \Sigma Σ是一个 m × n m\times n m×n的矩阵,除了主对角线上的元素外,所有的值为0; V V V是一个 n × n n\times n n×n的方阵。 U U U V V V都是酉矩阵,满足 U T = U ? 1 U^T=U^{-1} UT=U?1 V T = V ? 1 V^T=V^{-1} VT=V?1 Σ \Sigma Σ矩阵对角线上保存着A矩阵的各个矩阵特征值的根号(又称作奇异值),并且从上到下一般是以降序方式排列的。

在多数情况中, Σ \Sigma Σ矩阵中最大的奇异值往往是最能影响矩阵结果的,所以我们在作矩阵近似时,可以只取最大的几个奇异值,以及其对应的 U U U V V V数据进行计算。譬如我们如果只取 k k k个最大的奇异值,那么 A m × n A_{m\times n} Am×n?矩阵可以被近似为
A m × n ′ = U m × k Σ k × k V k × n T A'_{m\times n}=U_{m\times k}\Sigma_{k\times k}V^T_{k\times n} Am×n?=Um×k?Σk×k?Vk×nT?

我们如果从向量空间来看这个问题,可以把SVD看作一个矩阵被分解为多个垂直的向量基底的线性组合。而我们的降维就是把最能代表这个矩阵的几个基底留下,剩下的基底全部丢掉的,从而产生新的评价矩阵的过程。

三、SVD的变种

基于机器学习的SVD

用代数方法求得 U U U Σ \Sigma Σ V V V的过程是十分昂贵的,需要消耗大量时间和空间计算 A A A的特征值和特征向量。除此之外,在Memory-Based的推荐系统中,A矩阵是确定的,物品或用户的各个属性一般都是已经采集过,并且不易改变的(如文章的词频),但基于协同过滤的推荐系统中,user-item矩阵不完整,用户可能根本没有跟部分物品交互过,所以靠代数方法并不能获得具体数据。在这类背景下,用机器学习的方法学习到分解矩阵是更好的选择。由于机器学习不关心具体的特征向量,我们可以把 Σ \Sigma Σ这个值融合到 U U U V V V当中。这里用评分矩阵 r r r代替原来的 A A A,我们可以把新的分解表示为 r m × n = P m × f T Q f × n r_{m\times n}=P^T_{m\times f}Q_{f\times n} rm×n?=Pm×fT?Qf×n?,用户 u u u对物品 i i i的喜好预测值可以被表示为 r ^ u , i = q i T p u \hat{r}_{u,i}=q_i^Tp_u r^u,i?=qiT?pu?
在这里插入图片描述
在最基础的分解中,损失函数可以表示为预测值与真实值的误差 ∑ i ∑ u ( r u , i ? q i T p u ) \sum_i \sum_u (r_{u,i}-q_i^Tp_u) i?u?(ru,i??qiT?pu?)

正则化因子

为了减轻过拟合问题,在某些研究又引入了正则化因子,损失函数变为 E = ∑ ( u , i ) ∈ κ ( r u , i ? q i T p u ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^Tp_u)+\lambda(||q_i||^2+||q_u||^2) E=(u,i)κ?(ru,i??qiT?pu?)+λ(qi?2+qu?2)

Bias SVD

有些用户可能对物品评价严格,也有些用户可能对物品的评价很宽容,同时有些物品可能会更容易令用户满意,有些物品更难达到用户心中预期。有学者根据此提出了bias SVD,引入了平均分 μ \mu μ,物品偏差 b u b_u bu?和用户偏差 b i b_i bi?到预测之中,此时的预测值可以表示为 r ^ u , i = q i T p u + μ + b u + b i \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i r^u,i?=qiT?pu?+μ+bu?+bi?
损失函数则可以表示为
E = ∑ ( u , i ) ∈ κ ( r u , i ? q i T p u ? μ ? b u ? b i ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 + b u 2 + b i 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^Tp_u-\mu-b_u-b_i)+\lambda(||q_i||^2+||q_u||^2+b_u^2+b_i^2) E=(u,i)κ?(ru,i??qiT?pu??μ?bu??bi?)+λ(qi?2+qu?2+bu2?+bi2?)

Time SVD

而由于用户的喜好是根据时间而变化的,对于我们可以把预测值和相关参数改写为时变函数。 r ^ u , i ( t ) = q i T p u ( t ) + μ + b u ( t ) + b i ( t ) \hat{r}_{u,i}(t)=q_i^Tp_u(t)+\mu+b_u(t)+b_i(t) r^u,i?(t)=qiT?pu?(t)+μ+bu?(t)+bi?(t)

SVD++

到这里,我们已经提及了不少基于机器学习的矩阵分解方法。我们即将介绍本篇文章的主角–SVD++,它是基于上述矩阵方法的一个改良版,在Netflix评分预测比赛中,SVD++凭借其优秀的性能力压群雄,夺得桂冠,斩获百万美元大奖。
SVD++在上述SVD模型的基础上,引入了隐式反馈值,使得用户的历史浏览数据,用户历史评分数据,电影的历史浏览数据,电影的历史评分数据能成为新的参数,有效解决了冷启动问题。我们用 N ( u ) N(u) N(u)表示用户 u u u的行为物品集。每个物品 i i i的隐式反馈为 x i x_i xi?,用户 u u u对于物品及N(u)的兴趣,可以表示为 ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ \dfrac{\sum_{j\in N(u)}x_j}{|N(u)|} N(u)jN(u)?xj??;同时,物品 a a a被用户关注的预测函数可以被改为 r ^ u , i = q i T p u + μ + b u + b i + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|} r^u,i?=qiT?pu?+μ+bu?+bi?+N(u)jN(u)?xj??
损失函数为 E = ∑ ( u , i ) ∈ κ ( r u , i ? q i T ( p u + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ ) ? μ ? b u ? b i ) + λ ( ∣ ∣ q i ∣ ∣ 2 + ∣ ∣ q u ∣ ∣ 2 + b u 2 + b i 2 ) E=\sum_{(u,i)\in \kappa}(r_{u,i}-q_i^T(p_u+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|})-\mu-b_u-b_i)+\lambda(||q_i||^2+||q_u||^2+b_u^2+b_i^2) E=(u,i)κ?(ru,i??qiT?(pu?+N(u)jN(u)?xj??)?μ?bu??bi?)+λ(qi?2+qu?2+bu2?+bi2?)
这里的隐式因子也可以是关于用户u的属性,如果考虑到用户 u u u的其他属性 a a a,我们引入关于 a a a的隐式因子 y a y_a ya?,隐式反馈值为 ∑ a ∈ A ( u ) y a ∣ N ( u ) ∣ \dfrac{\sum_{a\in A(u)}y_a}{|N(u)|} N(u)aA(u)?ya??,最终的预测值可以表示为 r ^ u , i = q i T p u + μ + b u + b i + ∑ j ∈ N ( u ) x j ∣ N ( u ) ∣ + ∑ a ∈ A ( u ) y a ∣ N ( u ) ∣ \hat{r}_{u,i}=q_i^Tp_u+\mu+b_u+b_i+\dfrac{\sum_{j\in N(u)}x_j}{|N(u)|}+\dfrac{\sum_{a\in A(u)}y_a}{|N(u)|} r^u,i?=qiT?pu?+μ+bu?+bi?+N(u)jN(u)?xj??+N(u)aA(u)?ya??

训练过程

我们一般用梯度下降法或迭代的最小二乘法求解,或者是更高级的优化器,如随机梯度下降法(Stochastic Gradient Descent)。此处以梯度下降法为例子,假设需要更新的参数为 q i q_i qi?,那么更新的函数可以被表示为
q i ( t + 1 ) = q i ( t ) + α ? E ? q i ( t ) = q i ( t ) + α ( ( r u i ? r ^ u , i ) p u ( t ) + λ q i ( t ) ) \begin{aligned}q_i(t+1)&= q_i(t)+\alpha\dfrac{\partial E}{\partial q_i(t)}\\&=q_i(t)+\alpha((r_{ui}-\hat{r}_{u,i})p_u(t)+\lambda q_i(t))\end{aligned} qi?(t+1)?=qi?(t)+α?qi?(t)?E?=qi?(t)+α((rui??r^u,i?)pu?(t)+λqi?(t))?
此处 α \alpha α为学习率,当待学习的参数收敛,或者loss函数收敛,我们就可以终止学习了。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:17:23  更:2021-12-05 12:20:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:32:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码