协同过滤算法介绍及算法实现forthlss

●根据你喜欢的物品给你推荐相似物品

●根据以上条件综合推荐

因此可以得出常用的协同过滤算法分为两种,基于用户的协同过滤算法(user-basedcollaboratIvefiltering),以及基于物品的协同过滤算法(item-basedcollaborativefiltering)。特点可以概括为“人以类聚,物以群分”,并据此进行预测和推荐。

二、协同过滤算法的关键问题

实现协同过滤算法,可以概括为几个关键步骤:

1:根据历史数据收集用户偏好

2:找到相似的用户(基于用户)或物品(基于物品)

三、基于用户的协同过滤算法描述

基于用户的协同过滤算法的实现主要需要解决两个问题,一是如何找到和你有相似爱好的人,也就是要计算数据的相似度:

计算相似度需要根据数据特点的不同选择不同的相似度计算方法,有几个常用的计算方法:

(1)杰卡德相似系数(Jaccardsimilaritycoefficient)

其实就是集合的交集除并集

(2)夹角余弦(Cosine)

在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦:

找到与目标用户最相邻的K个用户

所谓反查表,就是比如你喜欢的商品有A、B、C,那就分别以ABC为行名,列出喜欢这些商品的人都有哪些,其他的人就必定与你没有什么相似度了,从这些人里计算相似度,找到K个人

通过这K个人推荐商品

我们假设找到的人的喜好程度如下

那么对于产品ABCD,推荐度可以计算为:

●A:1*0.25=0.25

●B:1*0.25=0.25

●C:1*0.8=0.8

●D:1*0.25+1*0.8=1.05

很明显,我们首先会推荐D商品,其次是C商品,再后是其余商品

当然我们也可以采用其他的推荐度计算方法,但是我们一定会使用得到的相似度0.25和0.80,也即一定是进行加权的计算。

算法总结

这就是基于用户的协同推荐算法,总结步骤为

1.计算其他用户的相似度,可以使用反查表除掉一部分用户

2.根据相似度找到与你嘴相似的K个用户

3.在这些邻居喜欢的物品中,根据与你的相似度算出每一件物品的推荐度

4.根据相似度推荐物品

算法存在的问题

四、算法实现

先整理网上的资料,自己动手实践后再进行编辑

我们使用的是集成在CDH集群上的spark-on-yarn方式,使用python写算法,这是在集群上运行程序的方式以及一些问题解决

测试1——我们自己测试的基于Python的协同过滤算法实践

主要实现由读取Hive中的数据并进行算法处理(python+spark+hive)

第一步:建立Hive的连接,并读取Hive中的数据(sql方法)

第二步:划分训练集和测试集(0.8,0.2)

第三步:利用ALS函数,设置参数,并通过训练集训练得到模型

第四步:利用测试集对训练好的模型进行测试

第五步:最后将编好的.py文件上传至服务器

第六步:使用./spark-submit–masteryarn/program/wsh/readTpch1.py提交至spark进行处理。

代码:

测试2——这是网上别人的代码用来跑了一下

使用默认的ALS.train()方法,即显性反馈(默认implicitPrefs为false)来构建推荐模型并根据模型对评分预测的均方根误差来对模型进行评估。

导入需要的包

frompyspark.ml.evaluationimportRegressionEvaluatorfrompyspark.ml.recommendationimportALSfrompyspark.sqlimportRow

根据数据结构创建读取示范

创建一个函数,返回即[Int,Int,Float,Long]的对象

deff(x):rel={}rel['userId']=int(x[0])rel['movieId']=int(x[1])rel['rating']=float(x[2])rel['timestamp']=float(x[3])returnrel

读取数据

ratings=sc.textFile("hdfs://10.77.20.23:8020/text/ml-1m/ml-1m/ratings.txt").map(lambdaline:line.split('::')).map(lambdap:Row(**f(p))).toDF()

然后把数据打印出来:

构建模型

training,test=ratings.randomSplit([0.8,0.2])

使用ALS来建立推荐模型,这里我们构建了两个模型,一个是显性反馈,一个是隐性反馈

