协同过滤与推荐
 
协同过滤是一种根据用户对各种产品的交互与评分来推荐新产品的推荐系统技术。
 
协同过滤引入的地方就在于它只需要输入一系列用户/产品的交互记录;
 
无论是显式的交互(例如在购物网站上进行评分)还是隐式的(例如用户访问了一个
产品的页面但是没有对产品评分)交互皆可。仅仅根据这些交互,协同过滤算法就能
够知道哪些产品之间比较相似(因为相同的用户与它们发生了交互)以及哪些用户之间
比较相似,然后就可以做出新的推荐。
 
交替最小二乘法
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. JavaScript 条件语句

    if语句     有些代码块只能在一定条件下运行,通过if.if else.else代码块,可以让你的代码按条件执行. // 控制流 var foo = true; var bar = false; ...

  2. 解决Azure 消息队列ServiceBus提示证书不信任无权限的问题

    笔者在C# 消息队列-Microsoft Azure service bus 服务总线中使用Azure消息队列,最近偶尔会遇到请求数据不入队列的问题,查找日志,问题如下: 异常:X. certific ...

  3. 关于guns开源框架单元测试问题

    首先在test文件夹里面删除红框里面的两个文件 然后再在需要测试的类里面右键类名生成测试文件 生成的测试文件加上这两句话 @RunWith(SpringJUnit4ClassRunner.class) ...

  4. nodejs 搭建简易服务器

    www文件夹下 template文件夹下 server.js代码: const express=require('express'); const static=require('express-st ...

  5. 使用这些 HTTP 头保护 Web 应用

    摘要: 安全是个大学问. 这是关于web安全性系列文章的第 三 篇,其它的可点击以下查看: Web 应用安全性: 浏览器是如何工作的 Web 应用安全性: HTTP简介 目前,浏览器已经实现了大量与安 ...

  6. SAP MM 实施项目里Open PO 迁移思路探讨

    SAP MM 实施项目里Open PO 迁移思路探讨 .序言.   SAP项目上线前夕,除了静态主数据需要导入以外,可能还有一些动态数据,比如open的采购订单,open的销售订单等单据也要迁移到SA ...

  7. 怎么使用Fiddler进行抓包

    启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框.      在Fiddler Options”对话框切换到“Co ...

  8. Andriod Studio安装教程

    最近开设安卓课程,无奈于开发团队不再更新eclipse上sdk兼容问题,在eclipse上浪费了两天时间,换了Andriod Studio, Andriod Studio下载网址:http://www ...

  9. Android开发中如何使用RecyclerView

    介绍 在Android应用程序中,只要您想显示数据列表,就可以使用 RecyclerView . 早期的Android提供 ListView 了同样的东西. RecyclerView 可以被认为是一个 ...

  10. springboot 学习之路 8 (整合websocket(1))

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...