Spark MLlib ----- ALS算法

补充

在谈ALS(Alternating Least Squares)之前首先来谈谈LS,即最小二乘法。LS算法是ALS的基础,是一种数优化技术,也是一种常用的机器学习算法,他通过最小化误差平方和寻找数据的最佳匹配,利用最小二乘法寻找最优的未知数据,保证求的数据与已知的数据误差最小。LS也被用于拟合曲线,比如所熟悉的线性模型。
下面以简单的线性一元线性回归模型说明最小二乘法。假设我们有一组数据{(x1,y1),(x2,y2),(x3,y3)…}其符合线性回归,
假设其符合的函数为如下:
y = w0 + w1 x
我们使用一个平方差函数来表达参数的好坏,平方差函数如下:
Ln = (yn - f(x;w0,w1))2
其中:
y: 目标变量或响应变量,是模型要预测的值。

x: 特征或自变量,是用来预测目标变量的输入。

w1:斜率,表示每单位x变化时y的变化量。

w0 :截距项,线性回归中表示直线与y轴的交点。

f(x;w0,w1): 线性回归模型的方程,表示预测y的函数,其中f 是模型,x 是输入特征w1和w0是模型的参数。
Ln:损失函数,用于衡量模型在给定数据点xn,yn处的预测值, f(x;w0,w1)与实际观测值 yn之间的差异。
L越小表示参数w越精确,而这里最关键的就是寻找到最合适的w0,w1,则此时的数学表达式为:

将先行回归函数代入到最小二乘损失函数中,得到的结果为:
在这里插入图片描述
介绍完了LS,现在展开来说ALS算法。ALS算法本质上是基于物品的协同,近年来,基于模型的推荐算法ALS(交替最小二乘)在Netflix成功应用并取得显著效果提升,ALS使用机器学习算法建立用户和物品间的相互作用模型,进而去预测新项。

一、概念

ALS(Alternating Least Squares)是一种协同过滤推荐算法,主要用于处理推荐系统中的矩阵分解问题。它的基本思想是通过交替最小二乘法(Alternating Least Squares)来迭代地优化用户矩阵和物品矩阵。由于简单高效,已被广泛应用在推荐场景中,目前已经被集成到Spark MLlib和ML库中

二、算法概括

  1. ALS算法用来补全用户评分矩阵。由于用户评分矩阵比较稀疏,将用户评分矩阵进行分解,变成V和U的乘积。通过求得V和U两个小的矩阵来补全用户评分矩阵。
  2. ALS算法使用交替最小二乘法来进行求解。
  3. ALS分为显示反馈和隐式反馈两种。显示反馈是指用户有明确的评分。对于商品推荐来说,大部分是通过用户的行为,获取隐式反馈的评分。隐式反馈评分矩阵需要进行处理,如果有用户评分则置为1,没有则赋值为0。但是对这个处理后的评分矩阵,再有一个置信度来评价这个评分。置信度等于1+a*用户真实评分
  4. ALS的代价函数是估计值和现有的评分值误差的平方和,引入了L2正则。

在这里插入图片描述

2.1 协同过滤

协同过滤(Collaborative Filtering)是一种推荐系统的方法,通过分析用户的行为、偏好或兴趣,向用户推荐与其相似的其他用户喜欢的项目。其核心思想是基于用户之间的相似性或项目之间的相似性来进行推荐。

协同过滤分为两类:****基于用户的协同过滤基于项目的协同过滤

1. 基于用户的协同过滤(User-Based Collaborative Filtering):

找出和目标用户兴趣相似的其他用户。如果两个用户在过去喜欢或不喜欢的项目上有相似的评价,那么在未来可能也会对相同或类似的项目有相似的兴趣。根据相似用户的行为给目标用户进行推荐。
2. 基于项目的协同过滤(Item-Based Collaborative Filtering):
找出与目标项目相似的其他项目。如果用户喜欢某个项目,那么他们可能也会喜欢与该项目相似的其他项目。根据相似项目的特性给用户进行推荐。
协同过滤的优势在于不需要事先对用户或项目进行明确的描述,而是通过用户行为数据来自动学习用户的偏好。然而,它也面临一些挑战,如稀疏性、冷启动问题(新用户或新项目如何进行推荐)、计算复杂度等。