alsExplicit=ALS(maxIter=5,regParam=0.01,userCol="userId",itemCol="movieId",ratingCol="rating")alsImplicit=ALS(maxIter=5,regParam=0.01,implicitPrefs=True,userCol="userId",itemCol="movieId",ratingCol="rating")

接下来,把推荐模型放在训练数据上训练:

modelExplicit=alsExplicit.fit(training)modelImplicit=alsImplicit.fit(training)模型预测

使用训练好的推荐模型对测试集中的用户商品进行预测评分,得到预测评分的数据集

predictionsExplicit=modelExplicit.transform(test)predictionsImplicit=modelImplicit.transform(test)

THE END
1.推荐算法——基于物品的协同过滤算法标签: 算法 收藏 基于用户的协同过滤算法在用户增长的时候,相似度计算的计算会越来越困难。基于物品的算法给用户推荐他们之前喜欢的物品相似的物品。 算法步骤 计算物品之间的相似度 根据物品的相似度和用户的历史行为给用户生成推荐列表 相似度公式如下: wij=|N(i)∩N(j)||N(i)||N(j)|...https://www.imooc.com/article/27099
1.协同过滤推荐算法(python代码)协同过滤算法python代码协同过滤推荐算法(python代码) 协同过滤(Collaborative Filtering,简写CF)简单来说就是根据已有数据来推测未知的数据的一种算法。在推荐系统中协同过滤算法一般是指在海量用户中发掘一小部分和你品味比较类似的,在协同过滤中,这些用户成为你的邻居,从而基于这些邻居的信息为你推荐商品。基于启发式的协同过滤算法可以分为...https://blog.csdn.net/net19880504/article/details/137772131
2.python实现协同过滤推荐算法完整代码示例python这篇文章主要介绍了python实现协同过滤推荐算法完整代码示例,具有一定借鉴价值,需要的朋友可以参考下。测试数据 http://grouplens.org/datasets/movielens/ 协同过滤推荐算法主要分为: 1、基于用户。根据相邻用户,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表进行推荐 2、基于物品。如喜欢物品A的用户...https://www.jb51.net/article/130674.htm
3.java代码实现协同过滤算法商品推荐基于协同过滤算法java代码实现协同过滤算法商品推荐 基于协同过滤算法 一.基于用户的协同过滤算法简介 在推荐系统的众多方法之中,基于用户的协同过滤是诞最早的,原理也比较简单。基于协同过滤的推荐算法被广泛的运用在推荐系统中,比如影视推荐、猜你喜欢等、邮件过滤等。该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens ...https://blog.51cto.com/u_16213604/10293525
4.推荐算法之:DeepFM及使用DeepCTR测试腾讯云开发者社区协同过滤推荐算法代码实现(rsa算法例题) 编程算法推荐系统httpsjava网络安全 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐...https://cloud.tencent.com/developer/article/1729503
5.百度算法岗武功秘籍(中)● BPR(贝叶斯个性化排序)系列,CDL(基于MF架构引入自编码器提取item特征),CML(度量学习范畴),NCF,RRN(基于RNN建模用户历史偏好),基于强化学习的推荐算法等算法的了解? ● 协同过滤了解吗? ● 基于用户和基于item的协同过滤讲一下 ● 用户冷启动和item冷启动应该用什么策略? https://www.flyai.com/article/948
6.推荐系统协同过滤算法用户相似度计算:可以采用余弦相似度、皮尔曼相关系数等;在对传统协同过滤改进的工作中,研究人员也是通过对相似度定义的改进来解决传统的协同过滤算法存在的一些缺陷。下式中, 分别表示用户i,j对应的向量。 表示用户 对物品 的评分, 表示用户 对所有物品的平均评分, ...https://www.jianshu.com/p/0023df43622a
7.王乐怡应用个性化推荐算法的网络平台在著作权侵权中的注意义务...可见,无论是基于内容的推荐还是协同过滤推荐,算法不关心也不需要知道具体的信息内容是什么,它只关心从相关信息中抽象出来的模型。对于平台运营者而言,其在后台能直接接触到的也只是相关的数据代码,而非具体的内容。 退一步来讲,即使平台在技术层面上能够接触到算法推荐的信息,从商业的角度来看,平台也不可能去一一...https://www.jfdaily.com/sgh/detail?id=753384