协同过滤是一种被广泛运用于电子商务系统中的算法。协同过滤正成为信息过滤和信息系统中很受欢迎的一项技术。具体的大家可以百度或者google,这里不细说。
这里我们以另一种方式探讨,基于上一篇文章《从酷狗的网络红歌说起》 ,研究基于用户的协同过滤算法下人们对于歌曲的选择和喜好。
(一)用户之间的相识度计算
利用集合的基本知识我们可以知道,用户之间收藏或者喜爱的歌曲中相同歌曲越多,用户之间越相似。于是我们有最简单的计算相似度的方法:
上面公式中我们定义用户u1和用户u2之间的相似度计算公式sim为用户u1收藏的歌曲集合Uc1和用户u2收藏的歌曲集合Uc2之间的交集比并集。
例如:
上图片中我们假设是两个用户收藏的歌曲集合,不然发现这两个用户之间的相识度为sim(u1,u2)= 3/12 = 0.25
(二) 阙值定义及相似用户列表的产生
所有的用户之间都会有一个相似度sim值,那么我们相似度的值达到了多少,我们认为这两个用户可能有共同的喜好呢?这需要具体的实验数据和专家的分析,往往我们用threadhold 来表示这个值。
每两个用户之间的sim值大于threadhold,我们认为这两个用户相似。这样传统的基于用户的协同过滤算法将会产生一个用户及其相似用户表:
(三)社区发现与UCF的关系
用户相似列表的产生,必然需要比较每两个用户之间的相似度。
假设我们存在一个大的用户群体,这个用户群体可以是酷狗的所有用户集合。这样的情况下,我们将计算得到每两个用户之间的相似度。同时经过第一步的处理,我们可以去除相似度不满足threadhold的值。在这之后,我们可以获得一系列有价值的sim值和用户值对。
同时社区发现指在发现网络中的社区结构,其和图论有着密切的联系。通过上段中获得的一系列有价值的sim值和用户值对,我们可以将其转化为一张图,图的节点为每一个用户,相似度大于threadhold的用户之间有一条边,边的权重为sim值。
转换图如下(相似用户列表转化为相似列表图):
上诉图片中,通过社区发现的方法,我们可以很清晰的发现两个社区,每一个长方形就是一个用户社区。
很多人可能想问,社区发现和UCF有什么关系呢?为什么要转换成相似列表图?这个看每个人的思考点了,目前作者本人正在研究中,以后有机会可以详细谈谈。
(四)通过聚类优化基于用户的协同过滤算法
社区发现其实本质上是一个聚类的算法。而往往基于用户的协同过滤算法都需要计算两两之间的相似度,这对于用户量庞大的系统而言无法是一个灾难。
那么我们有什么办法对传统的UCF进行改进了,一种常见的思路就是通过聚类聚集出用户群体。
相似列表图普通化(这里我们舍弃相似列表图的边):
通过某种方法,我们可以对原始用户数据进行聚类,这样我们依旧可以获得如上图所示的数据形式。不过,我们可能将拥有一个特征来表示某个具体的类,一个具体的类就是一个用户群体。
比如通过k-means方法,我们将获得每个聚类的聚类中心。通过聚类中心来代表每个具体的类。
这样我们实现了从6个用户到2个用户群体的转换。为以后的运算带来了诸多便利。
(五) 离线聚类与在线分析
通过上面(四)的介绍,实际上我们的聚类应该是基于用户数据的离线处理过程,这样我们得到不同的聚类核心。而当一个用户登录时,我们可以在线对比该用户和每个聚类核心的距离,通过权重的分配和每个聚类的Top-N用户选择,给予该在线用户最好的推荐。
(六)说明
本次博客涉及内容较多,比如k-means,社区发现,UCF,图论等。同时也略去了诸多特征选择和预处理的内容。同时限于本文作者的水平,疏忽在所难免,如果发现错误或者有疑问,欢迎探讨。
email:939899727@qq.com