协同过滤与推荐
 
协同过滤是一种根据用户对各种产品的交互与评分来推荐新产品的推荐系统技术。
 
协同过滤引入的地方就在于它只需要输入一系列用户/产品的交互记录;
 
无论是显式的交互(例如在购物网站上进行评分)还是隐式的(例如用户访问了一个
产品的页面但是没有对产品评分)交互皆可。仅仅根据这些交互,协同过滤算法就能
够知道哪些产品之间比较相似(因为相同的用户与它们发生了交互)以及哪些用户之间
比较相似,然后就可以做出新的推荐。
 
交替最小二乘法
MLlib中包含交替最小二乘法(ALS)的一个实现,这是一个协同过滤的常用算法,可以很好的
扩展到集群上。它位于mllib.recommendation.ALS类中。
 
ALS会为每个用户和产品都设一个特征向量,这样用户向量与产品向量的点积就接近于它们的得分。
它接收下面所列几个参数:
  rank
        使用的特征向量的大小,更大的特征向量会产生更好的模型,但是也需要话费更大的计算代价,默认10
  iterations
        要执行的迭代次数,默认10
   lamda
        正则化参数,默认0.01
   alpha
        用来在ALS中计算置信度的常量,默认1.0
   numUserBlocks,  numProductBlocks
        切分用户和产品数据的块的数目,用来控制并行度,可以选择传递-1来上MLlib自动决定.
 
要使用ALS算法,需要有一个由mllib.recommendation.Rating对象组成的RDD,
其中每个包含一个用户id,一个产品id和一个评分。
 
实现过程中的一个挑战是每个id都需要是一个32位的整数值。
如果id是字符串或者更大的数字,那么可以直接在ALS中使用id的哈希值,
即使有两个用户或者产品映射到同一个Id上,总体结果依然会不错。
还有一种办法是broadcast()一张从产品id到正兴致的表,来付给每个产品独特的id。
 
ALS返回一个MatrixFactorizationModel对象来表示结果,
可以调用predict()来对一个由(UserId,productId)对组成的RDD进行预测评分。
也可以对使用model.recommendProducts(userId,numProducts)来为一个给定用户找到最值得推荐的前numProduct个产品。
注意,和MLlib中的其他模型不同,MatrixFactorizationModel对象很大,为每个用户和产品都存储了一个向量。
这样我们就不能把它存储到磁盘上,然后在另一个程序中读取回来。
不过,可以把模型中生成的特征向量RDD,也就是model.userFeatures和model.productFeatures保存到分布式文件系统上。
 
最后,ALS有两个变种:显示评分(默认情况)和隐式反馈(通过调用ALS.trainImplicit()而非ALS.train()来打开)。
用于显式评分时,每个用户对于一个产品的评分需要是一个得分(例如1到5星),而预测出来的评分也是得分。
而用于隐式反馈时,每个评分代表的是用户会和给定产品发送交互的置信度(比如随着用户访问一个网页次数
的增加,评分也会提高),预测出来的也是置信度。

