协同过滤是目前推荐系统中应用最广泛的技术(基于item与基于用户两种)。它一般采用最近邻技术,利用用户的历史喜好信息计算用户之间的距离,然后 利用目标用户的最近邻居用户对商品评价的加权评价值来预测目标用户对特定商品的喜好程度,系统从而根据这一喜好程度来对目标用户进行推荐。协同过滤最大优 点是对推荐对象没有特殊的要求,能处理非结构化的复杂对象,如音乐、电影。
和基于内容的过滤方法相比,协同过滤具有如下的优点:
- 1) 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。
- 2) 共享其他人的经验,避免了内容分析的不完全和不精确,并且能够基于一些复杂的,难以表述的概念(如信息质量、个人品味)进行过滤。
- 3) 有推荐新信息的能力。可以发现内容上完全不相似的信息,用户对推荐信息的内容事先是预料不到的。这也是协同过滤和基于内容的过滤一个较大的差别,基于内容的过滤推荐很多都是用户本来就熟悉的内容,而协同过滤可以发现用户潜在的但自己尚未发现的兴趣偏好。
- 4) 能够有效的使用其他相似用户的反馈信息,较少用户的反馈量,加快个性化学习的速度。
虽然协同过滤作为一种典型的推荐技术有其相当的应用,但协同过滤仍有许多的问题需要解决。最典型的问题有稀疏问题(Sparsity)和可扩展问题(Scalability)
协同过滤通常有以下几个步骤:
协同过滤的核心
1.收集用户偏好(与基于内容的推荐很类似)
2.找到相似的用户或者物品
3.计算并推荐
用户偏好(推荐的基础):
从用户的行为和偏好中发现规律,并基于此进行推荐,所以如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多种方式向系统提供自己的偏好信息,比如:评分,投票,转发,保存书签,购买,点
击流,页面停留时间等等。
以上的用户行为都是通用的,在实际推荐引擎设计中可以自己多添加一些特定的用户行为,并用它们表示用户
对物品的喜好程度。通常情况下,在一个推荐系统中,用户行为都会多于一种,那么如何组合这些不同的用户
行为呢 ?基本上有如下两种方式:
(1)将不同的行为分组
一般可以分为查看和购买,然后基于不同的用户行为,计算不同用户或者物品的相似度。类似与当当网或者
亚马逊给出的“购买了该书的人还购买了”,“查看了该书的人还查看了”等等。
(2)不同行为产生的用户喜好对它们进行加权
对不同行为产生的用户喜好进行加权,然后求出用户对物品的总体喜好
好了,当我们收集好用户的行为数据后,还要对数据进行预处理,最核心的工作就是减噪和归一化。
减噪: 因为用户数据在使用过程中可能存在大量噪音和误操作,所以需要过滤掉这些噪音。
归一化:不同行为数据的取值相差可能很好,例如用户的查看数据肯定比购买数据大得多。通过归一化,才能
使数据更加准确。
通过上述步骤的处理,就得到了一张二维表,其中一维是用户列表,另一维是商品列表,值是用户对商品的喜好。还是以电影推荐为例,如下表(喜好向量)
然后通过表中数据计算相似度,计算相似度分为两种:基于用户与基于物品。
相似度计算通常具有以下几个标准:欧几里得距离、皮尔逊系数、余弦夹角。而如果采用欧几里得距离,公式如下:
在计算用户之间的相似度时,是将一个用户对所有物品的偏好作为一个向量,而在计算物品之间的相似度时,
是将所有用户对某个物品的偏好作为一个向量。求出相似度后,接下来可以求相似邻居了。
(1)基于用户的推荐:通过计算出用户A与其他用户之间的相似度(余弦角、皮尔逊系数、欧几里得距离等)然后得出最接近的作为邻居,然后根据用户的相似度权重以及他们对物品的偏好,找出当前用户没有的物品,计算出一个排序的推荐列表进行推荐;
(2)基于物品的推荐:
算出物品A与物品C很相似,用户C喜欢物品A,那么也有可能喜欢物品C,给他推荐。
需要注意的是,当某一种物品是购买频率比较高的生活必需品之类的东西时,他的喜好程度必须加入惩罚因子,例如物品B是(类似于卫生纸),那么加入惩罚因子μ,以减小计算过程中他的权重。
基于物品与基于用户的推荐可以用到不同的场景,例如电商网站、生活周边APP等,用户量远远大于商品品类,基于用户推荐的话会产生很大的计算量,且通常由于用户流失,新用户注册等用户群体会产生比较大的变动,所以用基于物品的推荐,计算量小。
但是对于新闻网站、博客推荐物品更新比较频繁的就不能了得基于物品推荐。
本篇博客基于自己的理解以及以下这篇博客,在此进行说明:
https://blog.csdn.net/acdreamers/article/details/44672305