基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群。基于邻居的历史偏好信息,为当前用户进行推荐。
即:归类相似用户ABC,推荐用户BC的物品给用户A
优点:可以间接发现相似用户的潜在兴趣
缺点:推送的物品关联性弱
基于项目的协同过滤推荐的基本原理是,使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
即:归类相似物品ABC,推荐物品BC给购买了物品A的用户
优点:物品间的关联性强
缺点:只在一定范围内推送物品,有一定的局限性
基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。
优点:1它不需要对物品或者用户进行严格的建模。2推荐是开放的,可以共用他人的经验
缺点:1用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。2方法更新迭代慢。
将不同的行为进行分组:
用户行为:查看、推荐、购买、借还、收藏等
物品行为:被查看、被推荐、被购买等
然后基于不同的行为,计算不同的用户 / 物品相似度。类似于
“查看了这本图书的人还查看了A …”
“没有搜到此书,但为您推荐类似图书B”
“和你同一专业的人都在看这些书”
加权操作:
根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。
收集了用户行为数据之后需要对数据进行预处理,主要就是 减噪 和 归一化。
减噪 :
用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,可以通过一些算法过滤掉行为数据中的噪音。
归一化:
将各个行为的数据统一在一个相同的取值范围中。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。
进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权处理,之后可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1]或者[-1, 1]的浮点数值。
最后形成如下的 用户偏好表 或者 物品偏好表
用户偏好表 | 物品1 | 物品2 | 物品3 | 物品4 | 物品5 |
---|---|---|---|---|---|
用户1 | 0.5 | 0.8 | 0.1 | 0.3 | - |
用户2 | 0.8 | - | 0.2 | - | 0.2 |
用户3 | - | 0.2 | 0.8 | 1 | 0.8 |
物品偏好表 | 用户1 | 用户2 | 用户3 | 用户4 | 用户5 |
---|---|---|---|---|---|
物品1 | 0.1 | 0.8 | 0.1 | 0.7 | - |
物品2 | 0.2 | 1 | - | - | 0.2 |
物品3 | - | 0.2 | 0.9 | 1 | 0.3 |
采用余弦相似度算法比较相似性(余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上)。
计算形成如下相似度表
用户相似度权值表 | 用户A | 用户B | 用户C |
---|---|---|---|
用户A | 1 | 0.3 | 0.4 |
用户B | 0.8 | 1 | 0.2 |
用户C | - | 0.9 | 1 |
物品相似度权值表 | 物品A | 物品B | 物品C |
---|---|---|---|
物品A | 1 | 0.5 | 0.9 |
物品B | 0.8 | 1 | - |
物品C | 0.1 | 0.2 | 1 |
相似度权值归一化在[0,-1]或者[-1,1]之间
偏好矩阵 × 相似度矩阵 = 推荐列表
根据上面的相似度表查询出相似用户或相似物品 结合不同场景进行推荐