spark-MLlib之协同过滤ALS的更多相关文章

  1. Spark MLlib之协同过滤

    原文:http://blog.selfup.cn/1001.html 什么是协同过滤 协同过滤(Collaborative Filtering, 简称CF),wiki上的定义是:简单来说是利用某兴趣相 ...

  2. Spark机器学习之协同过滤算法

    Spark机器学习之协同过滤算法 一).协同过滤 1.1 概念 协同过滤是一种借助"集体计算"的途径.它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度.其内在思想是相 ...

  3. 基于mllib的协同过滤实战(电影推荐)

    //加载需要的包 import org.apache.spark.rdd._ import org.apache.spark.mllib.recommendation.{ALS, Rating, Ma ...

  4. spark MLlib 概念 6:ALS(Alternating Least Squares) or (ALS-WR)

    Large-scale Parallel Collaborative Filtering for the Netflix Prize http://www.hpl.hp.com/personal/Ro ...

  5. Spark 基于物品的协同过滤算法实现

    J由于 Spark MLlib 中协同过滤算法只提供了基于模型的协同过滤算法,在网上也没有找到有很好的实现,所以尝试自己实现基于物品的协同过滤算法(使用余弦相似度距离) 算法介绍 基于物品的协同过滤算 ...

  6. 协同过滤 CF & ALS 及在Spark上的实现

    使用Spark进行ALS编程的例子可以看:http://www.cnblogs.com/charlesblc/p/6165201.html ALS:alternating least squares ...

  7. 【机器学习笔记一】协同过滤算法 - ALS

    参考资料 [1]<Spark MLlib 机器学习实践> [2]http://blog.csdn.net/u011239443/article/details/51752904 [3]线性 ...

  8. 基于Spark Mllib,SparkSQL的电影推荐系统

    本文测试的Spark版本是1.3.1 本文将在Spark集群上搭建一个简单的小型的电影推荐系统,以为之后的完整项目做铺垫和知识积累 整个系统的工作流程描述如下: 1.某电影网站拥有可观的电影资源和用户 ...

  9. SparkMLlib—协同过滤推荐算法,电影推荐系统,物品喜好推荐

    SparkMLlib-协同过滤推荐算法,电影推荐系统,物品喜好推荐 一.协同过滤 1.1 显示vs隐式反馈 1.2 实例介绍 1.2.1 数据说明 评分数据说明(ratings.data) 用户信息( ...

随机推荐

  1. SpringMVC页面向Controller传参

    关于SpringMVC页面向Controller传参的问题,看了网上不少帖子,大多总结为以下几类: 1.直接把页面表单中相关元素的name属性对应的值作为Controller方法中的形参. 这个应该是 ...

  2. JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇. 如果你错过了前面的章节,可以在这里找到它们: JavaScript 是如何工作的:引擎,运行时和调用堆栈的概述! Jav ...

  3. javaweb项目创建和虚拟主机配置

    首先点击File-àNew-àWeb [roject-à在Projcet Name里写项目名-à点击finish-à会出来一个框,选择NO,一个javaweb项目就创建好了.具体请看下图! 配置服务器 ...

  4. JS之类数组

    类数组 什么是类数组? 定义: 拥有length属性,其属性(索引)为非负整数 不具有数组的所具有的方法 类数组与非类数组的比较 类数组: var obj = { 0 : "a", ...

  5. 亚马逊 amazon connect(呼叫中心)

    背景 公司为提高客服部门沟通效率对接电话呼叫中心,调研后选择了亚马逊的Amazon Connect服务,因为是国外业务没有选择用阿里云,怕有坑. Amazon Connect后台 需要在后台创建“联系 ...

  6. git克隆github上的代码(整个分支),并使用vs code上传到github

    好久没写博客辣,之前一直用sublime text3,最近开始用vc写,感觉很良好.然后公司也在用git,就写一个克隆上传的教程吧 1.下载git https://www.git-scm.com/do ...

  7. Dynamics 365 Customer Engagement安装FAQ

    微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...

  8. 关于Windows系统不会变慢的设想

    记录软件安装的过程,比如创建了哪些服务,哪些计划任务以及启动项等等. 然后软件安装完成后把关于软件的进程,服务,计划任务等都删掉. 然后手动创建一个脚本,用脚本代替软件的启动.比如,如果要启动sqls ...

  9. android view 转Bitmap 生成截图

    文章链接:https://mp.weixin.qq.com/s/FQmYfT-KYiDbp-0HzK_Hpw 项目中经常会用到分享的功能,有分享链接也有分享图片,其中分享图片有的需要移动端对屏幕内容进 ...

  10. java设计模式——适配器模式 Java源代码

    前言:适配器模式就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作.通常被用在一个项目需要引用一些开源框架来一起工作时,这些框架的内部都有一 ...