学习笔记: 为什么基于项目的协同过滤是稳定的.
以前看协同过滤, 一直不明白为什么说基于项目的协同过滤的稳定的,
而基于用户的协同过滤是线性增长的.
其实这也应该是基于一种假设, 就是项目的增长是稳定的, 而不是呈某种爆发性的增长.
同样, 也应该基于另外一种假设, 即, 在一个稀疏性合理的数据集里, 相当数目的用户所产生的这种相关性是稳定的,
不会因为新加入的几个用户的口味而产生质的影响.
在这种情况下, 项目间的相似度是可以进行”缓存”的,
而对于新用户产生的影响因子可以积累到一定影响度后再进行计算,
避免了大量的零碎计算, 而实际产生的因子尾数还不足以影响整个当前的因子.
如下公式即为基于项目的协同过滤的修正余弦相关性算子:
(U是用户集, ru,j表示用户u对j的评分, ru表示用户的平均评分.)
每个Σ值, 均值, 和必要的n值均是可以保存的, 以避免每次进行新项目的相关性计算时, 大量不必要的重复劳动,
同时对于已有项, 已缓存的暂态值也可以保证我们只需要计算新用户的因子, 再和暂态值加总, 即可得到新因子.
但是对于基于用户的协同过滤显然不是如此,
在用户即使是平缓增长(这个可以定义为一个比例化的指标), 在相当可观的用户基数下,
每一次最小邻居集的计算, 都得计算一次每一位新用户和当前用户的喜好交集, 相关因子.
伴随着项目的同步增长, 这个计算是可观的.
当然, 不得不说我对这块领域还只是管中窥豹般的门外汉,
上面有说的不对的地方, 希望各位大牛多指正,
写在这里权当自己的学习笔记.
No Comments Yet