ALS推荐算法

ALS算法理解   ALS算法全称为交替最小二乘法(Alternating Least Squares),是一种基于协同过滤思想的矩阵分解算法。其亮点之一就在于优化参数时使用了交替最小二乘法,而非常规的SGD或者是MBGD,这一点就决定了ALS算法可以进行分布式并行计算,因此其被收录于Spark的Mlib以及ML库中。下面将详细介绍这一算法: 一、隐语义模型 1.基本思想 在当前大数据环境下如果构建 用户-物品 共现矩阵其肯定是十分稀疏的,发生交互的用户和物品一定是少数,因此传统的矩阵分解方法(例如SVD)不再适用。 用 阅读详情

在完成基于大数据平台的图书馆推荐系统后,最近把学习的中心放在机器学习上面。在接下来的几个月中,希望自己能弄明白常见机器学习算法的原理,并且能在spark平台上进行实践。

在我的机器学习学习和实践之路的一个本书是《Spark机器学习》,这本书虽然比较旧,但是写的还是比较好。书里讲了各种常见的机器学习算法,并且在spark平台上进行了实战。在学习到此书第四章--构建基于spark的推荐系统引擎时觉得ALS算法在待分析数据具备用户对物品的打分时是一个很好用的算法,所以做记录如下。

推荐系统的产生主要是因为在公司的一些日常业务需求中需要通过用户的一些购买、借阅、点评等记录来准确预测用户下一阶段的类消费倾向以产生更大的经济效益等。在进入大数据时代的今天,数据量巨大,对于企业而言如何构建一个高效的推荐系统来对用户进行个性化一直是一个在研究和改进的问题。推荐系统的系统的核心在于推荐算法,常见的推荐算法有见链接--推荐算法综述,华科大一硕士论文。

ALS中文名作交替最小二乘法,在机器学习中,ALS特指使用最小二乘法求解的一个协同过滤算法,是协同过滤中的一种。ALS算法是2008年以来,用的比较多的协同过滤算法。它已经集成到Spark的Mllib库中,使用起来比较方便。从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF,因为它同时考虑了User和Item两个方面,即即可基于用户进行推荐又可基于物品进行推荐。

一般而言用户只会购买物品集中的极少数部分产品,并对其进行打分。考虑下面这样一个包含用户的打分矩阵(列为用户u1-u6,行为物品I1-I8),我们可以看到这个用户的评分矩阵是十分稀疏的,有很多用户的购买的记录是空的,而且在现实业务中,用户的评分矩阵会更加的稀疏。如何通过这样一个稀疏矩阵,对用户进行协同推荐用户可能很喜欢的物品对于推荐系统而言是一种很大的考验。

在spark MLlib 机器学习库中目前推荐模型只包含基于矩阵分解(matrix factorization)的实现。具体的分解思路,找出两个低维的矩阵,使得它们的乘积是原始矩阵。因此这也是一种降维技术。假设我们的用户和物品分别是U和I,那对应的“用户-物品”矩阵的维度为U×I,类似图一所示:

而言找到和“用户-物品“矩阵近似的k维(低阶)矩阵,最终还是要求出如下两个矩阵:一个用于表示用户U×k维矩阵,以及一个表征物品的I×k维矩阵。这两个矩阵也称为因子矩阵,他们的矩阵乘积便是原始评级数据的一个近似值。值得注意的是,原始评级矩阵通常很稀疏,但因子矩阵却是稠密的,如图二所示:

 

ALS是求解矩阵分解问题的一种最优化方法,它功能强大,效果理想而且被证明相对容易实现。这使得它很适合如Spark这样的平台。

ALS的实现原理是迭代式求解一系列最小二乘回归问题。在每次迭代时,固定用户因子矩阵或者是物品因子矩阵中的一个,然后用固定的这个矩阵以及评级数据来更新另一个矩阵。之后,被更新的矩阵被固定住,再更新另外一个矩阵。如此迭代,知道模型收敛(或者是迭代了预设好的次数)。

书中的利用ALS模式实现推荐的代码实例及注释
 

