【机器学习300问】55、介绍推荐系统中的矩阵分解算法是什么、有什么用、怎么用?

news/2024/4/28 12:57:38

        本来这篇文章我想先讲矩阵分解算法是什么东西的,但这样会陷入枯燥的定义中去,让原本非常有趣技术在业务场景中直观的使用路径被切断。所以我觉得先通过一个具体的推荐算法的例子,来为大家感性的介绍矩阵分解有什么用会更加合理。

        如果你还不知道什么是推荐系统,不妨先花点时间看看我的另一篇文章:

【机器学习300问】45、什么是推荐系统?icon-default.png?t=N7T8http://t.csdnimg.cn/DzgAx

一、矩阵分解算法有什么用

(1)理论上的作用

        矩阵分解可以将一个高维、稀疏的矩阵转化为两个小的因子矩阵相乘。帮助我们理解矩阵的数据结构,减少数据的维度,同时揭示隐藏在数据中的潜在结构或模式。

(2)为什么要用矩阵分解算法进行推荐呢?

        在推荐系统中,矩阵分解主要用于解决用户-物品交互矩阵的稀疏性问题。原始的用户-物品评分矩阵通常非常稀疏,这是因为大多数用户只对少数物品进行了评分,大部分元素为空。通过矩阵分解,我们可以找到每个用户和每个物品的一组隐含特征向量,这些特征向量捕捉了用户偏好和物品属性的本质特征。通过重构矩阵,算法可以在没有实际评分的情况下预测用户对未尝试物品的可能评分,从而实现个性化推荐。

(3)实际上的作用

        在这里,我们用歌曲推荐系统为例,让我带大家进一步了解矩阵分解在其中发挥的巨大作用。假设有个听歌平台找到了我们,要我们给它开发一个推荐系统,它告诉我们现在平台上有1个亿的用户,100万首歌。

用户-歌曲评分矩阵的部分图

 

        如果用之前基于用户的协同过滤和基于物品的协同过滤,这个矩阵得老大老大了!完全没办法计算!我给出了一个用户-歌曲矩阵的部分图片。可以看出这个矩阵是一个非常稀疏的矩阵,这是因为平台上每个用户可能给一些歌曲评过分,但大多数歌曲没有得到评分,因此这个评分矩阵将非常稀疏。行表示用户,列表示歌曲,每个元素的值代表用户给该歌曲的评分。缺失的值通常用0或一个预先设定的值如平均评分来代替。现在我们的目标就是预测空白值到底是多少?

矩阵分解

        之前不是说用户-物品交互矩阵太大了嘛!那么矩阵分解的思想将大的矩阵,拆解成两个小的矩阵,一个是User矩阵(给他个专业的名字叫用户隐向量矩阵U),一个是Item矩阵(给他个专业的名字物品隐向量矩阵V),那么大矩阵User-Item矩阵(给他个专业的名字叫D)可以用公式来表达成D\approx UV^T。放在我们这个例子中就是下图:

二、矩阵分解算法是什么

(1)定义

        矩阵分解是指将一个大矩阵分解为两个或更多个较小的、具有特殊性质的矩阵的乘积形式。在推荐系统中常用的如奇异值分解(SVD)进行矩阵分解,将用户-物品评分矩阵D近似分解为用户矩阵U和物品矩阵V 的乘积,即D\approx UV^T。其中还有个很关键的参数——隐向量维度k


矩阵符号维度
用户-物品评分矩阵DRm\times n
用户矩阵Um\times k
物品矩阵Vk\times n

        隐向量维度k 的大小确实决定了模型的表达能力和复杂性:

  • k较小时,模型更加简单,易于训练和解释,但可能不足以捕获用户和物品间的复杂关联,导致模型的表达力较弱,可能会影响推荐效果的准确性。
  • k较大时,模型具有更高的表达能力,能够更精细地刻画用户的兴趣和物品的特性,但这同时也意味着模型可能更容易过拟合,且计算资源消耗更大。

        但其实隐向量维度k,只需要计算机能理解就行,我们人类不用管他到底有什么实际含义。