在这里插入图片描述

2.1.1 协同过滤实现

要实现协同过滤的推荐算法,要进行以下三个步骤:

  1. 收集数据: 首先,需要获取用户对物品(如电影、图书、商品等)的评价数据。这些评价可以是用户的打分、购买历史、点击记录等。通常,这些数据是通过用户的交互行为收集的。
  2. 找到相似用户和物品:
  • 基于用户的协同过滤: 计算用户之间的相似性,通常使用一些相似性度量如余弦相似度或皮尔逊相关系数。找到与目标用户相似的其他用户,然后根据相似用户的行为给目标用户进行推荐。
  • 基于物品的协同过滤: 计算物品之间的相似性,同样使用余弦相似度或其他度量。找到与目标物品相似的其他物品,然后将这些相似物品推荐给用户。
  • 以下是几种计算相似度的方法:
    • 欧几里德距离:
      在这里插入图片描述
      在这里插入图片描述

    • 皮尔逊相关系数
      在这里插入图片描述

    • Cosine 相似度
      在这里插入图片描述

    • Tanimoto 系数
      在这里插入图片描述

  1. 进行推荐:
  • 对于基于用户的协同过滤,可以根据相似用户的历史行为给目标用户推荐未看过的物品。
    • 基于用户的 CF 的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。 下图给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 - 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。
  • 对于基于物品的协同过滤,可以将与用户喜欢的物品相似的其他物品推荐给用户。
    • 基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。下图给出了一个例子,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。

注意:实际实现中,还需要考虑一些问题,如处理缺失数据、处理冷启动问题(新用户或新物品的推荐)、选择合适的相似性度量等。这些步骤通常在构建推荐系统时需要仔细考虑和调优。

2.1.2 计算复杂度

Item CF(基于物品的协同过滤)和User CF(基于用户的协同过滤)是协同过滤推荐系统中两个基本的策略。它们的性能和适用场景取决于系统的特点。

  1. Item CF(基于物品的协同过滤):
  • 计算物品之间的相似度,然后根据用户过去喜欢的物品找到相似的物品进行推荐。
    适用于物品相对稳定,而用户数量较大的场景。
    不太受用户数量的影响,计算相似度的复杂度相对较低。
  1. User CF(基于用户的协同过滤):
  • 计算用户之间的相似度,然后根据相似用户的历史行为给目标用户进行推荐。
    适用于用户相对稳定,而物品数量较大或更新频繁的场景。
    受用户数量影响较大,计算相似度的复杂度可能较高。

选择合适的算法取决于推荐系统所面对的具体情境和需求。在一些情况下,可以采用混合策略,结合两者的优势,以达到更好的推荐效果。例如,在实际应用中,可能会使用一种算法作为主推荐策略,另一种算法作为辅助推荐或冷启动时的备选策略。

User CF 是很早以前就提出来了,Item CF 是从 Amazon 的论文和专利发表之后(2001 年左右)开始流行,大家都觉得 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要原因就是对于一个在线网站,用户的数量往往大大超过物品的数量,同时物品的数据相对稳定,因此计算物品的相似度不但计算量较小,同时也不必频繁更新。但我们往往忽略了这种情况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,情况往往是相反的,物品的数量是海量的,同时也是更新频繁的,所以单从复杂度的角度,这两个算法在不同的系统中各有优势,推荐引擎的设计者需要根据自己应用的特点选择更加合适的算法。
所以这就引出来了,应用场景。对于不同的应用场景给出最优的计算方法。

2.1.3 应用场景

