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

上篇文章介绍了推荐引擎算法在spark-shell中的操作,实际环境中我们不会仅仅运行一次,

更多的是一次编译多次运行,今天我们开始实验二,不过上次实验的笔录很有用哦。

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

一,处理数据。

def PrepareData(): (RDD[Rating], Map[Int, String]) = {
    val sc = new SparkContext(new SparkConf().setAppName("Recommend").setMaster("local"))  
    print("开始读取用户评分数据中...")
    val rawUserData = sc.textFile("file:/E:/ml-100k/u.data")
    val rawRatings = rawUserData.map(_.split("\t").take(3))
    val ratingsRDD = rawRatings.map{ case Array(user, movie, rating) => Rating(user.toInt, movie.toInt, rating.toDouble) }
    println("共计: " + ratingsRDD.count.toString() + "条 ratings")
    print("开始读取电影数据中...")
    val itemRDD = sc.textFile("/E:/ml-100k/u.item")
    val movieTitle = itemRDD.map(line => line.split("\\|").take(2)).map(array => (array(0).toInt,array(1))).collect().toMap
    val numRatings = ratingsRDD.count()
    val numUsers = ratingsRDD.map(_.user).distinct().count()
    val numMovies = ratingsRDD.map(_.product).distinct().count()
    println("共计: ratings:" + numRatings + " User " + numUsers + " Movie " + numMovies)
    return (ratingsRDD,movieTitle)    
  }

 二,针对用户id推荐电影。

def RecommendMovies(model:MatrixFactorizationModel,movieTitle:Map[Int,String],inputUserID:Int) = {
    val RecommendMovie = model.recommendProducts(inputUserID, 10)
    var i = 1
    println("针对用户id" + inputUserID + "推荐下列电影:")
    RecommendMovie.foreach{r =>
      println(i.toString() + "." + movieTitle(r.product) + "评分: " + r.rating.toString())
      i += 1
      }
  }

 三,针对电影推荐用户。

def RecommendUsers(model:MatrixFactorizationModel,movieTitle:Map[Int,String],inputMovieID:Int) = {
    val RecommendUser = model.recommendUsers(inputMovieID, 10)
    var i = 1
    println("针对电影 id" + inputMovieID + "电影名: " + movieTitle(inputMovieID.toInt) + "推荐下列用户id:" )
    RecommendUser.foreach{r =>
      println(i.toString + "用户id:" + r.user + "评分:" + r.rating)
      i = i + 1
      }
  }

 四,去除不必要的log。

def SetLogger {
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("com").setLevel(Level.OFF)
    System.setProperty("spark.ui.showConsoleProgress","false")
    Logger.getRootLogger().setLevel(Level.OFF);
  }

 五,对使用者相对友好的指令。

def recommend(model:MatrixFactorizationModel,movieTitle:Map[Int,String]) = {
    var choose = ""
    while (choose != "3") {
      print("请选择要推荐的类型 1.针对用户推荐电影 2.针对电影推荐感兴趣的用户 3.离开?")
      choose = readLine()
      if (choose == "1") {
        print("请输入用户id?")
        val inputUserID = readLine()
        RecommendMovies(model,movieTitle,inputUserID.toInt)
        } else if (choose == "2") {
          print("请输入电影的id?")
          val inputMovieID = readLine()
          RecommendUsers(model,movieTitle,inputMovieID.toInt)
          }
        }  
  }

 六,主函数。

def main(args:Array[String]) {
      val (ratings,movieTitle) = PrepareData()
      val model = ALS.train(ratings,5,20,0.1)
      recommend(model,movieTitle)
  }

编译成功后在windows下运行,需要下载https://github.com/srccodes/hadoop-common-2.2.0-bin,

然后添加系统变量HADOOP_HOME,值是上面那个文件的解压地点,Path中添加$HADOOP_HOME\bin

实际执行

时间: 2024-08-15 22:56:13

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

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

记录今天在机器学习方向的探索,单位的实验室环境用起来很舒服.赞. 记录我在机器学习领域的每一步成长.// 本次实验素材取自林大贵先生的大数据巨量分析和机器学习整合开发实战. 实验用数据源在文件页面下载. Let's go. ------------------------------------------------------------------------------------------------------------------------------------------

探索推荐引擎内部的秘密,第 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