matlab 协同过滤算法,基于物品的协同过滤算法

之前的一篇博文里介绍的是基于用户的协同过滤算法http://blog.sina.com.cn/s/blog_dac9ee630102vhmh.html 但是该算法随着用户数目增多的情况下计算用户兴趣相似性矩阵将越来越困难,其运算复杂度空间复杂度的增长和用户的增长接近于平方的关系。所以就出现了基于物品的协同过滤算法(ItemCF:

item-based collaborative filteing).

但是ItemCF算法并不利用物品的内容属性计算物品的相似性,主要通过分析用户的行为计算物品的相似性。

基于物品的协同过滤算法主要分为以下两步

1. 计算物品之间的相似性

2. 根据物品的相似性和用户的历史行为给用户生成推荐列表。

计算物品相似性可以用以下公式计算:

a4c26d1e5885305701be709a3d33442f.png

N(i): 喜欢物品 i 的用户数,分子是同时喜欢物品 i 和物品 j 的用户数。可以理解为喜欢物品 i

的用户中有多少比例的用户也喜欢物品 j.

也可以利用下面的公式计算:

a4c26d1e5885305701be709a3d33442f.png

在得到物品之间的相似度后,ItemCF通过如下公式计算用户 u 对一个物品 j 的兴趣:

a4c26d1e5885305701be709a3d33442f.png

N(u) 用户喜欢的物品的集合,S(j,k)是和物品 j 最相似的 K个物品的集合,w(ji) 是物品 j 和 i 的相似度,

r(ui)是用户 u 对物品 i 的兴趣,用户 u 对物品 i 有过行为则 r(ui)=1,反之 r(ui)=0。

但是利用上式计算物品相似性存在一个问题就是用户活跃度高的用户和低的用户对物品的相似度的贡献应不应该一样??John

S.Breese提出 IUF(Inverse User

Frequence),即用户活跃度对数的参数,认为活跃用户对物品相似性的贡献应小于不活跃的用户,以此来修正物品相似度:

a4c26d1e5885305701be709a3d33442f.png

这个公式只对活跃用户做个一个惩罚,但是实际情况中存在很多过于活跃的用户,将直接忽略物品相似性的计算。

再之,在研究中表明将 ItemCF 的相似性矩阵将按最大值进行归一化,可以提高推荐的准确率。

a4c26d1e5885305701be709a3d33442f.png

你可能感兴趣的:(matlab,协同过滤算法)