(2)原理

        矩阵分解的基本思想是,尽管原始数据矩阵可能是稀疏且难以直接分析的,但用户和物品之间可能存在某种潜在的低维空间结构。在这个空间中,用户和物品可以根据他们共享的隐含特征进行量化描述。通过优化算法,比如梯度下降法,寻找最优的用户和物品的特征向量集合,使得重构矩阵尽可能接近原始评分矩阵。

U \times V^T \approx R

三、矩阵分解算法怎么用

(1)计算过程

        矩阵分解的计算过程通常包括以下几个步骤:

  • 初始化用户和物品矩阵;
  • 定义损失函数,通常是预测评分与实际评分之间的差距平方和,即均方误差;
  • 应用优化算法如梯度下降,更新用户和物品的隐向量以最小化损失函数;
  • 循环迭代直到达到预设的停止条件,如达到最大迭代次数或损失函数收敛;
  • 利用学习到的隐向量矩阵预测未知的用户-物品评分。

(2)目标函数

        在推荐系统中,矩阵分解的目标函数常常是基于预测评分与实际评分之间的差异来构建的。例如,对于预测评分和实际评分,目标函数可以表示为:

L = \sum_{(u,i) \in \kappa} (r_{ui} - u_{u} \cdot v_{i})^2 + \lambda (\|u_{u}\|^2 + \|v_{i}\|^2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

对话 Mines of Dalarnia: Web3 游戏创新,社区驱动与公链共建

作者:stellafootprint.network 嘉宾:Manfred Pack,Mines of Dalarnia 游戏开发总监 采访者:Alex Cooper,Footprint Analytics 北美社区与 BD 负责人 在区块链游戏领域,去中心化和玩家经济正在颠覆传统游戏…

网络:udptcp套接字

目录 协议 网络传输基本流程 网络编程套接字 udp套接字编程 udp相关代码实现 sock函数 bind函数 recvfrom函数 sendto函数 udp执行指令代码 popen函数 udp多线程版收发消息 tcp套接字编程 tcp套接字代码 listen函数 accept函数 read/write函数 connect函数 recv/…

Vue 04 Vue 中的 Ajax、slot 插槽

Vue学习 Vue 0401 Vue中的Ajax服务器准备axios使用跨域问题解决Vue-CLI 配置代理1Vue-CLI 配置代理2案例: 用户搜索vue-resource 02 slot插槽默认插槽具名插槽作用域插槽slot总结 Vue 04 B站 Vue全家桶(BV1Zy4y1K7SH) 学习笔记 Vue 中的 ajax 01 Vue中的…

k8s入门到实战(十四)—— Helm详细介绍及使用

Helm 使用 Helm 是一个 k8s 应用的包管理工具,类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。 Helm 使用 chart 来封装 k8s 应用的 yaml 文件,我们只需要设置自己的参数,就可以实现自动化的快速部署应用。 Helm 通过打包的方式,支…

JavaScript 权威指南第七版(GPT 重译)(一)

前言 本书涵盖了 JavaScript 语言以及 Web 浏览器和 Node 实现的 JavaScript API。我为一些具有先前编程经验的读者编写了这本书,他们想要学习 JavaScript,也为已经使用 JavaScript 的程序员编写了这本书,但希望将他们的理解提升到一个新的水…

LeetCode - 股票平滑下跌阶段的数目(分组循环)

2110. 股票平滑下跌阶段的数目 当数组中的数字满足这个prices[i] 1 prices[i - 1]条件之后&#xff0c;就是平滑下降的阶段&#xff0c;也就是将数组中连续的数字进行一个分组。每次计算一个分组即可。 class Solution { public:long long getDescentPeriods(vector<int&…