// 加载观众影评数据集(观众ID,影片ID,评分)
val rawData = sc.textFile("dataSet/MLDataSet/u.data")
rawData.first()
val rawRating = rawData.map(_.split("\t").take(3))
 
import  org.apache.spark.mllib.recommendation.ALS
 
import  org.apache.spark.mllib.recommendation.Rating
// 将rawRating由数组类型转换为rating(user,movie,rating)类型
//Rating(user,product,rating)
val rating = rawRating.map{case Array(user,movie,rating)=>Rating(user.toInt,movie.toInt,rating.toDouble)}
//训练模型,rank,iterations,lambda参数值分分别为50,10,0.1.
val model = ALS.train(rating,50,10,0.01)
// 基于用户的推荐
//预测出用户789对123电影的评分
val productRating = model.predict(789,123)
// 返回用户789的前10推荐电影
val userId = 789
val K = 10
val topKRecs = model.recommendProducts(userId,K)
print(topKRecs.mkString("\n"))
// 加载电影数据集(编号,电影名(上映年)....)
val movies = sc.textFile("dataSet/MLDataSet/u.item")
//只取(编号,电影名(上映年)),生成的是一个key->value
val titles = movies.map(line=>line.split("\\|").take(2)).map(array=>(array(0).toInt,array(1))).collectAsMap()
titles(123)
//查看用户789点评过的所有电影
val moviesForUser = rating.keyBy(_.user).lookup(789)
println(moviesForUser.size)
//查看观众点评数据集中评分最高的前10影片并电影编号相应转换成电影名
moviesForUser.sortBy(-_.rating).take(10).map(rating=>(titles(rating.product),rating.rating)).foreach(println)
//返回用户789的前10推荐电影并电影编号相应转换成电影名
topKRecs.map(rating=>(titles(rating.product),rating.rating)).foreach(println)
 
moviesForUser.sortBy(-_.rating).take(10).map(rating=>(titles(rating.product),rating.rating)).foreach(println)
 
//物品推荐
//导入jblas包创建向量
import org.jblas.DoubleMatrix
val aMatrix = new DoubleMatrix(Array(1.0,2.0,3.0))
//定义计算输入量为向量的余弦形式度公式
def consineSimilarity(vec1:DoubleMatrix,vec2:DoubleMatrix):Double={
    vec1.dot(vec2)/(vec1.norm2()*vec2.norm2())
}
 
val itemId = 567
val itemFactor=model.productFeatures.lookup(itemId).head
val itemVector = new DoubleMatrix(itemFactor)
consineSimilarity(itemVector,itemVector)
//计算各个物品的相似度
val sims = model.productFeatures.map{case(id,factor)=>
    val factorVector=new DoubleMatrix(factor)
    val sim = consineSimilarity(factorVector,itemVector)
    (id,sim)
     }
val K = 10
//找到相似度排名前10的
val sortedSims = sims.top(K)(Ordering.by[(Int,Double),Double]{case(id,similarity)=>similarity})
println(sortedSims.take(10).mkString("\n"))
 
println(titles(itemId))
 
val sortedSims2 = sims.top(K+1)(Ordering.by[(Int,Double),Double]{case(id,similarary)=>similarary})
sortedSims2.slice(1,11).map{case (id,sim)=>(titles(id),sim)}.mkString("\n")
//取出user和product
val temp = rating.map{case Rating(user,product,rate)=>(user,product)}
 
 
//推荐结果效果的评定
//MSE均方差
//对于某一特定用户
val actualRating = moviesForUser.take(1)(0)
val predictedRating = model.predict(789,actualRating.product)
val squaredError = math.pow(actualRating.rating-predictedRating,2.0)
//对于全部用户
val usersProducts = rating.map{case Rating(user,product,rating)=>(user,product)}
val predictions = model.predict(usersProducts).map{case Rating(user,product,rating)=>((user,product),rating)}
val ratingsAndPredictions = rating.map{case Rating(user,product,rating)=>((user,product),rating)}.join(predictions)
val MSE =ratingsAndPredictions.map{case((user,product),(actual,predicted))=>math.pow((actual-predicted),2)}.reduce(_+_)/ratingsAndPredictions.count
//均方根差
val RMSE = math.sqrt(MSE)
 
