协同过滤算法的实现
- 格式:docx
- 大小:19.50 KB
- 文档页数:4
基于用户的协同过滤算法概述在互联网时代,我们面临的一个重要问题是如何根据用户的个人兴趣和喜好,为用户推荐他们可能感兴趣的内容和产品。
基于用户的协同过滤算法是一种非常有效的推荐系统算法,它通过分析用户之间的相似度来给用户推荐相关的内容。
本文将介绍基于用户的协同过滤算法的原理和实现方法。
1. 算法原理基于用户的协同过滤算法的原理是通过分析用户之间的相似度来产生推荐结果。
它基于这样一个观点:喜欢相似东西的人,可能还会喜欢同类的其他东西。
算法的主要步骤如下:1.1 用户相似度计算首先,我们需要计算用户之间的相似度。
常用的相似度计算方法包括余弦相似度、欧几里德距离、皮尔逊相关系数等。
这些方法都有各自的优缺点,选择合适的相似度计算方法取决于具体的应用场景。
1.2 邻居用户选择计算用户之间的相似度后,我们可以选择与目标用户最相似的邻居用户。
通常情况下,我们选择与目标用户相似度最高的K个用户作为邻居用户。
1.3 推荐结果生成选定邻居用户后,我们可以通过观察邻居用户与目标用户的行为来生成推荐结果。
通常情况下,我们会根据邻居用户的行为和评分来为目标用户推荐可能感兴趣的内容。
2. 算法实现基于用户的协同过滤算法可以通过编程实现。
下面是一个简单的示例代码:```def user_based_cf(user_ratings, target_user, k):# 计算用户之间的相似度similarities = {}for user in user_ratings:if user != target_user:similarities[user] = cosine_similarity(user_ratings[user], user_ratings[target_user])# 选择邻居用户neighbors = sorted(similarities, key=similarities.get, reverse=True)[:k]# 生成推荐结果recommendations = {}for neighbor in neighbors:for item in user_ratings[neighbor]:if item not in user_ratings[target_user]:if item not in recommendations:recommendations[item] = 0recommendations[item] +=user_ratings[neighbor][item] * similarities[neighbor]sorted_recommendations = sorted(recommendations,key=recommendations.get, reverse=True)return sorted_recommendations```在上述代码中,user_ratings是一个字典,它存储了每个用户的评分数据。
基于物品的协同过滤算法实现步骤宝子!今天来唠唠基于物品的协同过滤算法的实现步骤呀。
咱得先有个数据集,这个数据集就像是一个大宝藏箱,里面装满了用户对物品的各种操作信息,比如评分啦、购买记录之类的。
这数据集可得好好整理,就像整理自己心爱的小物件一样,不能马虎。
然后呢,要计算物品之间的相似度。
这相似度咋算呢?有好多种方法呢。
比如说余弦相似度,就像是在看两个物品在用户喜好这个大空间里的“姿势”有多像。
要是两个物品总是被同一群用户喜欢或者不喜欢,那它们的相似度就比较高啦。
这一步就像是给物品们找小伙伴,找到那些最相似的小伙伴。
接下来呀,就要根据这个相似度来给用户推荐物品啦。
如果一个用户喜欢某个物品,那咱就去找这个物品的那些相似小伙伴。
然后看看这些小伙伴里面,哪些是这个用户还没接触过的。
就像是给用户介绍他喜欢的东西的“亲戚”一样。
不过呢,这里面还有个小问题。
就是可能找到的相似物品太多啦,那咱就得挑挑拣拣。
比如说按照相似度的高低来排序,把那些最相似的排在前面。
这就好比是在一群候选人里面,先挑出最优秀的那几个。
还有哦,有时候数据可能会有一些小瑕疵,像是某个用户的评分可能不太靠谱。
这时候咱就得想办法处理一下这些数据,不能让这些小坏蛋影响了整个推荐的准确性。
总的来说呢,基于物品的协同过滤算法实现起来就像是一场有趣的寻宝之旅。
从数据集中找到宝贝,再把宝贝们分类找相似,最后把合适的宝贝推荐给需要的用户。
这算法就像是一个贴心的小助手,努力让用户发现更多自己可能会喜欢的东西呢。
宝子,你是不是也觉得这算法还挺好玩的呀 。
基于协同过滤算法的音乐推荐系统设计与实现一、绪论随着互联网技术的发展,网络音乐逐渐成为人们日常生活中不可或缺的一部分。
然而,用户在面对海量音乐资源时,往往难以找到自己感兴趣的音乐,因此音乐推荐系统成为了一个备受关注的研究方向。
本文将介绍一种基于协同过滤算法的音乐推荐系统的设计与实现。
二、协同过滤算法协同过滤算法是一种经典的推荐算法,它基于用户以往的历史行为来预测用户未来的兴趣。
对于音乐推荐系统,协同过滤算法的核心思想是将用户与音乐看作一个二维矩阵,其中每个元素表示用户对音乐的评分。
如果两个用户对同一首歌曲的评分相似,那么可以认为他们具有相似的兴趣,因此可以将一位用户对于一首他尚未听过的歌曲的喜欢度预测为与他兴趣相似的其他用户对于该歌曲的评分的加权平均值。
协同过滤算法又可分为基于用户的协同过滤算法和基于物品的协同过滤算法。
基于用户的协同过滤算法认为具有相似兴趣的用户在过去一定会对同一首歌曲有相似的评价,因此可以通过对多个相似用户对该歌曲的评分进行加权平均,来预测该用户对该歌曲的喜欢度。
而基于物品的协同过滤算法则认为对于一首歌曲喜欢的用户在未来对其他相似的歌曲也有可能会有相似的喜欢度,因此可以通过对相似歌曲的评分进行加权平均,来预测用户对该歌曲的喜欢度。
两种方法各有优缺点,实践中通常采用两种方法的加权平均值进行综合推荐。
三、音乐推荐系统设计本文设计的音乐推荐系统主要分为数据预处理、协同过滤算法实现、推荐结果可视化展示三部分。
3.1 数据预处理本文所使用的数据来源为公开的网易云音乐数据集,其中包含了多个维度的数据信息,包括歌曲名、歌手、专辑、标签等信息。
在数据预处理过程中,首先需要对数据集进行去重、过滤、清洗等操作,以确保数据的完整性和可用性。
同时,需要对数据进行特征提取操作,将复杂的数据信息转换为协同过滤算法所需的二维矩阵形式,以便于算法的实现和优化。
3.2 协同过滤算法实现本文采用了基于物品的协同过滤算法,具体实现流程如下:(1)计算每首歌曲之间的相似度。
推荐系统中的协同过滤算法实现方法随着互联网的快速发展和数据的爆炸增长,人们面临着信息过载的问题。
在这个信息过载的时代,推荐系统成为用户处理信息的重要工具。
推荐系统通过分析用户的历史行为和偏好,将合适的信息推荐给用户,提供个性化的服务。
协同过滤算法是推荐系统中最常用的算法之一。
它的核心思想是通过分析用户间的相似性,将一个用户的行为和喜好与其他用户的行为和喜好进行比较,从而推荐给该用户其他用户喜欢的项目。
协同过滤算法的实现方法主要有两种:基于用户的协同过滤算法和基于物品的协同过滤算法。
基于用户的协同过滤算法首先计算用户之间的相似度,然后根据相似度来预测用户对未知项目的评分。
在计算用户相似度时,可以使用不同的相似性度量方法,如皮尔逊相关系数、余弦相似度等。
根据用户相似度,可以使用加权平均或者加权和的方法来进行推荐。
基于用户的协同过滤算法的优点是简单易懂,容易实现和解释。
然而,当用户数量较多时,计算用户之间的相似度会变得复杂和耗时。
基于物品的协同过滤算法与基于用户的协同过滤算法类似,不同之处在于首先计算物品之间的相似度,然后根据相似度来为用户推荐物品。
与基于用户的算法相比,基于物品的算法更适用于系统物品比用户数量大的情况。
基于物品的协同过滤算法的计算代价低,适用于实时推荐系统。
然而,在物品数量较大时,计算物品之间的相似度也会变得复杂。
除了基于用户和物品的协同过滤算法,还有基于模型的协同过滤算法。
基于模型的协同过滤算法通过构建对用户和物品建模,从而预测用户对物品的评分。
常用的模型包括矩阵分解、深度学习等。
基于模型的协同过滤算法能够捕捉到更多的信息,提升推荐的准确性。
然而,由于建模的复杂性,计算代价通常较高。
在使用协同过滤算法时,还需要解决冷启动和稀疏性的问题。
冷启动问题指的是当新用户或新物品加入系统时,由于缺乏历史数据,无法准确推荐。
稀疏性问题是指用户评分数据通常是稀疏的,即很多用户只评分了一小部分项目。
推荐系统中的协同过滤算法原理及实现步骤协同过滤算法是一种常用于推荐系统的算法,通过利用用户行为数据和物品属性信息来预测用户对物品的偏好,并推荐给他们可能感兴趣的物品。
本文将介绍协同过滤算法的原理和实现步骤。
一、协同过滤算法原理协同过滤算法基于相似性原理来进行推荐,可以分为两种类型:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤基于用户的协同过滤算法计算用户之间的相似性,然后根据相似用户的行为来推荐物品。
其核心原理是:如果两个用户在过去的行为中有相似的偏好和兴趣,那么他们在未来的行为中可能也会有相似的偏好和兴趣。
2. 基于物品的协同过滤基于物品的协同过滤算法计算物品之间的相似性,然后根据用户对相似物品的偏好来推荐物品。
其核心原理是:如果一个用户对某个物品有兴趣,那么他可能对与该物品相似的其他物品也有兴趣。
二、协同过滤算法实现步骤协同过滤算法的实现步骤可以分为以下几个步骤:1. 数据预处理在实施协同过滤算法之前,需要对用户行为数据进行预处理。
预处理的目的是清洗数据、处理缺失值和离群值,以及将数据转换为适合算法处理的格式。
2. 计算用户相似度或物品相似度对于基于用户的协同过滤,需要计算用户之间的相似性;对于基于物品的协同过滤,需要计算物品之间的相似性。
相似性可以使用余弦相似度、皮尔逊相关系数等方法进行计算。
3. 预测评分通过用户相似度或物品相似度,预测用户对未评分物品的评分。
对于基于用户的协同过滤,可以根据相似用户的评分加权平均来进行预测;对于基于物品的协同过滤,可以根据用户对相似物品的评分加权平均来进行预测。
4. 推荐物品根据预测的评分,为用户推荐可能感兴趣的物品。
可以根据预测评分的降序排序,选取Top N的物品作为推荐结果。
5. 评估算法效果为了评估协同过滤算法的效果,可以使用常见的评测指标,如准确率、召回率、覆盖率等。
三、总结协同过滤算法是一种常用的推荐算法,可以根据用户行为数据和物品属性信息进行预测和推荐。
协同过滤算法的实现协同过滤算法是一种利用用户行为数据进行推荐的算法,通过分析用户的历史行为,提供个性化推荐给用户。
协同过滤算法一般分为基于用户的协同过滤算法和基于物品的协同过滤算法。
基于用户的协同过滤算法是指根据用户的历史行为数据,找寻与之相似的用户,推荐这些相似用户喜欢的物品给用户。
算法的实现流程如下:1. 建立用户-物品矩阵用户-物品矩阵是一个 $m \times n$ 的稀疏矩阵,其中 $m$ 表示用户的数量,$n$ 表示物品的数量。
矩阵中的每一个元素 $a_{ij}$ 表示用户 $i$ 对物品 $j$ 的打分情况,如果用户 $i$ 对物品 $j$ 打过分,则矩阵中该元素会有具体的分数值,否则为$\varnothing$。
2. 计算用户之间的相似度计算用户之间的相似度一般采用余弦相似度或者皮尔逊相似度。
这里以余弦相似度为例,余弦相似度的计算公式如下:$$sim(i,j) = \frac{\sum_{u \in U} r_{ui} * r_{uj}}{\sqrt{\sum_{u \in U} r_{ui}^2} * \sqrt{\sum_{u \in U} r_{uj}^2}}$$其中,$sim(i,j)$ 表示用户 $i$ 和用户 $j$ 之间的相似度,$r_{ui}$ 表示用户$u$ 对物品 $i$ 的打分情况,$U$ 表示与用户 $i$ 喜欢的物品相似的其他用户。
3. 找出相似用户找出与当前用户相似度最高的 $k$ 个用户作为该用户的邻居用户。
4. 生成推荐物品列表根据当前用户的邻居用户的历史行为数据,生成该用户的推荐物品列表。
推荐物品的计算方法如下:基于物品的协同过滤算法是将物品分类,根据用户对某一类物品的评分情况,推荐该类物品中其他用户评分高的物品给用户。
算法实现流程如下:3. 基于用户历史行为进行推荐$$P(u,i) = \sum_{j \in N(i)} sim(i,j) * r_{u,j} $$。
协同过滤算法范文协同过滤算法是一种基于用户行为和兴趣相似性的推荐算法。
它通过分析大量用户行为数据和物品属性,将用户与他人的行为和喜好进行比较,来实现个性化推荐,提高用户满意度和购买率。
下面将详细介绍协同过滤算法的原理、分类和应用。
一、协同过滤算法原理具体而言,协同过滤算法可以分为两种类型:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤(User-Based Collaborative Filtering)基于用户的协同过滤算法是根据用户之间的行为相似性进行推荐。
算法的步骤包括:1)计算用户之间的相似度,常用的相似度度量方法有皮尔逊相关系数和余弦相似度。
2)根据用户相似度和其他用户的行为数据,预测目标用户对尚未产生行为的物品的评分或喜好程度。
3)将预测出的评分或喜好程度进行排序,为目标用户生成推荐列表。
2. 基于物品的协同过滤(Item-Based Collaborative Filtering)基于物品的协同过滤算法是根据物品之间的关联性进行推荐。
算法的步骤包括:1)计算物品之间的相似度,常用的相似度度量方法有余弦相似度和Jaccard相似度。
2)根据用户的历史行为和物品相似度,预测用户对尚未产生行为的物品的评分或喜好程度。
3)将预测出的评分或喜好程度进行排序,为目标用户生成推荐列表。
二、协同过滤算法分类除了基于用户和物品的协同过滤算法,还有一些其他的协同过滤算法,如基于模型的协同过滤、混合协同过滤等。
1. 基于模型的协同过滤(Model-Based Collaborative Filtering)基于模型的协同过滤算法是通过建立数学模型来预测用户对物品的评分或喜好程度。
常用的模型包括矩阵分解模型和概率图模型。
-矩阵分解模型:将用户-物品的评分矩阵分解为用户-因子矩阵和因子-物品矩阵,通过计算两个矩阵的乘积来预测用户对尚未产生行为的物品的评分。
-概率图模型:利用概率图模型来描述用户行为和物品属性之间的关系,通过概率推理来预测用户对物品的喜好程度。
CollaborativeFiltering(协同过滤)算法详解基本思想基于⽤户的协同过滤算法是通过⽤户的历史⾏为数据发现⽤户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进⾏度量和打分。
根据不同⽤户对相同商品或内容的态度和偏好程度计算⽤户之间的关系。
在有相同喜好的⽤户间进⾏商品推荐。
简单的说就是如果A,B两个⽤户都购买了x、y、z三本图书,并且给出了5星的好评。
那么A和B就属于同⼀类⽤户。
可以将A看过的图书w也推荐给⽤户B。
基于⽤户协同过滤算法的原理图所以,协同过滤算法主要分为两个步骤:1、寻找相似的⽤户集合;2、寻找集合中⽤户喜欢的且⽬标⽤户没有的进⾏推荐。
具体实现⼀、寻找⽤户间的相似度1、Jaccard公式Jaccard系数主要⽤于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此⽆法衡量差异具体值的⼤⼩,只能获得“是否相同”这个结果,所以Jaccard系数只关⼼个体间共同具有的特征是否⼀致这个问题。
如果⽐较X与Y的Jaccard相似系数,只⽐较xn和yn中相同的个数。
Jaccard公式2、⽪尔逊相关系数⽪尔逊相关系统是⽐欧⼏⾥德距离更加复杂的可以判断⼈们兴趣相似度的⼀种⽅法。
它在数据不是很规范时,会倾向于给出更好的结果。
假定有两个变量X、Y,那么两变量间的⽪尔逊相关系数可通过以下公式计算:公式⼀:⽪尔逊相关系数公式⼀公式⼆:⽪尔逊相关系数公式⼆公式三:⽪尔逊相关系数公式三公式四:⽪尔逊相关系数公式四上述四个公式等价,其中E是数学期望,cov表⽰协⽅差,N表⽰变量取值的个数。
3、欧⼏⾥德距离假定两个⽤户X、Y,均为n维向量,表⽰⽤户对n个商品的评分,那么X与Y的欧⼏⾥德距离就是:多维欧⼏⾥德距离公式数值越⼩则代表相似度越⾼,但是对于不同的n,计算出来的距离不便于控制,所以需要进⾏如下转换:相似度公式使得结果分布在(0,1]上,数值越⼤,相似度越⾼。
基于矩阵分解的协同过滤算法python一、简介协同过滤算法是推荐系统中最常用的算法之一。
基于用户行为数据,通过计算用户之间的相似度,预测用户对某个物品的评分或者是否会对其感兴趣。
其中,矩阵分解是协同过滤算法中的一种重要方法。
本文将介绍基于矩阵分解的协同过滤算法,并使用Python实现。
二、矩阵分解1. 原理在协同过滤算法中,我们需要构建一个用户-物品评分矩阵,然后通过计算相似度来预测用户对某个物品的评分或者是否会对其感兴趣。
但是,在实际应用中,这个矩阵往往非常稀疏,存在大量缺失值。
为了解决这个问题,我们可以使用矩阵分解的方法。
具体来说,我们将原始评分矩阵拆分成两个低维矩阵:一个是用户-隐含因子矩阵,另一个是隐含因子-物品矩阵。
这样,在预测时只需要计算两个低维矩阵的乘积即可得到预测评分值。
2. 数学模型设原始评分矩阵为$R_{m*n}$,其中$m$表示用户数,$n$表示物品数。
我们将其分解成两个低维矩阵:$$R_{m*n} \approx U_{m*k}V_{k*n}$$其中,$U_{m*k}$表示用户-隐含因子矩阵,$V_{k*n}$表示隐含因子-物品矩阵,$k$表示隐含因子的个数。
我们需要通过优化损失函数来求解出这两个矩阵。
常用的损失函数有均方误差(Mean Squared Error)和交叉熵(Cross Entropy)等。
3. 优化算法常见的优化算法有梯度下降法、随机梯度下降法和Adam等。
其中,随机梯度下降法在实际应用中表现最好。
三、基于矩阵分解的协同过滤算法实现1. 数据准备我们使用MovieLens数据集进行实验。
该数据集包含多个版本,本文使用的是ml-latest-small版本。
该版本包含100,000条评分记录,共有610位用户和9,724部电影。
首先,我们需要下载数据集并导入Python中:```pythonimport pandas as pd# 加载数据集ratings = pd.read_csv('ratings.csv')```2. 数据预处理由于原始评分矩阵非常稀疏,我们需要将其转换为稠密矩阵。
一、引言在推荐系统中,协同过滤算法是一种常用的技术,它基于用户对物品的评价来进行推荐。
pearson 相关系数是衡量两个变量之间线性关系强弱的统计量,因此可以用于协同过滤算法中计算用户之间或物品之间的相似度。
本文将探讨如何利用pearson 相关系数实现协同过滤算法,以及其优缺点及个人观点和理解。
二、相关概念介绍1. pearson 相关系数pearson 相关系数衡量了两个变量之间的线性相关程度,在协同过滤算法中通常用于计算用户对物品的评价之间的相似度。
其取值范围在-1到1之间,0表示无相关性,1表示完全正相关,-1表示完全负相关。
2. 协同过滤算法协同过滤算法是基于用户对物品的评价来进行推荐的一种技术。
它分为基于用户的协同过滤和基于物品的协同过滤两种方式,其中pearson 相关系数常用于计算用户或物品之间的相似度。
1. 计算用户之间的相似度在基于用户的协同过滤中,我们需要计算用户之间的相似度。
我们可以先计算每个用户对物品的评分均值,然后利用pearson 相关系数公式计算用户之间的相似度。
公式如下:\[ r = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2} \times\sqrt{\sum_{i=1}^{n} (Y_i - \bar{Y})^2}} \]其中,\( X_i \) 表示用户i对物品的评分,\( \bar{X} \) 表示用户i对所有物品的评分均值,\( Y_i \) 表示用户j对物品的评分,\( \bar{Y} \) 表示用户j对所有物品的评分均值。
2. 计算物品之间的相似度在基于物品的协同过滤中,我们需要计算物品之间的相似度。
同样地,我们可以先计算每个物品得到的评分均值,然后利用pearson 相关系数公式计算物品之间的相似度。
3. 推荐计算用户之间或物品之间的相似度之后,我们可以根据相似度进行推荐。
协同过滤推荐方法的实现
一、基于用户的推荐系统实现
1、共同爱好-----英雄所爱略同
对一大群人进行搜索,并从中找出与我们品味相近的一小群人。
算法会对这些人所偏爱的其他内容进行考察,并将他们组合起来构造出一个经过排名的推荐列表。
比如:我们在当当网中输入“集体智慧编程”,点击此书链接后在页面下方会出现相关推荐列表,如图1所示:
图1:当当网对“集体智慧编程”相关的推荐结果
用户对电影评分数据二维表
用Python对上述数据的字典描述:
critics={'Lisa Rose':{'Lady in the Water':2.5,'Snakes on a Plane':3.5,'Just My
Luck':3.0,'Superman Returns':3.5,'You me and Dupree':2.5,'The Night Listener':3.0}, 'Gene Seymour':{'Lady in the Water':3.0,'Snakes on a Plane':3.5,'Just My Luck':1.5,'Superman Returns':5.0,'You me and Dupree':3.5,'The Night Listener':3.0}, 'Michael Phillips':{'Lady in the Water':2.5,'Snakes on a Plane':3.0,'Superman Returns':3.5,'The Night Listener':3.0},
'Claudia Puig':{'Sankes on a Plane':3.5,'Just My Luck':3.0,'The Night Listener':4.5,'Superman Returns':4.0},
'Mick LaSalle':{'Lady in the Water':3.0,'Snakes on a Plane':4.0,'Just My
Luck':2.0,'Superman Returns':3.0,'The Night Listener':3.0,'You,Me and Dupree':2.0},
'Jack Matthews':{'Lady in the Water':3.0,'Snakes on a Plane':4.0,'The Night Listener':3.0,'Superman Returns':5.0,'You,Me and Dupree':3.5},
'Toby':{'Snakes on a Plane':4.5,'You,Me and Dupree':1.0,'Superman
Returns':4.0}}
3、两人相似性如何评价?
常用的评价体系有:
(1)、Manhattan Distance——曼哈顿距离
a) 概念:最简单的距离计算方法就是曼哈顿距离,在二维图上,点A的坐标是(x1,y1),B的坐标是(x2,y2),那么A和B之间的曼哈顿距
离就是:r =|x1-x2| + |y1-y2|。
b) Python实现代码:
#曼哈顿距离评价
def sim_manhattan(prefs,person1,person2):
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1
if len(si)==0:return 0
sum_of_abs=sum([abs(prefs[person1][item]-prefs[person2][item]) for
item in si])
#此处做个技术处理,让相似度越高的值越大,同时防止分母为0
的情况出现,函数结果在:0~1之间。
return 1/(1+sum_of_abs)
c) 运行结果:
>>>sim_Manhattan(critics,'Toby','Gene Seymour')
结果为:0.18181818181818182
(2)、 Euclidean Distance——欧几里得距离
a) 概念:若n维向量A(x1,x2,…,x n)与B(y1,y2,…,y n),则A与
B之间的欧几里得距离为:
b) Python实现代码:
#欧基里德距离评价
def sim_ Euclidean(prefs,person1,person2):
#si存储共同评价过的电影名称
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1
if len(si)==0:return0
sum_of_squares=sum([pow(prefs[person1][item]-
prefs[person2][item],2) for item in si])
#偏好越相近的人距离越短,所以此处也做同样处理,取倒数,为避
免分母为零,可以将分母加1,函数结果在:0~1之间,1表示两人具
有一样的偏好。
return 1/(1+sqrt(sum_of_squares))
c) 运行结果:
>>> sim_Euclidean(critics,'Toby','Gene Seymour')
结果为:0.25824569976124334
(3)、Pearson——培生相关度评价
a) 概念:相对上两种评体系,Pearson相关系统要复杂得多,它是判断两组数据与某一直线拟合程序的一种度量。
这条直接绘制的原则是尽可能地靠近两组数据的所有点。
它能对不规范的数据起到一定的修正,降低不规范数据对结果的影响。
比如:有的影评人因抵制杜文泽而只给电影《澳门风云》1分的差评;有的评论者可能是甄子丹的铁杆粉丝而却给电影《西游记大闹天宫》10分的好评。
而前者在360影视网的得分为6.2分,后者仅为4.7分。
Pearson计算公式为:
上式难求,常常用近似公式代替:
b) Python实现代码:
#Pearson相关度评价
def sim_pearson(prefs,p1,p2):
si={}
for item in prefs[p1]:
if item in prefs[p2]:si[item]=1
n=len(si)
if n==0 :return 1
#对所有偏好求和
sum1=sum([prefs[p1][it] for it in si])
sum2=sum([prefs[p2][it] for it in si])
#求平方和
sum1Sq=sum([pow(prefs[p1][it],2) for it in si])
sum2Sq=sum([pow(prefs[p2][it],2) for it in si])
#求乘积之和
pSum=sum([prefs[p1][it]*prefs[p2][it] for it in si])
#计算peason评价值
num=pSum-sum1*sum2/n
den=sqrt(sum1Sq-pow(sum1,2)/n)*sqrt(sum2Sq-pow(sum2,2)/n) if den==0:return 0
r=num/den
#函数结果为:-1~1,1表示完全一致的评价。
return r
c) 运行结果:
>>> sim_pearson(critics,'Lisa Rose','Gene Seymour')
0.39605901719066977
未完待继...........图片发不上有些郁闷!。