在非社交网络的网站中,内容内在的联系确实是推荐的重要原则之一,特别是在购物、阅读等场景下。以下是一些关键点:

  1. Item CF 在内容相关性强的场景中的优势:
  • 当用户在浏览某一内容(比如一本书)时,通过 Item CF 可以很自然地向用户推荐与当前内容相关的其他内容(相关书籍)。
  • 这种推荐方式更加符合用户的当前兴趣和行为,有助于引导用户在网站上浏览更多相关内容。
  • Item CF 的解释相对容易理解,因为推荐是基于物品之间的相似性,用户可以直观地理解为“因为你喜欢这个,所以我们为你推荐了类似的”。
  1. User CF 在社交网络站点中的应用:
  • 在社交网络站点中,用户之间的社交关系可以用于计算用户之间的相似性,因此 User CF 在这样的场景中更具优势。
  • 结合社交网络信息,可以提高用户对推荐解释的信服程度。例如,推荐可以是“因为你的朋友喜欢这个,所以我们认为你可能也会喜欢”。
  1. 混合策略的可能性:
  • 有时候,可以采用混合策略,结合内容推荐和用户行为推荐,以提供更全面和个性化的推荐服务。
  • 在不同场景下,可以动态选择合适的推荐算法,以满足用户的多样化需求。

推荐网站《推荐系统之算法综述》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发:SQLsugar的安装和使用

一、安装 第一步,在你的项目中找到解决方案,右键-管理解决方案的Nuget 第二步,下载对应的包,注意你的框架是哪个就下载哪个的包,一个项目安装一次包即可 点击应用和确定 安装好后会显示sqlsugar的包 二、使用&#xf…

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化

聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化 目录 聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.聚类分析 | Matlab实现基于RIME-DBSCAN的数据聚类可视化(完整源码和数据) 2.多特征输入&…

深度探析卷积神经网络(CNN)在图像视觉与自然语言处理领域的应用与优势

目录 前言1 CNN网络结构与工作原理1.1 输入层1.2 卷积层1.3 最大池化层1.4 全连接层 2 应用领域2.1 图像视觉领域中CNN的应用2.2 NLP领域中CNN的应用 3 CNN的限制与未来展望3.1 CNN的挑战3.2 CNN的展望 结语 前言 卷积神经网络(CNN)作为一种强大的深度学…

【Spring】Spring的事务管理

前言: package com.aqiuo.service.impl;import com.aqiuo.dao.AccountMapper; import com.aqiuo.pojo.Account; import com.aqiuo.service.AccountService; import org.springframework.jdbc.core.JdbcTemplate;import java.sql.Connection; import java.sql.SQLEx…

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路

之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章: CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大,有时候我们根本不需要去下载一个10G以上…

“30天化学探索旅程”提纲

文章目录 第一部分:化学基础理论1. 第1天:化学世界的开启2. 第2天:元素周期表的探索之旅3. 第3天:原子构造的秘密揭示4. 第4天:化学键的魔力解析5. 第5天:无机化合物的世界与应用 第二部分:化学…

Python中无法使用Selenium,显示ValueError: Timeout value connect was ……, but it must be an int, float or None

近期重装了系统&#xff0c;需要做个爬虫&#xff0c;最初想用Selenium和Msedge模拟浏览器操作&#xff0c;但总是不成功&#xff0c;即使是用webdriver打开网页这样最简单的操作&#xff0c;也无法做到&#xff0c;总是显示ValueError: Timeout value connect was <object …

手机远程控制电脑_手机操作电脑方法

在我们的日常生活和工作中&#xff0c;有时候我们需要从外面访问家里或公司的电脑。这听起来可能很复杂&#xff0c;但实际上非常简单。今天&#xff0c;我们将分享如何使用手机远程控制电脑。 首先&#xff0c;您需要在电脑上安装KKView远程控制软件&#xff0c;该软件提供手…

PositiveSSL和Sectigo的多域名证书

首先&#xff0c;我们要知道PositiveSSL是Sectigo旗下的子品牌&#xff0c;提供多种类型的SSL数字证书&#xff0c;包括DV基础型的多域名SSL证书。Sectigo的SSL证书产品同样比较丰富&#xff0c;不仅有DV基础型多域名SSL证书&#xff0c;还有OV企业型以及EV增强型的多域名SSL证…

