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

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

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

【机器学习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.mfbz.cn/a/497736.html

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

相关文章

iOS开发进阶(十一):ViewController 控制器详解

文章目录 一、前言二、UIViewController三、UINavigationController四、UITabBarController五、UIPageViewController六、拓展阅读 一、前言 iOS 界面开发最重要的首属ViewController和View,ViewController是View的控制器,也就是一般的页面,…

WordPress Git主题 响应式CMS主题模板

分享的是新版本,旧版本少了很多功能,尤其在新版支持自动更新后,该主题可以用来搭建个人博客,素材下载网站,图片站等 主题特点 兼容 IE9、谷歌 Chrome 、火狐 Firefox 等主流浏览器 扁平化的设计加响应式布局&#x…

MySQL count(*/column)查询优化

count()是SQL中一个常用的聚合函数,其被用来统计记录的总数,下面通过几个示例来说明此类查询的注意事项及应用技巧。 文章目录 一、count()的含义二、count()的应用技巧2.1 同时统计多列2.2 利用执行计划 一、count()的含义 count()用于统计符合条件的记…

常用的8个应用和中间件的Docker运行示例

文章目录 1、Docker Web 管理工具 portainer2、在线代码编辑器 Code Server3、MySQL4、Redis5、Nginx6、PostgreSQL7、媒体管理工具 Dim8、Gitlab 1、Docker Web 管理工具 portainer Portainer 是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境&#xff0…

API是什么,如何保障API安全

随着移动APP、微服务架构、云、物联网的兴起,企业API数量呈爆发式增长。作为数字世界的连接者,API为企业搭建起了一条内外相连、四通八达的“数据公路”。 API是什么?API,全称Application Programming Interface,即应用…

八大技术趋势案例(区块链量子计算)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

uniapp对接萤石云 实现监控播放、云台控制、截图、录像、历史映像等功能

萤石云开发平台地址:文档概述 萤石开放平台API文档 (ys7.com) 萤石云监控播放 首先引入萤石云js js地址:GitHub - Ezviz-OpenBiz/EZUIKit-JavaScript-npm: 轻应用npm版本,降低接入难度,适配自定义UI,适配主流框架 vi…

贝朗生物邀您到场参观2024第13届生物发酵展

参展企业介绍 贝朗生物工程设备(江苏)有限公司是一家专业从事成套发酵设备的研发、制造和销售的企业。我公司与中国科学院、中国农科院、甘肃省科学院、清华大学、兰州大学、天津科技大学、河北农业大学,甘肃农业大学、青海大学、新疆农业大…

服务器停止解析域名,但仍然可以访问到

1.centos7 如何刷新dns缓存 在CentOS 7上,DNS缓存由nscd(Name Service Cache Daemon)管理,如果系统上安装了nscd,可以通过清除nscd缓存来刷新DNS缓存。 要刷新DNS缓存,请执行以下命令: sudo …

人工智能(pytorch)搭建模型26-基于pytorch搭建胶囊模型(CapsNet)的实践,CapsNet模型结构介绍

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型26-基于pytorch搭建胶囊模型(CapsNet)的实践,CapsNet模型结构介绍。CapsNet(Capsule Network)是一种创新的深度学习模型,由计算机科学家Geo…

前后端分离开发【Yapi平台】【Swagger注解自动生成接口文档平台】

前后端分离开发 介绍开发流程Yapi(api接口文档编写平台)介绍 Swagger使用方式1). 导入knife4j的maven坐标2). 导入knife4j相关配置类3). 设置静态资源映射4). 在LoginCheckFilter中设置不需要处理的请求路径 查看接口文档常用注解注解介绍 当前项目中&am…

Gitlab CI---could not read username for xxx: no such device or address

0 Preface/Foreword 项目开发中&#xff0c;经常会使用第三方的算法或者功能&#xff0c;那么就需要把对应的repo以子模块的方式添加到当前repo中。 添加命令&#xff1a; git submodule add <URL> 1 问题表现 子模块添加成功&#xff0c;但是GitLab CI阶段&#xff…

(C++) 属性说明符-标准属性

文章目录 前言标准属性&#x1f3f7;️noreturn⭐(C11) 指示函数不返回 &#x1f3f7;️carries_dependency⭐(C11) 指示在函数内外传播“释放-消费” std::memory_order 中的依赖链 &#x1f3f7;️deprecated⭐(C14) 指示以此属性声明的名字或实体&#xff0c;允许使用但因某…

GPT:多轮对话并搭建简单的聊天机器人

1 多轮对话 多轮对话能力至关重要&#xff0c;它不仅能深化交流&#xff0c;精准捕捉对方意图&#xff0c;还能促进有效沟通&#xff0c;增强理解。在智能客服、教育辅导等领域&#xff0c;多轮对话更是提升服务质量、增强用户体验的关键。 注意&#xff1a;大模型没有多轮对话…

如何在 Oracle 中使用 CREATE SEQUENCE 语句

在本文中&#xff0c;我们将讨论 Oracle CREATE SEQUENCE 语句&#xff0c;其主要目的是提供一种可靠的方法来生成唯一且连续的数值&#xff0c;通常用于数据库表中的主键字段。此功能对于维护数据完整性和效率、确保不同记录之间的标识符有序分配尤其重要。从本质上讲&#xf…

STM32G473之flash存储结构汇总

STM32G4系列单片机&#xff0c;为32位的微控制器&#xff0c;理论上其内部寄存器地址最多支持4GB的命名及查找&#xff08;2的32次方&#xff0c;地址命名为0x00000000至0xFFFFFFFF&#xff09;。STM32官方对4GB的地址存储进行编号时&#xff0c;又分割成了8个block区域&#x…

【python】网络编程socket TCP UDP

文章目录 socket常用方法TCP客户端服务器UDP客户端服务器网络编程就是实现两台计算机的通信 互联网协议族 即通用标准协议,任何私有网络只要支持这个协议,就可以接入互联网。 socket socke模块的socket()函数 import socketsock = socket.socket(Address Family, type)参…

SQLyog连接MySQL8.0+报错:错误码2058的解决方案

最近把mysql从5.7迁移到8.3.0发现连接不上 因为 MySQL 从 8.0 版本开始&#xff0c;新增了caching_sha2_password授权插件 技术博客 http://idea.coderyj.com/ 1.更换sqlyog 更新到13.1.3之后的版本 2.取消mysql8的加密授权机制 mysql> ALTER USER sqlyog% IDENTIFIED WIT…

ArcGIS制作风向频率玫瑰图

风玫瑰图是气象科学专业统计图表,用来统计某个地区一段时期内风向、风速发生频率,又分为“风向玫瑰图”和“风速玫瑰图” ;因图形似玫瑰花朵,故名。风玫瑰图对于涉及城市规划、环保、风力发电等领域有着重要的意义。风玫瑰图能够直观的显现某地区不同方位风向的频率特征,进…

边缘计算与云计算总结

一. EdgeGallery 简介 MEC场景下的EdgeGallery是让资源边缘化&#xff0c;实时完成移动网络边缘的业务处理&#xff0c;MEC场景下的EdgeGallery让开发者能更便捷地使用 5G 网络能力&#xff0c;让5G能力在边缘触手可及。 EdgeGallery是由华为、信通院、中国移动、中国联通、…