spark mllib 协同过滤算法之如何实现基于余弦相似度的用户相似度计算
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了spark mllib 协同过滤算法之如何实现基于余弦相似度的用户相似度计算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解
千家信息网最后更新 2026年11月01日spark mllib 协同过滤算法之如何实现基于余弦相似度的用户相似度计算
这篇文章主要介绍了spark mllib 协同过滤算法之如何实现基于余弦相似度的用户相似度计算,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
运行代码如下
/** * 协同过滤算法,基于余弦相似度的用户相似度计算 * 一般来说欧几里得相似度用来表现不同目标的绝对差异性,分析目标之间的相似性与差异情况. * 而余弦相似度更多的是对目标从前进趋势上进行区分. */package spark.collaborativeFilteringimport org.apache.spark.{SparkConf, SparkContext}import scala.collection.mutable.Mapobject sparkCollaborativeFiltering { val conf = new SparkConf() .setMaster("local") .setAppName("CollaborativeFilteringSpark ") //设置环境变量 val sc = new SparkContext(conf) //实例化环境 val users = sc.parallelize( Array("张三","李四","王五","朱六","卓七") ) //设置用户 val films = sc.parallelize( Array("飘","龙门客栈","罗密欧与朱丽叶","澳门风云","狼图腾") ) //设置电影名 //使用一个source嵌套map作为姓名电影名和分值的存储 val source = Map[String,Map[String,Int]]() val filmSource = Map[String,Int]()//设置一个用以存放电影分的map def getSource(): Map[String,Map[String,Int]] = {//设置电影评分 val user1FilmSource = Map("飘" -> 2,"龙门客栈" -> 3, "罗密欧与朱丽叶" -> 1,"澳门风云" -> 0,"狼图腾" -> 1) val user2FilmSource = Map("飘" -> 1,"龙门客栈" -> 2, "罗密欧与朱丽叶" -> 2,"澳门风云" -> 1,"狼图腾" -> 4) val user3FilmSource = Map("飘" -> 2,"龙门客栈" -> 1, "罗密欧与朱丽叶" -> 0,"澳门风云" -> 1,"狼图腾" -> 4) val user4FilmSource = Map("飘" -> 3,"龙门客栈" -> 2, "罗密欧与朱丽叶" -> 0,"澳门风云" -> 5,"狼图腾" -> 3) val user5FilmSource = Map("飘" -> 5,"龙门客栈" -> 3, "罗密欧与朱丽叶" -> 1,"澳门风云" -> 1,"狼图腾" -> 2) source += ("张三" -> user1FilmSource)//对人名进行存储 source += ("李四" -> user2FilmSource) source += ("王五" -> user3FilmSource) source += ("朱六" -> user4FilmSource) source += ("卓七" -> user5FilmSource) source //返回嵌套map } //两两计算分值,采用余弦相似性 def getCollaborateSource(user1:String,user2:String):Double = { val user1FilmSource = source.get(user1) .get.values.toVector //获得第1个用户的评分 val user2FilmSource = source.get(user2) .get.values.toVector //获得第2个用户的评分 val member = user1FilmSource.zip(user2FilmSource) .map(d => d._1 * d._2).reduce(_ + _) .toDouble//对公式分子部分进行计算,zip将若干RDD 压缩成一个RDD val temp1 = math.sqrt(user1FilmSource.map(num => { //求出分母第1个变量值 math.pow(num,2) //数学计算 }).reduce(_ + _)) //进行叠加 val temp2 = math.sqrt(user2FilmSource.map(num => {//求出分母第2个变量值 math.pow(num,2)//数学计算 }).reduce(_ + _))//进行叠加 val denominator = temp1 * temp2 //求出分母 member / denominator//进行计算 } def main(args: Array[String]) { getSource() //初始化分数 val name = "李四" //设定目标对象 users.foreach(user =>{//迭代进行计算 println(name + " 相对于 " + user +"的相似性分数是:"+ getCollaborateSource(name,user)) }) }}结果如图
感谢你能够认真阅读完这篇文章,希望小编分享的"spark mllib 协同过滤算法之如何实现基于余弦相似度的用户相似度计算"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
相似
用户
图腾
客栈
风云
龙门
朱丽
朱丽叶
罗密
澳门
罗密欧
余弦
电影
目标
篇文章
算法
分母
相似性
李四
求出
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
精品咖啡豆
互联网与科技
互联网科技海报
湖北九亚互联网络科技有限公司
互联网科技产业
中关村互联网科技集团
互联网科技工作委员会毛军
新华互联网科技学院
互联网巨头反垄断金融科技
深圳科技互联网
互联网科技英文
互联网科技公司官网
小马过河互联网科技
顺玮阁互联网科技
赶超互联网科技 微信多开
互联网科技公司有风险吗
山东子淼互联网科技有限公司
每天都有哪些好的互联网科技
产业互联网科技服务公司
陕西九四连强互联网科技有限公司
美国互联网科技巨头监管
互联网科技资迅
万易互联网科技有限公司
顺网科技2021年互联网排名
阿里巴巴算科技企业还是互联网
银川新华互联网科技职业技术培训学校图片
佛山市拉法互联网科技有限公司
互联网界的黑科技
马化腾互联网科技教学
每日互联网科技新闻