视频讲解
最近给之前做的校园二手商城平台加了一个推荐算法,大家可以参考下面的视频以及下面的文字讲解。
基于协同过滤算法的校园二手商城
经过调查,目前存在的推荐算法 目前,协同过滤、基于内容推荐和混合推荐三种算法在电商领域被广泛应用。本系统采用的是协同过滤算法,协同过滤算法分为基于用户的协同过滤算法以及基于物品的协同过滤算法,这两种的发展是根据实际情况不同逐渐演变的。
协同算法的历史
协同算法是推荐系统中的一种常见算法,最早应该可以追溯到二十世纪六十年代。在那个时候,社会科学家和心理学家开始研究人们在不同情境下的行为,他们发现人们的决策往往受到周围人的影响。这种现象促使计算机科学家开始思考如何利用用户相似性来进行推荐。
在1990年代末至2000年代初期,随着互联网的发展,电子商务网站迅速兴起,推荐系统的需求也越来越大,此时协同过滤算法逐渐成为一个研究热点。最具代表性的就是Netflix为了提高自己的推荐效果,发起的"百万美元推荐挑战赛",促进了推荐系统领域的技术突破和发展。之后,深度学习等人工智能技术的崛起,为推荐系统带来了新的可能性,例如使用基于神经网络的推荐算法,其中最具代表性的是Google推出的Wide&Deep模型和YouTube推出的DNN模型。尽管已经有了很多种推荐算法,但协同算法仍然是一个非常好的选择,并且在实践中被广泛应用。
协同过滤算法有那些分类
协同过滤(Collaborative Filtering)是一种推荐算法,它基于用户行为数据(或收集的其它反馈信息),利用用户之间的相似性或物品之间的相似性来进行推荐。该算法分为两类:基于用户的协同过滤和基于物品的协同过滤。
基于用户的协同过滤:首先计算用户之间的相似度,然后根据相似用户对物品的评分数据,对指定用户未评分的物品进行预测和排序,最后将预测得分高的物品推荐给该用户。这种方法的缺点是当用户数增加时,计算量会不断增加,而且存在“稀疏”问题,即用户对物品的评分数据往往是稀疏的。
基于物品的协同过滤:首先计算物品之间的相似度,然后根据用户历史行为数据(如点击、购买、评分等)中涉及到的物品相似性,对用户没行为过的物品进行预测和排序,最后将预测得分高的物品推荐给该用户。这种方法相对于基于用户的协同过滤算法具有更好的稳定性和扩展性,但是需要预先计算物品相似度矩阵,而这个计算过程可能会比较耗时。
除了以上两种常见的协同过滤算法,还有基于模型的协同过滤算法和混合方法等。基于模型的协同过滤算法通过建立模型来预测用户对物品的评分或行为,例如Matrix Factorization(矩阵分解)等;混合方法则将不同的算法和数据源结合起来进行推荐。
基于用户的协同过滤算法
关键点在于找到相似的用户 ,核心思想是人以群分,来给相似的用户推荐相同的商品,举例如下:
从这个图中我们可以看出,用户A喜欢的物品有物品A,物品C;用户B喜欢的物品只有物品B;用户C喜欢的物品有物品A,物品C,物品D。我们可以看出用户A 和用户C的喜好很相似,因为其都购买了物品A以及物品C,这时候我们就可以把物品D推荐给用户A。
站在系统的层面考虑,主要是计算用户之间的相似度,就是如何计算和目标用户相似的人,
这个在下文有方法。
基于物品的协同过滤算法
关键在于物品的相似,例如你购买了一件科比的篮球鞋科1,那么会为你推荐科比的科比4,根据物品的相似来进行一个推荐,下面是一个例子
用户A喜欢的有物品A,物品C;用户B喜欢的有物品A,物品B,物品C;用户C喜欢的有物品A;物品A和物品C相似,我们就可以给用户C推荐物品C。
校园二手商城平台采用的是基于用户的协同过滤算法,下面讲解具体过程,基于用户的协同过滤关键点在于找到与你相似的人,下面讲解几种常用的计算相似度的方法
皮尔逊相关系数
计算X与Y的线性相关性:
皮尔逊相关系数的取值范围,为[-1,1],其绝对值越接近1相关性越强,绝对值越接近于0,相关性越弱,相关系数小0时说明两个变量之间呈现负相关,大于0,则为正相关,对于相关性强度可以参考下表:
计算过程:
Cov(X,Y)为协方差,D(X),D(Y)为方差
有下面四个公式可以进行计算:
关于公式四,我进行简单的推导,过程如下:
欧式距离
欧式距离(Euclidean Distance)是指在数学上欧几里得空间中两点间的距离,也称为欧几里得度量。它是指在多维空间中,两个向量之间的物理距离,是最常见的距离度量方法之一。欧氏距离定义为两个向量之间的欧几里得范数,即两点之间的直线距离。在二维或三维空间中,欧式距离可以直观的理解为两点之间的直线距离。
欧式距离公式为:
校园二手商城平台中用户之间相似度的计算是通过皮尔逊相关系数来计算的
系统实现
上面说了相似度,那么用户的相似度,反应在代码层面就是两个用户都对物品的喜爱,这个喜爱,我们可以通过用户点击商品的详情,收藏商品以及购买商品反应出来。
这里我们建一个recommend表,表中记录用户的userid,商品的commid,以及score,得分就是用户对商品的喜爱度,
代码中浏览商品详情一次,我会把得分加一,这个也可自己设置
收藏商品一次,分值会加3
购买一次会加5分
这样通过记录用户的历史操作,在表中记录其对物品的喜爱,然后用根据表中其他的用品给其做推荐,推荐其还没购买的商品
用户刚登录或者没有登录的情况下,是猜您喜欢页面中是没有数据的,
具体的流程如如下所示;
结语
🔥一个人可以掌握知识,但只有与他人交流才能形成智慧。
🔥One person can acquire knowledge, but wisdom is formed only in the exchange with others.
🏆 我坚信人与人之间的差距是表面上是财富的差距,本质上是大脑中认知的差距,
我们下期再见。