//直接调用Mllib内置函数计算RMSE和MSE
import org.apache.spark.mllib.evaluation.RegressionMetrics
val  predictedAndTrue = ratingsAndPredictions.map{case((user,product),(predicted,actual))=>(predicted,actual)}
val regressionMetrics = new RegressionMetrics(predictedAndTrue)
println("MSE:"+regressionMetrics.meanSquaredError)
println("RMSE:"+regressionMetrics.rootMeanSquaredError)
 
 

 

Spark---ALS推荐算法 Spark——ALS推荐算法推荐算法介绍协同过滤式推荐的优缺点ALS推荐算法的介绍用户对产品项目的评分稀疏矩阵(Sparse Matrix)的问题矩阵分解(Matrix Factorization)数据下载环境说明在IPython Notebook中运行推荐程序首先启动所有虚拟机并启动Hadoop集群Cluster切换至IPython Notebook工作目录并在Hadoop YARN-clien... 阅读详情

相关推荐

基于ALS算法的简易在线推荐系统

继前期完成广义线性模型的在线流式机器学习的代码后,我们对spark的mllib中的推荐系统这一部分比较感兴趣,因为推荐系统这一部分在现实生活中也非常实用,尤其是基于地理位置的在线推荐系统目前非常火热,很多商业软件如大众点评,淘点点等都希望能根据用户以往的一些行为和当前所处的地理位置给用户做出最佳的推荐,给用户带来意想不到的惊喜。 在推荐系统领域,目前市面上中文的参考书并不多,我们主要学习了目前就

zhangyuming010的专栏 1万+

Spark--ALS推荐算法

Spark–ALS推荐算法 常用的推荐方法: 基于内容的推荐 将物品和用户分类。将已分类的物品推荐给对该物品感兴趣的用户。需要较多的人力成本。 基于统计的推荐 基于统计信息,如热门推荐。易于实现,但对用户的个性化偏好的描述能力较弱。 协同过滤推荐 可以达到个性化推荐,不需要内容分析,可以发现用户新的兴趣点,自动化程度高。 协同过滤 (Collaborative Filtering, 简称 CF) 一个简单的问题:如果你现在想看个电影,但你不知道具体看哪部,你会怎么做? 协同过滤的.

xukeke12138的博客 2393

推荐系统之ALS算法详解

ALS算法是2008年以来,用的比较多的协同过滤算法。它已经集成到Spark的Mllib库中,使用起来比较方便。 从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF。它同时考虑了User和Item两个方面。 用户和商品的关系,可以抽象为如下的三元组:<User,Item,Rating>。其中,Rating是用户对商品的评分,表征用户对该商品的喜好程度。 ALS...

GFDGFHSDS的博客 1万+

推荐系统模型(基于用户推荐,基于物品推荐,推荐冷启动问题)——ALS算法——相似度的计算

目录 1. 概述 1.1 协同过滤 1.2 相似度的计算 1.3 ALS算法 2. 代码实践 2.1 案列1:综合 ​2.2案列2:基于用户的推荐 2.3 模型存储与加载 2.3.1 存储 2.3.2 加载 2.4 案列3:基于物品推荐 3. 推荐系统的冷启动问题 ① 用户冷启动 ② 系统冷启动  ③ 物品冷启动 1. 概述 买了一个手机,再次刷新会出现类似的产...

m0_37657725的博客 6619

ALS推荐算法简介

目录ALS(交替最小二乘法)1.1 原理推导2.1.1 ALS2.1.2 ALS-L2正则化2.1.3 Stochastic Gradient ALS2.1.4 隐式反馈(Implicit Feedback )2. 优缺点 ALS(交替最小二乘法) ALS (Alternating Least Squares) 交替最小二乘法。ALS 的核心是:打分矩阵R是近似低秩的。换句话说,一个打分矩阵 R ...

来自Daisy和她的单程车票 2504

PySpark实现ALS推荐算法

