《Spark快速大数据分析》
11.5.4 协同过滤与推荐
协同过滤是一种根据用户对各种产品的交互与评分来推荐新产品的推荐系统技术。
协同过滤引入的地方就在于它只需要输入一系列用户/产品的交互记录;
无论是显式的交互(例如在购物网站上进行评分)还是隐式的(例如用户访问了一个
产品的页面但是没有对产品评分)交互皆可。仅仅根据这些交互,协同过滤算法就能
够知道哪些产品之间比较相似(因为相同的用户与它们发生了交互)以及哪些用户之间
比较相似,然后就可以做出新的推荐。
尽管MLlib的API使用了用户和产品概念,但是也可以将协同过滤用于其他应用场景中,
比如在社交网络中推荐用户,为文章推荐要添加的标签,为电台推荐歌曲等。
交替最小二乘法
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星),而预测出来的评分也是得分。
而用于隐式反馈时,每个评分代表的是用户会和给定产品发送交互的置信度(比如随着用户访问一个网页次数
的增加,平跟也会提高),预测出来的也是置信度。

转载于:https://www.cnblogs.com/ihongyan/p/5017965.html

基于MLlib的机器学习--协同过滤与推荐相关推荐

  1. 吴恩达机器学习(十四)推荐系统(基于梯度下降的协同过滤算法)

    目录 0. 前言 1. 基于内容的推荐算法(Content-based recommendations) 2. 计算电影特征 3. 基于梯度下降的协同过滤算法(Collaborative filter ...

  2. 基于协同过滤的推荐引擎

    探索推荐引擎内部的秘密"系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用.同时在理论讲解的基础上,还会结合 Apache Maho ...

  3. 基于矩阵分解的协同过滤推荐

    基于矩阵分解的协同过滤推荐 Traditional SVD 通常SVD矩阵分解指的是SVD奇异值分解,我们姑且将其命名为Traditional SVD(传统并经典着)其公式如下: M m × n = ...

  4. 基于云模型的协同过滤推荐算法代码实现(附源代码)

    基于云模型的协同过滤推荐算法代码实现(附源代码) 一.云模型介绍 针对传统推荐系统数据稀疏.相似性计算方法导致共同评分用户少的问题,提出利用云模型概念与定量数值转换的优势,研究云模型(百度百科查看概念 ...

  5. 实时推荐服务建设——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(八)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  6. 基于CF(协同过滤)推荐算法

    基于物品的CF(协同过滤)推荐算法 1.1算法简介 CF(协同过滤)简单来形容就是利用兴趣相投的原理进行推荐,协同过滤主要分两类,一类是基于物品的协同过滤算法,另一种是基于用户的协同过滤算法,这里主要 ...

  7. 基于KMeans聚类的协同过滤推荐算法推荐原理、过程、代码实现 Canopy聚类算法 KMeans+Canopy聚类算法 聚类算法程序实现 KMEans聚类算法代码java

    基于KMeans聚类的协同过滤推荐算法可运用于基于用户和基于项目的协同过滤推荐算法中,作为降低数据稀疏度和提高推荐准确率的方法之一,一个协同过滤推荐过程可实现多次KMeans聚类. 一.基于KMean ...

  8. 推荐算法-基于协同过滤的推荐算法

    推荐算法-基于协同过滤的推荐算法 在如今信息量呈爆炸式增长的时代,谷歌百度等搜索引擎为人们查找信息提供了便利,帮助用户快速查找有价值的信息.然而此类查询方式是大众化的,无法根据个人兴趣为用户展示相关的 ...

  9. jsp mysql 推荐算法_基于jsp+mysql+Spring+mybatis的SSM协同过滤音乐推荐管理系统(个性化推荐)...

    运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以. IDE环境: Eclipse,Myeclipse,IDEA都可以 tomcat环境: 最好是Tomcat 7 ...

最新文章

  1. 【学习笔记】分治FFT
  2. 8.3 matlab图形用户界面设计方法
  3. 1px问题在ios与android,IOS安卓常见问题
  4. js实现替换指定字符后面的内容(包括指定字符)
  5. 一份 2.5k star 的《React 开发思想纲领》
  6. 細微之處看看mysql與sql server的一些差別
  7. 为C程序员准备的0x10个最佳问题
  8. ubuntu sudo apt-get update 失败 解决方法
  9. 视频剪辑用i7,8600还是r5,3600好些?
  10. maven中pom文件中scope的作用
  11. “咕”了 73 天,何同学终于回归:最喜欢 3D 打印机,但不要买
  12. 在PPT设计中如何制作有效的图表?
  13. PHP微信H5支付Demo
  14. 浅析iOSApp签名原理及流程
  15. 【软考-软件设计师精华知识点笔记】考试大纲及题型介绍
  16. 微星主板开机一直进入bios问题解决办法
  17. 数据分析 时间序列分析 ARMA模型
  18. JAVA删除数组中指定元素
  19. 深入浅出理解什么是HTAP
  20. 进制转换 和 正数负数——原码,反码,补码

热门文章

  1. python plt.show_如何使用Python最大化plt.show()窗口
  2. 儿童学文字编程python_手把手教你python数字知识
  3. javascript中的字符串和数组的互转
  4. 马昕璐201771010118《面向对象程序设计(java)》第七周学习总结
  5. 完成聊天室的私聊功能
  6. 关于CaciiEZ端口流量阀值报警的设置
  7. MVC + LigerUI 做后台管理还真是清爽
  8. C#中使用DES和AES加密解密
  9. PHP迸发,PHP 开发 「十宗罪」
  10. Android 监听网络连接状态,判断网络连接方式,9.0网络连接,获取已连接WiFi名称SSID和MAC