IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 协同过滤算法实验 -> 正文阅读

[人工智能]协同过滤算法实验

? ? ? ? ?本次呢,简单介绍一下协同过滤算法,并且给出简单的电影推荐实验作为举例说明。利用Spark MLlib中的协同过滤算法完成针对特定用户的电影推荐功能。这一部分需要实现实现输入用户id,输出为其推荐的电影。

一、协同过滤

? ? ? ?所谓协同过滤,就是简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的资讯,个人透过合作的机制给予资讯相当程度的回应并记录下来以达到过滤的目的进而帮助别人选择信息。对于实现针对用户个性的推荐功能这一需求,非常合适。

二、电影推荐

? ? ? ? 首先来看我们的结果:

?

?

? ? ? ? 需要用到的数据集下载链接在文章的最后。

大概是这个样子:

movies和ratings两个数据集

数据之间以 :: 隔开

movies的每一列分别表示

movie_id , movie_name , movie_type

?ratings的每一列分别表示:

movie_id , user_id , score , timestamp(时间戳)

?代码如下:

object SparkPi {
  case class Rating(userId: Int, movieId: Int, rating: Float, timestamp: Long)
  def parseRating(str: String): Rating = {
    val fields = str.split("::")
    assert(fields.size == 4)
    Rating(fields(0).toInt, fields(1).toInt, fields(2).toFloat, fields(3).toLong)
  }
  def main(args: Array[String]): Unit = {
    val sc=SparkSession.builder()
      .master("local")
      .appName("movie")
      .getOrCreate()
    val ratingRDD=sc.sparkContext.textFile("/ratings.dat")
    val ratings=sc.createDataFrame(ratingRDD.map(parseRating))
    val Array(training, test) = ratings.randomSplit(Array(0.8, 0.2))
    //训练模型
    val alsExplicit = new ALS()
      .setMaxIter(5)            
      .setRegParam(0.01)         
      .setUserCol("userId")
      .setItemCol("movieId")
      .setRatingCol("rating")    
    val alsImplicit = new ALS()
      .setMaxIter(5)           
      .setRegParam(0.01)   
      .setImplicitPrefs(true)
      .setUserCol("userId")
      .setItemCol("movieId")
      .setRatingCol("rating")    
    val modelExplicit = alsExplicit.fit(training)
    val modelImplicit = alsImplicit.fit(training)
    val predictionsExplicit = modelExplicit.transform(test).na.drop()
    val predictionsImplicit = modelImplicit.transform(test).na.drop()
    //计算模型误差
    val evaluator = new RegressionEvaluator()
      .setMetricName("rmse")
      .setLabelCol("rating")
      .setPredictionCol("prediction")
    val rmseExplicit = evaluator.evaluate(predictionsExplicit)
    val rmseImplicit = evaluator.evaluate(predictionsImplicit)
    println(s"Explicit:模型均方根误差 : $rmseExplicit")
    println(s"Implicit:模型均方根误差 : $rmseImplicit")
    println("请输入用户id:")
    val userId:Int=StdIn.readInt()
    val movieDF=ratings.where(s"userId= $userId")
    println(s"为id为 $userId 的用户推荐如下10部电影:")
    movieDF.limit(10).show()
    val df=movieDF.limit(10)
    //将数据存到数据库中
    val prop=new Properties()
    prop.put("user","root")
    prop.put("password","Wyk@123456")
    prop.put("driver","com.mysql.jdbc.Driver")
df.write.mode("Overwrite").jdbc("jdbc:mysql://localhost:3306/movie","movie.advice",prop)
  }
}

?下面是有关的数据集MovieLens | GroupLensicon-default.png?t=LA92https://grouplens.org/datasets/movielens/

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:09:34  更:2021-12-26 22:13:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:07:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码