机器学习探索-推荐引擎算法(实验一)

记录今天在机器学习方向的探索,单位的实验室环境用起来很舒服。赞。

记录我在机器学习领域的每一步成长。// 本次实验素材取自林大贵先生的大数据巨量分析和机器学习整合开发实战。

实验用数据源在文件页面下载。

Let‘s go。

------------------------------------------------------------------------------------------------------------------------------------------------------

假设有一个在线电影网站,会员付费在线观赏电影。公司希望运用大数据分析推荐引擎,增加会员观看影片的次数

以增加营收。

------------------------------------------------------------------------------------------------------------------------------------------------------

一,找出问题。

公司原有推荐系统是人口统计式的推荐,必须具有个人属性数据。基于隐私权的原因,越来越难搜集到正确的个人

属性数据。

二,设计解决方案模型。

使用协同过滤式推荐,通过观察所有会员给影片的评分来推断每个会员的喜好,并向会员推荐合适的影片。

三,搜集数据。

冷启动问题,没有历史记录就没有可分析的数据源。

四,创建模型。

使用ALS推荐算法,解决稀疏矩阵的问题。即使大量用户和产品,也能在合理的时间内完成运算。

ALS算法介绍

显式评分,用户给影片的评分。

隐式评分,用户点击次数。

稀疏矩阵,用户与产品项目成千上万,整个矩阵就会很大,而且有很多空白,使用计算机来计算这样的矩阵

很浪费内存,需要花费很多时间。

矩阵分解,把矩阵(m*n) 分解为 矩阵(m*rank)和矩阵(rank*n),(m*n)约等于(m*rank)*(rank*n)

------------------------------------------------------------------------------------------------------------------------------------------------------

下载文件页面中的数据源ml-100k上传至/tmp目录,进入spark-shell。

导入文件
val rawUserData = sc.textFile("file:/tmp/ml-100k/u.data")

查看
rawUserData.collect()     rawUserData.foreach(println)
rawUserData.take(5).foreach(println)

u.data字段内容
userid itemid rating timestamp

查看第一个字段的统计信息
rawUserData.map(_.split(‘\t‘)(0).toDouble).stats()

导入训练引擎ALS
import org.apache.spark.mllib.recommendation.ALS
import org.apache.spark.mllib.recommendation.Rating

提取前三个字段信息
val rawRatings = rawUserData.map(_.split(‘\t‘).take(3))

ALS训练数据的格式是RDD[Rating]数据类型,Rating定义如下:
user,product,rating

创建ratingRDD
val ratingsRDD = rawRatings.map{case Array(user, movie, rating) => Rating(user.toInt,movie.toInt,rating.toDouble)}

使用ALS.train训练

显式训练
ALS.train(ratings:RDD[Rating],rank:Int,iterations:Int,lambda:Double):MatrixFactorizationModel  //Rating 数据源RDD,rank 原矩阵m*n 分解为 m*rank和rank*n矩阵,iterations 计算次数,lambda 建议值0.01,返回数据MatrixFactorizationModel

隐式训练
ALS.trainlmplicit(ratings:RDD[Rating],rank:Int,iterations:Int,lambda:Double):MatrixFactorizationModel

进行显式训练
val model = ALS.train(ratingsRDD,10,10,0.01)

使用模型推荐
MatrixFactorizationModel.model.recommendProducts(user:Int,num:Int):Array[Rating]

针对用户推荐
model.recommendProducts(196,5).mkString("\n")

查看针对用户推荐评分
model.predict(196,464)

针对产品推荐给用户
MatrixFactorizationModel.model.recommendUsers(product,num)

实际执行
model.recommendUsers(464,5).mkString("\n")

显示推荐电影名称

导入文件item
val itemRDD = sc.textFile("/tmp/ml-100k/u.item")

创建ID和电影名称对照表
val movieTitle = itemRDD.map(line => line.split("\\|").take(2)).map(array => (array(0).toInt,array(1))).collectAsMap()

查看前5条
movieTitle.take(5).foreach(println)

查看某ID电影名称
movieTitle(146)

显示推荐电影
model.recommendProducts(196,5).map(rating => (rating.product,movieTitle(rating.product),rating.rating)).foreach(println)

至此就完成了spark-shell中的推荐引擎算法。

时间: 2024-08-05 07:32:37

机器学习探索-推荐引擎算法(实验一)的相关文章

机器学习探索-推荐引擎算法(实验二)

上篇文章介绍了推荐引擎算法在spark-shell中的操作,实际环境中我们不会仅仅运行一次, 更多的是一次编译多次运行,今天我们开始实验二,不过上次实验的笔录很有用哦. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 一,处理数据

探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类

聚类分析 什么是聚类分析? 聚类 (Clustering) 就是将数据对象分组成为多个类或者簇 (Cluster),它的目标是:在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大.所以,在很多应用中,一个簇中的数据对象可以被作为一个整体来对待,从而减少计算量或者提高计算质量. 其实聚类是一个人们日常生活的常见行为,即所谓"物以类聚,人以群分",核心的思想也就是聚类.人们总是不断地改进下意识中的聚类模式来学习如何区分各个事物和人.同时,聚类分析已经广泛的应用在许多应用中,包

探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探

"探索推荐引擎内部的秘密"系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用.同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法.本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎. 信息发现 如今已经进入了一个数据爆炸的时代,

推荐引擎算法学习导论:协同过滤、聚类、分类

作者:July.出处:结构之法算法之道 本文转自互联网,仅供学习收藏只用,如有侵权,请联系本人删除. 引言 昨日看到几个关键词:语义分析,协同过滤,智能推荐,想着想着便兴奋了.于是昨天下午开始到今天凌晨3点,便研究了一下推荐引擎,做了初步了解.日后,自会慢慢深入仔细研究(日后的工作亦与此相关).当然,此文也会慢慢补充完善. 本文作为对推荐引擎的初步介绍的一篇导论性的文章,将略去大部分的具体细节,侧重用最简单的语言简要介绍推荐引擎的工作原理以及其相关算法思想,且为了着重浅显易懂有些援引自本人1月7

探索推荐引擎内部的秘密

"探索推荐引擎内部的秘密"系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用.同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法.本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎. 信息发现 如今已经进入了一个数据爆炸的时代,

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(转)

第 2 部分: 深入推荐引擎相关算法 - 协同过滤 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法. 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”.本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现.Apache Mahout 是 ASF 的一个

Spark机器学习之推荐引擎

一. 最小二乘法建立模型 关于最小二乘法矩阵分解,我们可以参阅: 一.矩阵分解模型. 用户对物品的打分行为可以表示成一个评分矩阵A(m*n),表示m个用户对n各物品的打分情况.如下图所示: 其中,A(i,j)表示用户user i对物品item j的打分.但是,ALS 的核心就是下面这个假设:的打分矩阵 A 可以用两个小矩阵和的乘积来近似:.这样我们就把整个系统的自由度从一下降到了.我们接下来就聊聊为什么 ALS 的低秩假设是合理的.世上万千事物,人们的喜好各不相同.但.举个例子,我喜欢看略带黑色

推荐引擎初探

"探索推荐引擎内部的秘密"系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用.同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法.本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎. 信息发现 如今已经进入了一个数据爆炸的时代,

推荐引擎的学习资料

下面的资料没有做优先级排序. 文章: CSDN的推荐引擎主题资料汇集页面:http://subject.csdn.net/tuijian/ 推荐<探索推荐引擎的秘密>系列 http://tiny4.org/blog/2011/05/recommend-enginee/  该文作者为iApp4me创始人,文中提到几个开源推荐引擎项目 探索推荐引擎内部的秘密系列:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/in