@PySpark 实现ALS推荐算法 spark-submit movie_rec.py from pyspark import SparkConf, SparkContext from pyspark.mllib.recommendation import ALS, Rating from math import sqrt 获取所有movie名称和id对应集合 def movie_dict(f...

ting1234cn的博客 2939

ALS推荐算法在Spark上的优化--从50分钟到3分钟

Spark上的ALS推荐算法优化, 从无法满足业务需求的耗时50分钟到3分钟.

butterluo的博客 1万+

基于Spark ALS算法的个性化推荐

今天来使用spark中的ALS算法做一个小推荐。需要数据的话可以点击查看初识sparklyr—电影数据分析,在文末点击阅读原文即可获取。 其实在R中还有一个包可以做推荐,那就是recommenderlab。如果数据量不大的时候可以使用recommenderlab包,之前也用该包做过电影评分预测模型(点击即可查看)。如果数据量较大还是推荐使用spark来进行计算。 在spark中包含...

王亨的博客 3715

对ALS算法自己的理解

ALS算法的核心思想:将用户-物品评分矩阵分解为两个低维矩阵的乘积,即将用户-物品的关联关系表示为用户和物品的特征向量表示。具体而言,首先初始化一个因子矩阵,使用评分矩阵获取另外的因子矩阵,交替计算,直到满足终止条件(最大迭代次数 or 收敛条件),此时就可以得到两个因子矩阵,即模型Model。ALS算法构建模型最本质就是两个因子矩阵。

qq_41680016的博客 1790

pyspark案例系列11-ALS推荐算法

spark ALS算法 推荐算法

只是甲的博客 1499

Vue 10分钟入门VR全景显示 基于photo-sphere-viewer

文章目录前言一、引入photo-sphere-viewer?二、使用步骤1.引入库2.声明容器3.内容加载4.全部代码总结 前言 由于工作的需求,要实现全景图片的展示与预览,本来以为会是一个很难的内容,没想到使用现成的组件photo-sphere-viewer就可以轻松实现,上手只需要10分钟! 一、引入photo-sphere-viewer? 可以直接通过npm进行引入 npm install photo-sphere-viewer 二、使用步骤 1.引入库 photo-sphere-viewer

YIGE_MO的博客 5865

ALS推荐算法学习总结

在完成基于大数据平台的图书馆推荐系统后,最近把学习的中心放在机器学习上面。在接下来的几个月中,希望自己能弄明白常见机器学习算法的原理,并且能在spark平台上进行实践。 在我的机器学习学习和实践之路的一个本书是《Spark机器学习》,这本书虽然比较旧,但是写的还是比较好。书里讲了各种常见的机器学习算法,并且在spark平台上进行了实战。在学习到此书第四章--构建基于spark的推荐系统引擎时觉得...

轻功水上漂的博客 2万+

基于PLC的全自动洗衣机控制系统+控制程序

本设计使用PLC控制系统替换了传统的继电器控制系统,实现了全自动洗衣机在硬件方面的提升,丰富了全自动洗衣机在软件方面的功能,提高了全自动洗衣机的洗衣效率,基本可以满足用户的洗衣需求。

zzzz114231的博客 8953

ALS模型协同过滤推荐算法【附代码】

随着计算机和大数据技术的飞速发展,互联网数据呈井喷式增长。如何从庞大的互联网数据中快速且精准地获取所需信息,成为当前推荐算法的重点。传统的 ALS 协同过滤推荐算法存在一些问题,导致推荐结果误差较大。✅博主简介:本人擅长建模仿真、数据分析、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。

坷拉博士 1481

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 859

Simulink实战:5步搞定固定翼飞行器六自由度动力学建模(附模型下载)

本文提供了一份详细的Simulink实战指南,通过5个核心步骤手把手教你构建固定翼飞行器的六自由度动力学模型。内容涵盖从顶层架构设计、核心方程手动实现,到模型集成、测试调试及进阶优化的完整流程,旨在帮助航空航天学生和工程师将抽象理论转化为可运行的仿真模型,并附有模型下载。

perl8的博客 634

als算法参数_推荐算法之ALS

1推荐算法概述只知用户评分矩阵(User-Item Matrix),试向用户(User)推荐产品(Item)。输入:上图所示为用户评分矩阵,其中用户评分为1-5,?所示为需要估算的用户评分。如果能够快速估算出用户的评分那么就可以对用户进行推荐了,实现的方法非常多,但并不是本次讨论的重点,一笔飞过——以下为常用的推荐算法概括。实现:一般来说,推荐系统通常往往是多个推荐算法的叠加或集合,其中协同过滤算...

weixin_42102634的博客 1515

Vue3实战:企业级应用集成钉钉扫码登录全流程解析

本文详细解析了在Vue3企业级应用中集成钉钉扫码登录的全流程。从钉钉开放平台应用创建与配置,到Vue3前端如何优雅地嵌入并管理扫码组件,再到后端如何安全地处理OAuth 2.0授权码以换取用户信息并完成登录,提供了完整的实战代码与避坑指南。该方案能有效实现安全便捷的单点登录,统一企业身份认证。

weixin_29019241的博客 289

pyspark运行ALS推荐算法

首先创建读取路径,这个取决于你的pyspark是以什么方式启动的 global Path if sc.master[0:5] == 'local': Path='file:/home/swt/pythonwork/PythonProject/' else: Path="hdfs://ubuntu:9000/user/swt/" 我是本地启动 sc.master 'local[*]...

pyswt的博客 1803

使用3sigma原则去除数据表中的极端值

本文使用3sigma解决数据表中出现的极端值问题,其中包括基本原理、使用原则(检验方法)、代码展示这3个部分

qq_51397866的博客 4377

【学习系列】SAP RAP 17:RAP应用部署集成至Fiori Launchpad 【S4HC Public Edition】

本文详细介绍了在SAP S/4HANA Cloud环境中部署RAP应用集成到Fiori Launchpad的两种方法:使用BAS(SAP Business Application Studio)和VSCode。主要步骤包括:1)在BTP中配置Destination连接ES环境;2)设置信任关系;3)创建BAS开发空间;4)通过Fiori应用生成器部署RAP应用;5)创建IAM App、Business Catalog和Business Role;6)配置Launchpad Space和Pages。文章还提供

