交替最小二乘法

前置概念导入

  1. 协同过滤(Collaborative Filtering):这是一种推荐系统的方法,依据用户之间或物品之间的相似性来进行推荐。协同过滤通常分为两种主要类型:用户基于(user-based)和物品基于(item-based)协同过滤。用户基于协同过滤关注于找出相似用户的偏好来推荐物品,而物品基于协同过滤则是通过比较物品之间的相似性来进行推荐。

  2. 矩阵分解(Matrix Factorization):这是协同过滤的一种实现方式,尤其用于处理用户-物品评分矩阵中的缺失数据。矩阵分解通过将大的用户-物品矩阵分解为用户潜在因子矩阵和物品潜在因子矩阵的乘积,以揭示用户和物品的潜在特征。矩阵分解使得系统能够预测未知评分,从而为用户提供个性化推荐。

交替最小二乘法

对矩阵进行分解,有很多种方式,比如奇异值分解(SVD),SVD++和交替最小二乘法(ALS)等,Spark MLlib中推荐算法使用的是ALS方式。

交替最小二乘法ALS(Alternating Least Squares, )是一种用于矩阵分解的优化算法,主要用于推荐系统中的协同过滤。其核心思想是通过迭代过程交替固定用户和物品的潜在因子,然后最小化实际观测到的评分与预测评分之间的差异。具体来说,ALS的思想可以分为以下几个步骤:

  1. 初始化:随机初始化用户矩阵U和物品矩阵V的潜在因子。

  2. 固定一个因子:在每次迭代中,先固定一个因子(例如,先固定用户因子U),只优化另一个因子(物品因子V)。

  3. 最小化误差:通过最小化观测到的评分和通过当前因子乘积预测的评分之间的误差来更新固定的因子。

  4. 交替优化:然后固定物品因子V,优化用户因子U。重复这个步骤直到收敛,即两者的更新不再导致总误差显著减少。

  5. 正则化:为了防止过拟合,在优化过程中通常会加入正则化项,以平衡模型的复杂度和训练数据的拟合程度。

  6. 收敛:当达到预设的迭代次数或者误差减少到一个阈值以下时,算法结束。

交替最小二乘法的一个关键优点是它能够有效地处理大规模、稀疏的数据集,并且易于并行化,这使得它特别适合分布式计算环境,如Apache Spark。此外,由于每次迭代中只固定一个因子,这简化了优化问题,使得每一步的计算都是一个简单的最小二乘问题,可以高效解决。

假设我们有以下的用户-物品评分矩阵,其中未知项用 "?" 表示:

用户\物品  物品1  物品2  物品3
用户A       5      ?      3
用户B       4      ?      ?
用户C       ?      2      4

我们想要分解这个矩阵为两个低秩矩阵(用户因子矩阵 U 和物品因子矩阵 V),假设我们选择的潜在因子的数量是 2。初始化 U 和 V 可能如下所示:

U (2x3) =   | ua1  ua2 |
                  | ub1  ub2 |
                  | uc1  uc2 |

V (2x3) =   | va1  va2  va3 |
                  | vb1  vb2  vb3 |

假定我们先固定物品因子 V,优化用户因子 U。对于用户A和物品3的组合,我们的目标是最小化实际评分(3)和预测评分(ua1 * va3 + ua2 * vb3)的误差。通过最小二乘法优化 ua1 和 ua2。

然后,我们固定用户因子 U,优化物品因子 V。同样地,我们要最小化实际评分和预测评分的误差,这一次是通过优化 va1, va2, va3, vb1, vb2, vb3。

假设经过一次迭代后,U 和 V 更新如下:

U (2x3) = | 0.9  1.1 |
                | 0.8  0.9 |
                | 1.0  0.8 |

V (2x3) =  | 1.2  0.9  1.3 |
                 | 1.1  1.0  1.2 |

接下来,我们会计算预测评分矩阵,目标是得到 U 和 V 的乘积,这个乘积能够近似原始的评分矩阵。当 U 和 V 的更新使得总误差不再显著减少,或者达到预设的迭代次数,或者误差减少到一个预设的阈值以下时,我们可以认为模型已经收敛,此时的 U 和 V 就是我们通过 ALS 算法得到的矩阵分解结果。这些结果可以用来预测缺失的评分,为用户提供推荐。在这个例子中,U 的每一行对应一个用户的潜在因子表示,而 V 的每一列对应一个物品的潜在因子表示。

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

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

相关文章

大数据Doris(二十七):Routine Load数据导入演示

文章目录 Routine Load数据导入演示 一、启动kafka集群(三台节点都启动) 二、创建topic

x shell 用作串口调试助手

x shell 用作串口调试助手 Xshell 介绍 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Wi…

【云原生】Spring Cloud Alibaba 之 Gateway 服务网关实战开发

目录 一、什么是网关 ⛅网关的实现原理 二、Gateway 与 Zuul 的区别? 三、Gateway 服务网关 快速入门 ⛄需求 ⏳项目搭建 ✅启动测试 四、Gateway 断言工厂 五、Gateway 过滤器 ⛽过滤器工厂 ♨️全局过滤器 六、源码地址 ⛵小结 一、什么是网关 Spri…

vue3组件外使用route