IO类day02

JAVA IO java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. java将IO按照方向划分为输入与输出,参照点是我们写的程序. 输入:用来读取数据的,是从外界到程序的方向,用于获取数据. 输出:用来写出数据的,是从程序到外界的方向,用于发送数据. java将IO比喻为…

LINUX基础培训三之文件和目录管理

前言、本章学习目标 了解LINUX文件类型及目录结构掌握LINUX文件的基本属性熟悉用户、用户组、其他的安全模型掌握LINUX文件和目录的常用管理 一、LINUX文件管理 1、什么是LINUX中的文件 在LINUX操作系统中有一个重要的概念&#xff1a;一切皆为文件。除了我们常说的文本文…

pytorch09:可视化工具-TensorBoard,实现卷积核和特征图可视化

目录 一、TensorBoard简介二、TensorBoard安装三、TensorBoard运行可视化四、TensorBoard详细使用4.1 SummaryWriter4.2 add_scalar()4.3 add_scalars()4.4 add_histogram()4.4.1实际项目开发使用 4.5 add_image()4.6 torchvision.utils.make_grid4.7 卷积核和特征图可视化4.7.…

Nature:物理所利用原位透射电子显微技术在分子尺度研究立方冰

冰是水在自然界中的固体形态&#xff0c;在大自然中也广泛存在&#xff0c;冰的结构及形成机理研究对云物理及低温储存物理至关重要&#xff0c;因此科学家们对冰的研究也历史久远。提到冰在较小尺度的存在形态&#xff0c;我们最容易想到的是雪花。如下图所示&#xff0c;雪花…

视频智能分析/边缘计算AI智能分析网关V4区域入侵检测算法如何配置?

边缘计算AI智能分析网关&#xff08;V4版&#xff09;部署了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;并上报识别结果&#xff0c;并能进行语音告警播放。算法配置后&#xff0c;即可对监控视频流进行实时检测&#xf…

(2017|NIPS,VQ-VAE,离散潜在)神经离散表示学习

Neural Discrete Representation Learning 公和众和号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 3. VQ-VAE 3.1 离散潜在变量 3.2 学习 3.3 先验 4. 实验 0. 摘要 学习在无…

【QML COOK】- 000-创建Project

1. 文件->New Project... 2. Application(Qt)->Qt Quick Application(compat) 3. 填好【名称】和【创建路径】 4. 选择CMake 5. 选择QT6.2 6. 直接【下一步】 7. 直接下一步 8. 直接下一步 9. 出现工程文件 10. 点击运行 11. 出现窗口

10亿数据高效插入MySQL最佳方案

写在文章开头 你好&#xff0c;我叫sharkchili&#xff0c;目前还是在一线奋斗的Java开发&#xff0c;经历过很多有意思的项目&#xff0c;也写过很多有意思的文章&#xff0c;是CSDN Java领域的博客专家&#xff0c;也是Java Guide的维护者之一&#xff0c;非常欢迎你关注我的…

【性能】【算法】for循环,性能提高

目录 ■提高性能的方法 ・原理 1.1.java处理中&#xff0c;计算阶乘&#xff0c;为什么展开循环可以提高效率 1.2.从cpu的流水线角度&#xff0c;再说明一下 1.3.介绍一下 cup的指令流水线 ■实际运用 1.求和 代码 结果 2.求阶乘 &#xff08;性能提高效果明显&…

Debezium发布历史56

原文地址&#xff1a; https://debezium.io/blog/2019/05/23/tutorial-using-debezium-connectors-with-apache-pulsar/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 将 Debezium 连接器与 Apache Pulsar 结合…

笔试案例2

文章目录 1、笔试案例22、思维导图 1、笔试案例2 09&#xff09;查询学过「张三」老师授课的同学的信息 selects.*,c.cname,t.tname,sc.score from t_mysql_teacher t, t_mysql_course c, t_mysql_student s, t_mysql_score sc where t.tidc.cid and c.cidsc.cid and sc.sids…