欢迎大家来到IT世界,在知识的湖畔探索吧!
这篇文章主要介绍一种协同过滤的推荐的算法,主要的内容包括:
1、相似度的计算
2、基于用户的协同过滤
3、基于项目的协同过滤
4、基于内容的过滤算法
5、混合推荐系统
推荐系统在现在的生活中随处可见,淘宝天猫的商品推荐,音乐软件的每日歌曲推荐等,协同过滤就是一种很受欢迎的推荐算法。
协同过滤(collaborative filtering):利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。比如说,你和另外一个人都喜欢看电影,而你们所喜欢的电影类型都差不多,那个人对于某一部电影的评价很高,而这部电影你没有看过。那么,我是不是就能将这部电影推荐给你呢?基于协同过滤的推荐,有基于用户和基于物品。
一、相似度的计算
如何来衡量两个用户是否有相同的兴趣爱好呢?通过计算两个用户的相似度来衡量。相似度的计算有很多的算法,常用的相似度计算有基于欧式距离的相似度计算、基于皮尔逊相关系数的相似度计算、基于余弦相似度的相似度计算。
下面使用一个用户对于电影的评价数据,基于不同的相似度计算,来计算用户的相似度。三个不同的用户对5部电影的评分,最高分是5分。
1、欧式距离相似度计算
下标表示电影的序号,上标表示的是用户序号,需要让欧氏距离相似度在0到1范围内,通过下面的公式来使得欧式距离的相似度在0到1之间
当欧式距离为0的时候,相似度为1,当欧氏距离趋于无穷大的时候,相似度趋于0。
在使用欧氏距离计算相似度的时候,当用户都评分都为0的时候,相似度为1。为避免这个问题的发生,可以通过只有当用户对相同的产品进行过评分的时候,才计算相似度。
2、皮尔逊相关系数相似度
皮尔逊相似度相对于欧式距离来说,它对于用户的量级不敏感。比如两个用户,一个用户通常都喜欢评价5星,而另一个用户喜欢评价1星,皮尔逊相关系数会认为这两个向量是相等的。皮尔逊相关系数的取值范围为-1到1,可以通过numpy的corrcoef函数来获取皮尔逊相关系数,通过0.5+0.5*corrcoef()将相似度的范围变换到0到1之间。corrcoef获取的是一个2*2的矩阵,包括自己和自己的相关系数和自己与另一个数组的相关系数。
3、余弦相似度
余弦相似度是计算两个向量之间的夹角,如果夹角为90度,则相似度为0.如果夹角为0度,也就是两个向量的方向相同,则相似度为1。余弦相似度的取值范围也在-1到1之间,可以通过上面的方式,将范围变换到0到1之间。
下面利用sklearn来计算余弦相似度
通过表格中的数据可以发现,虽然U1和U3对相同产品的评价不同,却会有很高的相似度。因为,我们对于用户没有进行评分的产品使用了0进行填充,而0在余弦相似度中表现了一致性,所以导致了这个问题的发生。下面,我们使用用户评分减去用户评分的平均分(平均分的计算以评分的平均分,不包括0),使得用户评分的平均分为0,再来计算余弦相似度。
通过将评分中心化之后,发现U1与U2的相似度有所增加,而U1与U3的相似度有所下降,这也正是我们所希望的。
二、基于用户的协同过滤
假设有三个用户X、Y、Z它们对一些产品进行过评分,如下
通过X与Y和Z之间的相似度,以及Y和Z对于P7的评分来计算X对于P7的评分,相似度的计算采用中心化的余弦相似度。通过计算每位用户与X之间的相似度,对每位用户的评分进行加权,然后除以中的相似度。
三、基于项目的协同过滤
上面是5个用户对于5首音乐的评价,每一行表示不同用户对于同一首音乐的评分。通过用户对歌曲的评分来寻找类似的歌曲,而不是寻找类似的用户。计算U3对于M5的评分,相似度计算采用中心的余弦相似度,先计算M5与其他音乐之间的相似度,然后设置k=2,即选择与M5相似度最高的两首音乐来计算U3对M5的评分
四、基于内容的过滤
基于内容的过滤的推荐算法并不属于协同过滤,基于内容过滤的推荐算法也被经常使用在推荐系统中。比如说,在一个音乐软件的推荐系统中,需要先统计每一首音乐的特征(歌手、节奏、年代、时长、语言等),然后通过这些音乐的特征基于用户以前喜欢的音乐进行推荐。
基于内容过滤推荐的优点是,它不需要大量的用户,可以用户解决协同过滤推荐系统的冷启动问题。协同过滤推荐算法,需要大量的用户,当用户数量不足的时候,可以使用基于内容的推荐。基于内容推荐的缺点就是,它不会令用户有一种惊奇的感觉,缺乏意外的惊喜。因为,它推荐的东西基本上都与用户喜欢的产品相类似。
五、混合推荐系统
在实际的生产开发中,通常都是几种,甚至更多的推荐算法一起使用,这就是混合推荐系统。使用混合推荐系统的原因是,它可以消除某一种单一推荐算法的缺点。通过多种推荐算法构成的系统,推荐系统会更加强大。
协同过滤
优点:不需要手动创建特征。
缺点:需要大量的用户或项目,否则不能正常工作。当数据过大的时候,会产生的稀疏矩阵(矩阵中的很多项为0)。
内容的推荐
优点:不需要大量用户。
缺点:需要创建特征,特征的定义是一个问题,缺乏惊喜。
下篇文章介绍,如何通过SVD来提高推荐效果。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/32926.html