1.vue3组件外使用route 在写vue3项目时,有时候我们会把组件内部分逻辑代码分离到外部js中,然后在组件里通过import导入。此时如果我们要在组件外使用route对象,方式与组件内不同: 组件内: import { useRoute } from…

Pytorch从零开始实战10

Pytorch从零开始实战——ResNet-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50算法实战环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook,使用Python3.8&#xff0c…

可视化大屏时代的到来:智慧城市管理的新思路

随着科技的不断发展,智能芯片作为一种新型的电子元件,被广泛应用于各个领域,其中智慧芯片可视化大屏是一种重要的应用形式。 一、智慧芯片可视化大屏的优势 智慧芯片可视化大屏是一种将智能芯片与大屏幕显示技术相结合的产品,山海…

Cannot read properties of undefined (reading ‘resetFields‘)“ 报错解决

遇到这种报错 先去相关页面搜索关键字 定位到具体的报错代码 Cannot read properties of undefined (reading ‘resetFields’)" 关键字:resetFields 此方法作用:对整个表单进行重置 将所有字段值重置为初始值并移除校验结果 报错场景:…

森林之子/Sons Of The Forest V42457 资源分享

游戏介绍: 视频介绍: 森林之子 资源分享 这里是引用 你被派到了一座孤岛上,寻找一位失踪的亿万富翁,结果却发现自己深陷被食人生物占领的炼狱之地。你需要制作工具和武器、建造房屋,倾尽全力生存下去,无论…

idea开发jface、swt环境搭建

背景 jface、swt很难找到合适的maven仓库来下载配套的版本idea对eclipse套件不友好eclipse的windowbuilder固然很好, 但本人更喜欢idea编程, 互相取长补短 下载套件 进入swt下载界面 以当前最新的4.29为例, 点击: 找到全部并…

spring boot零配置

spring boot是如何选择tomcat还是Jett作为底层服务器的呢? springboot通过ServletWebServerApplicationContext的onRefresh()方法,会创建web服务 protected void onRefresh() {super.onRefresh();try {// 创建web服务createWebServer();}catch (Throwab…

【Spring Boot】如何在Linux系统中快速启动Spring Boot的jar包

在Linux系统中先安装java的JDK 然后编写下列service.sh脚本,并根据自己的需求只需要修改export的log_path、exec_cmd参数即可 # 配置运行日志输出的路径 export log_path/usr/local/project/study-pro/logs # 当前服务运行的脚本命令 export exec_cmd"nohup /u…

Python---函数的应用案例(多个)

案例:使用print方法打印一条横线 print(- * 40) 案例:对上个案例进行升级,可以根据输入的num数值,生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

科技赋能,创新发展!英码科技受邀参加2023中国创新创业成果交易会

11月17日至19日,2023中国创新创业成果交易会(简称:创交会)在广州市广交会展馆圆满举行。英码科技受邀参加本届创交会,并在会场展示了创新性的AIoT产品、深元AI引擎和行业热门解决方案。 据介绍,本届创交会由…

敏捷DevOps专家王立杰:端到端DevOps持续交付的5P法则 | IDCF

今天有一个流行的英文缩写词用来刻画这个风云变幻的时代:VUCA(乌卡时代)。四个英文字母分别表示动荡性(Volatility)、不确定性(Uncertainty)、复杂性(Complexity)和模糊性…

shell 脚本语句

目录 条件语句 test 命令 比较整数数值 字符串比较 命令举 条件逻辑测试操作 组合写法 举例 双中括号 ​编辑 ( ) / { } if 语句的结构 case 语句 脚本举例 识别 yes 和 no 脚本 检查磁盘使用情况脚本 新建用户以及随机设置用户密码的脚本 补充命令 [RANDOM…

【C++进阶之路】第五篇:哈希

文章目录 一、unordered系列关联式容器1.unordered_map(1)unordered_map的介绍(2)unordered_map的接口说明 2. unordered_set3.性能对比 二、底层结构1.哈希概念2.哈希冲突3.哈希函数4.哈希冲突解决(1)闭散…

【C++】C++11(1)

文章目录 一、C11简介二、统一的列表初始化1.{}初始化2.std::initializer_list 三、声明1.auto2.decltype3.nullptr 四、STL中一些变化五、右值引用和移动语义1.左值引用和右值引用2.左值引用与右值引用比较3.右值引用使用场景和意义4.右值引用引用左值及…

什么是办公RPA?办公RPA解决什么问题?办公RPA实施难点在哪里?

什么是办公RPA? 办公RPA是一种能够模拟人类在计算机上执行任务的自动化软件。它可以在没有人工干预的情况下,执行重复的、规则化的任务,例如数据输入、网页爬取、电子邮件管理等。办公RPA可以帮助企业提高工作效率,降低人力成本&…

px4+vio实现无人机室内定位

文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件软件机载电脑: Intel NUC系统:Ubuntu 20.04相机: Intel Realsense D435iros:noetic飞控:Pixhawk 2.4.8固件&am…

Golang基础-面向对象篇

文章目录 struct结构体类的表示与封装类的继承多态的基本要素与实现interface空接口反射变量的内置pairreflect包解析Struct TagStruct Tag在json中的应用 struct结构体 在Go语言中,可以使用type 关键字来创建自定义类型,这对于提高代码的可读性和可维护…
最新文章