协同过滤推荐算法与应用
- 格式:doc
- 大小:309.50 KB
- 文档页数:25
基于协同过滤算法的电影推荐系统设计与实现随着大数据时代的到来,电影推荐系统的设计和实现变得愈发重要。
用户在面对庞大电影库时,如何迅速找到自己感兴趣的电影成为了一项挑战。
基于协同过滤算法的电影推荐系统便是一种解决方案,它能够根据用户的兴趣和行为历史,向用户推荐最相关的电影。
一、协同过滤算法简介1.1 用户行为基础协同过滤算法的基础是用户行为数据,包括用户对电影的评分、点击、收藏等行为记录。
这些数据反映了用户的喜好和兴趣,是推荐系统的重要依据。
1.2 基于用户的协同过滤算法基于用户的协同过滤算法通过计算用户之间的相似性,找到与目标用户兴趣最相近的邻居用户,然后根据邻居用户的行为记录向目标用户进行推荐。
这种算法的优势是简单直观,容易理解和解释。
1.3 基于物品的协同过滤算法基于物品的协同过滤算法则是通过计算电影之间的相似性,找到与目标电影最相似的邻居电影,然后根据邻居电影的评分记录向目标用户进行推荐。
这种算法的优势是能够避免用户之间的数据稀疏问题,且计算复杂度相对较低。
二、电影推荐系统设计与实现2.1 数据获取与预处理构建一个有效的电影推荐系统首先需要收集和整理足够数量的电影数据,包括电影信息、用户评分等。
同时,需要对数据进行清洗和预处理,去除异常值和缺失值。
2.2 用户兴趣建模用户兴趣的建模是推荐系统的核心任务之一。
可以采用用户行为矩阵来表示,矩阵的行代表用户,列代表电影,矩阵的值代表用户对电影的评分或行为记录。
2.3 计算用户之间的相似度在基于用户的协同过滤算法中,计算用户之间的相似度是关键步骤。
常用的相似度度量方法有欧几里得距离、余弦相似度等。
根据相似度计算结果,可以找到与目标用户最相近的邻居用户。
2.4 计算电影之间的相似度基于物品的协同过滤算法中,计算电影之间的相似度同样是重要的一步。
可以采用基于内容的方法,通过计算电影的特征向量之间的相似度来衡量电影之间的相似性。
2.5 生成推荐列表根据用户之间的相似度或者电影之间的相似度,可以得到用户或者电影的近邻列表。
了解机器学习技术的协同过滤算法协同过滤算法是机器学习中广泛应用于推荐系统的一种方法。
它通过分析用户的历史行为数据和与其他用户的相似性来预测用户的兴趣,从而给用户推荐个性化的内容。
本文将详细介绍协同过滤算法的原理、应用和优缺点。
协同过滤算法的原理是基于用户行为数据的相似性进行预测。
它假设用户对物品的偏好与与其他用户的行为相似度有关。
例如,如果两个用户经常购买或浏览相似的物品,那么当一个用户对一个物品有兴趣时,另一个用户也可能对这个物品感兴趣。
协同过滤算法通过计算用户之间的相似性来预测用户的兴趣,并给出与用户历史行为相似的其他用户已经喜欢的物品。
协同过滤算法主要有两种类型:基于用户的协同过滤和基于物品的协同过滤。
基于用户的协同过滤算法首先计算用户之间的相似性,然后利用相似用户的喜好来预测用户对未知物品的喜好。
具体而言,对于一个目标用户,通过计算与其他用户对物品的共同喜好来度量它们的相似性。
然后,选取与目标用户最相似的一组用户,根据这些用户对未知物品的评分来推荐物品给目标用户。
基于物品的协同过滤算法则是首先计算物品之间的相似性,然后使用相似物品的评分来预测用户对未知物品的兴趣。
对于一个目标物品,通过分析用户的历史行为,计算与该物品的共同评分用户,进而计算物品之间的相似性。
然后,选取与目标物品最相似的一组物品,并根据这些物品的评分向用户推荐。
协同过滤算法在很多领域都有广泛应用。
最典型的应用就是推荐系统,例如电影推荐、音乐推荐和商品推荐。
通过分析用户的历史行为,协同过滤算法能够根据用户的个性化兴趣和喜好,向用户推荐相关的内容。
由于协同过滤算法可以自动学习用户的兴趣模型,并根据实时的行为数据进行更新,因此它能够持续提供准确个性化的推荐内容,提升用户的体验。
然而,协同过滤算法也存在一些缺点。
首先,当用户和物品的数量庞大时,计算用户之间或物品之间的相似性是一项计算量巨大的任务,可能导致推荐系统的响应时间较长。
其次,协同过滤算法对新用户和新物品的推荐效果不理想,因为它们缺乏足够的历史数据。
协同过滤算法简介协同过滤算法是一种常见的推荐算法,它的核心思想是基于用户的历史行为数据,找到具有相似行为模式的用户或物品,通过计算它们之间的相似度,进行推荐。
协同过滤算法不需要事先建立物品或者用户的特征向量,可以适用于不同领域的推荐问题。
1. 基于用户的协同过滤算法基于用户的协同过滤算法,也叫做用户-用户协同过滤算法,它的核心思想是寻找和目标用户相似的其他用户,将这些用户喜欢的物品推荐给目标用户。
这种算法的实现过程通常包括以下步骤:(1)找到和目标用户兴趣相似的其他用户。
(2)将这些用户喜欢的物品进行统计和分析,找到这些物品中目标用户还没有看过的物品。
(3)将这些物品推荐给目标用户。
基于用户的协同过滤算法有一个优点,就是它很容易实现。
但是,这种算法也有一些缺点。
首先,当用户数目非常大时,时间和空间复杂度可能会很高。
其次,由于用户的兴趣爱好可能非常多样化,因此很难找到和目标用户相似的其他用户。
2. 基于物品的协同过滤算法基于物品的协同过滤算法,也叫做物品-物品协同过滤算法,它的核心思想是寻找和目标物品相似的其他物品,并将这些物品推荐给目标用户。
这种算法的实现过程通常包括以下步骤:(1)找到和目标物品相似的其他物品。
(2)将这些物品推荐给目标用户。
基于物品的协同过滤算法的优点是它会同时考虑很多用户的行为数据,而不是仅仅只考虑一个用户的数据。
这种算法的缺点是它相比于基于用户的算法来说较为复杂,并且对于新物品的评估可能会非常困难。
3. 混合协同过滤算法混合协同过滤算法是基于用户的协同过滤算法和基于物品的协同过滤算法的结合。
这种算法的主要思想是将基于用户的协同过滤算法和基于物品的协同过滤算法的结果进行加权平均,从而得到更加准确的推荐结果。
混合协同过滤算法的优点是它能够同时考虑基于物品的协同过滤算法和基于用户的协同过滤算法的结果,从而得到更加准确的推荐结果。
但是,这种算法的缺点也很明显,它需要消耗更多的计算资源,并且需要更多的存储空间。
基于协同过滤算法的短视频推荐模型应用研究基于协同过滤算法的短视频推荐模型应用研究随着互联网的快速发展和智能手机的普及,短视频平台逐渐成为了人们日常生活中不可或缺的一部分。
而对于短视频平台来说,如何给每个用户精准推荐适合他们兴趣的视频,成为了一项关键技术。
协同过滤算法作为一种常用的推荐算法之一,具有较高的准确性和可扩展性,并被广泛应用于短视频推荐系统中。
协同过滤算法是基于用户行为数据的推荐算法,它通过分析用户与物品的关系,发现用户之间的相似性,从而推荐用户可能感兴趣的物品。
在短视频推荐系统中,协同过滤算法可以通过分析用户的观看历史、点赞、评论等行为,建立用户与视频之间的关联关系,并根据用户的相似度推荐适合他们观看的短视频。
首先,协同过滤算法需要从用户与视频的关系中发现用户之间的相似性。
在短视频平台中,用户观看历史记录是极为重要的因素。
通过分析用户观看了哪些视频以及观看时长,可以计算出不同用户之间的相似度。
相似的用户意味着他们在兴趣方面可能存在相似性,因此可以将一个用户喜欢的视频推荐给与他相似的用户。
其次,协同过滤算法可以根据用户的相似度来进行视频推荐。
对于每个用户,选择与他相似度较高的一组用户,然后获取这些用户喜欢的视频。
根据这些视频的特征,比如标签、分类等,可以建立一个与用户相关的视频池。
通过对用户进行个性化推荐,将相关视频推送给每个用户,提高用户的观看体验。
另外,在协同过滤算法中,还可以考虑用户的行为偏好。
比如用户的点赞、评论等行为可以反映用户对视频的喜好程度。
通过对用户行为数据的分析,可以找到每个用户的行为特点,从而更准确地推荐适合他们的视频。
此外,时效性也是短视频推荐的重要因素。
用户对新鲜有趣的视频更感兴趣,因此在协同过滤算法中可以引入时间因素,根据用户最近的兴趣变化来调整推荐的视频内容。
针对协同过滤算法在短视频推荐中的挑战,有几个可行的优化方法。
首先是解决冷启动问题,即对于新用户或者新上架的视频如何进行精准推荐。
在当今移动应用的世界中,协同过滤技术被广泛应用在推荐系统中,帮助用户发现他们感兴趣的内容。
协同过滤是一种基于用户行为和偏好的推荐算法,通过分析用户的历史行为数据,为用户推荐他们可能感兴趣的内容。
这种推荐算法已经在各种移动应用中得到了成功的应用,为用户提供了更加个性化和精准的推荐体验。
一、电商应用在电商应用中,协同过滤算法被广泛应用于商品推荐系统。
通过分析用户的购买历史、浏览记录以及其他行为数据,电商应用可以为用户推荐他们可能感兴趣的商品。
例如,当用户浏览一件商品时,系统可以通过协同过滤算法找到与该商品相似的其他商品,并将它们推荐给用户。
这种个性化推荐能够提高用户的购买率和满意度,帮助电商平台实现更好的销售业绩。
二、社交应用在社交应用中,协同过滤算法可以帮助用户发现他们可能感兴趣的朋友、话题和内容。
通过分析用户的好友关系、互动行为和兴趣标签,社交应用可以为用户推荐他们可能感兴趣的内容和用户。
例如,当用户关注某个话题或者用户时,系统可以通过协同过滤算法找到与之相关的其他话题或用户,并将它们推荐给用户。
这种个性化推荐能够提高用户的参与度和留存率,帮助社交应用实现更好的用户活跃度。
三、视频应用在视频应用中,协同过滤算法可以帮助用户发现他们可能感兴趣的视频内容。
通过分析用户的观看历史、点赞记录和分享行为,视频应用可以为用户推荐他们可能感兴趣的视频。
例如,当用户观看一段视频时,系统可以通过协同过滤算法找到与该视频相似的其他视频,并将它们推荐给用户。
这种个性化推荐能够提高用户的观看时长和满意度,帮助视频应用实现更好的用户粘性。
四、音乐应用在音乐应用中,协同过滤算法可以帮助用户发现他们可能感兴趣的音乐内容。
通过分析用户的收藏历史、播放记录和喜好标签,音乐应用可以为用户推荐他们可能感兴趣的音乐。
例如,当用户收藏一首歌曲时,系统可以通过协同过滤算法找到与该歌曲相似的其他歌曲,并将它们推荐给用户。
这种个性化推荐能够提高用户的收听时长和满意度,帮助音乐应用实现更好的用户忠诚度。
大数据中的协同过滤算法及其应用随着互联网的普及以及人工智能技术的发展,大数据已经成为当下的热门话题。
其中,协同过滤算法作为大数据技术的重要应用,也受到越来越多的关注。
本文将从协同过滤算法的基本原理、应用场景以及未来的发展方向三方面进行阐述。
一、协同过滤算法的基本原理协同过滤算法是一种基于用户行为的推荐算法,它的核心思想是通过分析用户的历史记录和喜好,为其推荐相似的物品或者其他用户所喜欢的物品。
这种算法的实现需要对用户数据进行收集和分析,通过计算用户之间的相似度,将相似度高的用户或物品进行匹配,从而实现推荐的功能。
具体来说,协同过滤算法可以分为两种类型:基于用户的协同过滤和基于物品的协同过滤。
基于用户的协同过滤是通过分析用户的历史记录和喜好,找到和该用户兴趣相似的其他用户,将这些用户所喜欢的物品推荐给该用户。
而基于物品的协同过滤则是通过分析物品之间的关系,找到和该物品相似的其他物品,将这些相似的物品推荐给用户。
二、协同过滤算法的应用场景协同过滤算法在各种领域中都有着广泛的应用。
其中,最典型的应用就是在电商平台中进行商品推荐。
例如,在淘宝或天猫等电商平台上,用户在进行购物时,平台可以通过分析用户的历史购买记录以及浏览记录,找到与其兴趣相似的其他用户或物品,将这些类似的商品推荐给用户,提高用户的购买率。
此外,协同过滤算法还可以应用在音乐、视频、新闻等领域中。
例如,在音乐推荐平台中,平台可以通过分析用户收听的音乐类型、歌手偏好等数据,找到和用户口味相近的其他用户,为其推荐同类音乐,提高用户满意度。
三、协同过滤算法的未来发展方向目前,协同过滤算法已经在各种领域中得到了广泛应用,但是同时也面临着一些挑战。
例如,协同过滤算法存在着数据稀疏性的问题,对于新用户或新物品的推荐效果可能不尽如人意。
此外,由于协同过滤算法主要依赖用户行为数据进行推荐,因此也面临着个人隐私保护等问题。
为了克服这些问题,未来协同过滤算法的发展方向主要有以下几个方面:首先,可以结合其他算法或者数据挖掘技术进行混合推荐。
推荐系统中的协同过滤算法原理及实现步骤协同过滤算法是一种常用于推荐系统的算法,通过利用用户行为数据和物品属性信息来预测用户对物品的偏好,并推荐给他们可能感兴趣的物品。
本文将介绍协同过滤算法的原理和实现步骤。
一、协同过滤算法原理协同过滤算法基于相似性原理来进行推荐,可以分为两种类型:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤基于用户的协同过滤算法计算用户之间的相似性,然后根据相似用户的行为来推荐物品。
其核心原理是:如果两个用户在过去的行为中有相似的偏好和兴趣,那么他们在未来的行为中可能也会有相似的偏好和兴趣。
2. 基于物品的协同过滤基于物品的协同过滤算法计算物品之间的相似性,然后根据用户对相似物品的偏好来推荐物品。
其核心原理是:如果一个用户对某个物品有兴趣,那么他可能对与该物品相似的其他物品也有兴趣。
二、协同过滤算法实现步骤协同过滤算法的实现步骤可以分为以下几个步骤:1. 数据预处理在实施协同过滤算法之前,需要对用户行为数据进行预处理。
预处理的目的是清洗数据、处理缺失值和离群值,以及将数据转换为适合算法处理的格式。
2. 计算用户相似度或物品相似度对于基于用户的协同过滤,需要计算用户之间的相似性;对于基于物品的协同过滤,需要计算物品之间的相似性。
相似性可以使用余弦相似度、皮尔逊相关系数等方法进行计算。
3. 预测评分通过用户相似度或物品相似度,预测用户对未评分物品的评分。
对于基于用户的协同过滤,可以根据相似用户的评分加权平均来进行预测;对于基于物品的协同过滤,可以根据用户对相似物品的评分加权平均来进行预测。
4. 推荐物品根据预测的评分,为用户推荐可能感兴趣的物品。
可以根据预测评分的降序排序,选取Top N的物品作为推荐结果。
5. 评估算法效果为了评估协同过滤算法的效果,可以使用常见的评测指标,如准确率、召回率、覆盖率等。
三、总结协同过滤算法是一种常用的推荐算法,可以根据用户行为数据和物品属性信息进行预测和推荐。
Java推荐系统使用协同过滤和推荐算法进行个性化推荐随着互联网的快速发展,推荐系统在我们的日常生活中扮演了越来越重要的角色。
推荐系统能够根据用户的兴趣和行为,为用户提供个性化的推荐信息,提高用户的满意度和使用体验。
而在Java编程领域,我们可以利用协同过滤和推荐算法来构建一个强大的个性化推荐系统。
一、协同过滤算法协同过滤算法是推荐系统中的一种常用算法。
它通过发现用户的兴趣相似度或者物品的相似度,给用户推荐与其兴趣相似的物品。
协同过滤算法有两种主要类型:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤基于用户的协同过滤算法主要通过对用户之间的兴趣相似度进行计算,来实现推荐。
算法的具体过程如下:- 首先,计算用户之间的兴趣相似度。
可以使用余弦相似度等算法来计算用户之间的相似度。
- 然后,根据用户之间的相似度,找到与目标用户兴趣相似度最高的用户集合。
- 最后,根据与目标用户兴趣相似度最高的用户集合的兴趣,给目标用户推荐未曾浏览过的物品。
2. 基于物品的协同过滤基于物品的协同过滤算法则是通过计算物品之间的相似度,从而进行推荐。
算法的具体过程如下:- 首先,计算物品之间的相似度。
可以使用欧氏距离、皮尔逊相关系数等算法来计算物品之间的相似度。
- 然后,对于目标用户,找到他已经浏览的物品。
- 最后,根据浏览的物品的相似度,给用户推荐相似度高的其他物品。
二、推荐算法除了协同过滤算法,推荐系统还可以使用其他的推荐算法。
常见的推荐算法包括内容过滤、矩阵分解、深度学习等。
1. 内容过滤内容过滤算法主要通过分析用户的历史行为和物品的特征,来实现推荐。
它可以根据用户的兴趣爱好,给用户推荐相似的物品。
内容过滤算法的优点是不需要考虑用户之间的相似度,因此计算速度较快。
2. 矩阵分解矩阵分解算法是一种基于数学模型的推荐算法。
它通过分解用户-物品评分矩阵,得到用户和物品的低维度表示,从而进行推荐。
矩阵分解算法的优点是能够处理数据稀疏的情况,并且可以得到潜在的用户兴趣和物品特征。
协同过滤算法范文协同过滤算法是一种基于用户行为和兴趣相似性的推荐算法。
它通过分析大量用户行为数据和物品属性,将用户与他人的行为和喜好进行比较,来实现个性化推荐,提高用户满意度和购买率。
下面将详细介绍协同过滤算法的原理、分类和应用。
一、协同过滤算法原理具体而言,协同过滤算法可以分为两种类型:基于用户的协同过滤和基于物品的协同过滤。
1. 基于用户的协同过滤(User-Based Collaborative Filtering)基于用户的协同过滤算法是根据用户之间的行为相似性进行推荐。
算法的步骤包括:1)计算用户之间的相似度,常用的相似度度量方法有皮尔逊相关系数和余弦相似度。
2)根据用户相似度和其他用户的行为数据,预测目标用户对尚未产生行为的物品的评分或喜好程度。
3)将预测出的评分或喜好程度进行排序,为目标用户生成推荐列表。
2. 基于物品的协同过滤(Item-Based Collaborative Filtering)基于物品的协同过滤算法是根据物品之间的关联性进行推荐。
算法的步骤包括:1)计算物品之间的相似度,常用的相似度度量方法有余弦相似度和Jaccard相似度。
2)根据用户的历史行为和物品相似度,预测用户对尚未产生行为的物品的评分或喜好程度。
3)将预测出的评分或喜好程度进行排序,为目标用户生成推荐列表。
二、协同过滤算法分类除了基于用户和物品的协同过滤算法,还有一些其他的协同过滤算法,如基于模型的协同过滤、混合协同过滤等。
1. 基于模型的协同过滤(Model-Based Collaborative Filtering)基于模型的协同过滤算法是通过建立数学模型来预测用户对物品的评分或喜好程度。
常用的模型包括矩阵分解模型和概率图模型。
-矩阵分解模型:将用户-物品的评分矩阵分解为用户-因子矩阵和因子-物品矩阵,通过计算两个矩阵的乘积来预测用户对尚未产生行为的物品的评分。
-概率图模型:利用概率图模型来描述用户行为和物品属性之间的关系,通过概率推理来预测用户对物品的喜好程度。
机器学习算法day03_协同过滤推荐算法及应用课程大纲课程目标:1、理解协同过滤算法的核心思想2、理解协同过滤算法的代码实现3、掌握协同过滤算法的应用步骤:数据处理、建模、运算和结果判定4、1. CF协同过滤推荐算法原理1.1 概述什么是协同过滤(Collaborative Filtering, 简称CF)?首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。
这就是协同过滤的核心思想。
协同过滤算法又分为基于用户的协同过滤算法和基于物品的协同过滤算法1.2 案例需求如下数据是各用户对各文档的偏好:现在需要基于上述数据,给A用户推荐一篇文档1.3 算法分析1.3.1 基于用户相似度的分析直觉分析:“用户A/B”都喜欢物品A和物品B,从而“用户A/B”的口味最为相近因此,为“用户A”推荐物品时可参考“用户B”的偏好,从而推荐D这种就是基于用户的协同过滤算法UserCF指导思想1.3.2 基于物品相似度的分析直觉分析:物品组合(A,D)被同时偏好出现的次数最多,因而可以认为A/D两件物品的相似度最高,从而,可以为选择了A物品的用户推荐D物品这种就是基于物品的协同过滤算法ItemCF指导思想1.4 算法要点1.4.1、指导思想这种过滤算法的有效性基础在于:1、用户偏好具有相似性,即用户可分类。
这种分类的特征越明显,推荐准确率越高2、物品之间具有相似性,即偏好某物品的人,都很可能也同时偏好另一件相似物品1.4.2、两种CF算法适用的场景什么情况下使用哪种算法推荐效果会更好?不同环境下这两种理论的有效性也不同,应用时需做相应调整。
a.如豆瓣上的文艺作品,用户对其的偏好程度与用户自身的品位关联性较强;适合UserCFb.而对于电子商务网站来说,商品之间的内在联系对用户的购买行为影响更为显著。
1.5 算法实现总的来说,要实现协同过滤,需要一下几个步骤:1.收集用户偏好2.找到相似的用户或物品3.计算推荐1.5.1 收集用户偏好用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍:1.5.2 原始偏好数据的预处理❖用户行为识别/组合在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,比如,可以将用户行为分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户/ 物品相似度。
类似于当当网或者京东给出的“购买了该图书的人还购买了...”,“查看了图书的人还查看了...”❖喜好程度加权根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。
一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。
❖数据减噪和归一化。
①减噪:用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,我们可以通过经典的数据挖掘算法过滤掉行为数据中的噪音,这样可以是我们的分析更加精确。
②归一化:如前面讲到的,在计算用户对物品的喜好程度时,可能需要对不同的行为数据进行加权。
但可以想象,不同行为的数据取值可能相差很大,比如,用户的查看数据必然比购买数据大的多,如何将各个行为的数据统一在一个相同的取值范围中,从而使得加权求和得到的总体喜好更加精确,就需要我们进行归一化处理。
最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在[0,1] 范围中。
❖形成用户偏好矩阵一般是二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是[0,1] 或者[-1, 1] 的浮点数值。
1.5.3 找到相似用户或物品当已经对用户行为进行分析得到用户喜好后,我们可以根据用户喜好计算相似用户和物品,然后基于相似用户或者物品进行推荐,这就是最典型的CF 的两个分支:基于用户的CF 和基于物品的CF。
这两种方法都需要计算相似度,下面我们先看看最基本的几种计算相似度的方法。
1.5.4 相似度的计算相似度的计算,现有的几种基本方法都是基于向量(Vector)的,其实也就是计算两个向量的距离,距离越近相似度越大。
在推荐的场景中,在用户- 物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度。
CF的常用方法有三种,分别是欧式距离法、皮尔逊相关系数法、余弦相似度法。
为了测试算法,给出以下简单的用好偏好数据矩阵:行表示三名用户,列表示三个品牌,对品牌的喜爱度按照1~5增加。
(1)欧氏距离法就是计算每两个点的距离,比如Nike和Sony的相似度。
数值越小,表示相似度越高。
(2)皮尔逊相关系数两个变量之间的相关系数越高,从一个变量去预测另一个变量的精确度就越高,这是因为相关系数越高,就意味着这两个变量的共变部分越多,所以从其中一个变量的变化就可越多地获知另一个变量的变化。
如果两个变量之间的相关系数为1或-1,那么你完全可由变量X去获知变量Y的值。
·当相关系数为0时,X和Y两变量无关系。
·当X的值增大,Y也增大,正相关关系,相关系数在0.00与1.00之间·当X的值减小,Y也减小,正相关关系,相关系数在0.00与1.00之间·当X的值增大,Y减小,负相关关系,相关系数在-1.00与0.00之间当X的值减小,Y增大,负相关关系,相关系数在-1.00与0.00之间相关系数的绝对值越大,相关性越强,相关系数越接近于1和-1,相关度越强,相关系数越接近于0,相关度越弱。
在python中用函数corrcoef实现,具体方法见参考资料(3)余弦相似度通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。
0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。
从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。
两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。
在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。
余弦相似度通常用于两个向量的夹角小于90°之内,因此余弦相似度的值为0到1之间。
def cosSim(inA,inB):num = float(inA.T*inB)denom = la.norm(inA)*la.norm(inB)return 0.5+0.5*(num/denom)注:本课程的实战案例基于皮尔逊相关系数法实现1.5.3 计算推荐UserCF基于用户相似度的推荐计算推荐的过程其实就是KNN算法的计算过程ItemCF基于物品相似度的推荐算法思路1. 构建物品的同现矩阵2. 构建用户对物品的评分矩阵3. 通过矩阵计算得出推荐结果推荐结果=用户评分矩阵*同现矩阵实质:计算各种物品组合的出现次数2. CF协同过滤算法Python实战2.1 电影推荐需求根据一个用户对电影评分的数据集来实现基于用户相似度的协同过滤算法推荐,相似度的算法采用皮尔逊相关系数法数据样例如下:用户ID:电影ID:评分:时间2.2 算法实现本案例使用的数据分析包为pandas,Numpy和matplotlib2.2.1 数据规整首先将评分数据从ratings.dat中读出到一个DataFrame 里:>>> import pandas as pd>>> from pandas import Series,DataFrame>>> rnames = ['user_id','movie_id','rating','timestamp']>>> ratings = pd.read_table(r'ratings.dat',sep='::',header=None,names=rnames)>>> ratings[:3]user_id movie_id rating timestamp0 1 1193 5 9783007601 1 661 3 9783021092 1 9143 978301968[3 rows x 4 columns]ratings 表中对我们有用的仅是user_id、movie_id 和rating 这三列,因此我们将这三列取出,放到一个以user 为行,movie 为列,rating 为值的表data 里面。
>>> data = ratings.pivot(index='user_id',columns='movie_id',values='rating') #形成一个透视表>>> data[:5]可以看到这个表相当得稀疏,填充率大约只有5%,接下来要实现推荐的第一步是计算user 之间的相关系数2.2.2 相关度测算DataFrame对象有一个很亲切的方法:.corr(method='pearson', min_periods=1) 方法,可以对所有列互相计算相关系数。
其中:method默认为皮尔逊相关系数,min_periods参数,这个参数的作用是设定计算相关系数时的最小样本量,低于此值的一对列将不进行运算。
这个值的取舍关系到相关系数计算的准确性,因此有必要先来确定一下这个参数。
2.2.3 min_periods 参数测定测定这样一个参数的基本方法:❖统计在min_periods 取不同值时,相关系数的标准差大小,越小越好;但同时又要考虑到,我们的样本空间十分稀疏,min_periods 定得太高会导致出来的结果集太小,所以只能选定一个折中的值。
这里我们测定评分系统标准差的方法为:❖在data中挑选一对重叠评分最多的用户,用他们之间的相关系数的标准差去对整体标准差做点估计。
在此前提下对这一对用户在不同样本量下的相关系数进行统计,观察其标准差变化。
首先,要找出重叠评分最多的一对用户。
我们新建一个以user 为行列的方阵foo,然后挨个填充不同用户间重叠评分的个数:这段代码特别费时间,因为最后一行语句要执行4000*4000 = 1600万遍;找到的最大值所对应的行列分别为424 和4169,这两位用户之间的重叠评分数为998:把424 和4169 的评分数据单独拿出来,放到一个名为test 的表里,另外计算了一下这两个用户之间的相关系数为0.456,还算不错,另外通过柱状图了解一下他俩的评分分布情况:>>> data.ix[4169].corr(data.ix[424])0.45663851303413217>>> test = data.reindex([424,4169],columns=data.ix[4169][data.ix[424].notnull()].dropna().index) >>> testmovie_id 2 6 10 11 12 17 ...424 4 4 4 4 1 5 ...4169 3 4 4 4 2 5 ...>>> test.ix[424].value_counts(sort=False).plot(kind='bar')>>> test.ix[4169].value_counts(sort=False).plot(kind='bar')对这俩用户的相关系数统计,我们分别随机抽取20、50、100、200、500 和998 个样本值,各抽20 次。