DeveloperMrMeng的博客 960

【推荐系统系列6】ALS推荐算法原理

ALS算法原理ALS算法是2008年以来,用的比较多的协同过滤算法。它已经集成到Spark的Mllib库中,使用起来比较方便。从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF。它同时考虑了User和Item两个方面。用户和商品的关系,可以抽象为如下的三元组:&lt;User,Item,Rating&gt;。其中,Rating是用户对商品的评分,表征用户对该商品的喜好程度...

Nieson2012的专栏 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

推荐算法——ALS算法原理及python代码实例

ALS算法原理即python代码实例 http://www.cnblogs.com/luchen927/archive/2012/02/01/2325360.html 上面的网页概括了ALS算法出现之前的协同过滤算法的概况。 协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。ALS算法是2008年以来,用的比较多的协

qq_39777550的博客 4004

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ALS算法(推荐系统)

测试数据 用户ID,物品ID,评分 1,101,5.0 1,102,3.0 1,103,2.5 2,101,2.0 2,102,2.5 2,103,5.0 2,104,2.0 3,101,2.5 3,104,4.0 3,105,4.5 3,107,5.0 4,101,5.0 4,103,3.0 4,104,4.5 4,106,4.0 5,101,4.0 5,102,3.0 5,103,2.0 ...

LJ2415的博客 1615

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Spark高级数据分析》——音乐推荐(ALS算法)

文章目录《Spark高级数据分析》——基于ALS算法的音乐推荐0. 简介1. 数据准备2. 训练ALS模型3. 为用户推荐音乐家4. 利用网格搜索与AUC评分5. 完整代码 《Spark高级数据分析》——基于ALS算法的音乐推荐 0. 简介 来源: 《Spark高级数据分析》 原书GitHub地址: https://github.com/sryza/aas 内容简述:利用Spark中ALS算法,...

蒋含竹的博客 5266
上一篇: Java 多线程 并发编程 整理
下一篇: 【机器学习】蒙特卡罗算法 整理
CWS_chen
博客等级 码龄11年 220粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值