总论
协同过滤是目前最经典的推荐算法。
分而理之,协同,指通过在线数据找到用户可能喜欢的物品;过滤,滤掉一些不值得推荐的数据。
协同过滤推荐分为三种类型。第一种是基于用户(user-based)的协同过滤,第二种是基于项目(item-based)的协同过滤,第三种是基于模型(model based)的协同过滤。
我认为,选择哪种类型,取决于业务场景。需要考虑的是,user和item的数量比,谁的数量级小就选择哪个模式的cf;在业务处于的场景中,user和item的多变性比较,选择多变性较小的一方,在后续的维护,会方便很多;最后一点,明确你的推荐覆盖要求。
今天主要讲基于用户。
凡是推荐算法离不开大数据的基础,基于用户类型的数据一般是如下格式:
用户id,外物id,用户对外物的评分,以上是一般物联网的算法模型,(举一反三,分析系统日志,建立如下模型,用户id,资源id,用户对资源的访问次数,--->实现推荐页面 )
算法基础实现
看这块的时候,我是真的后悔大学没好好学数学!!!
首先让我们拆分下过程。 基于用户的协同过滤 可分为2步,
1.找到相似度高的用户
2.根据1步骤获取的信息,推荐源用户相对喜欢,并且未采取过的行为
下面这个是大名鼎鼎的Jaccard公式,很简单, 取2个用户的选择集的交集,跟2个用户的选择集的并集,进行计算。但很显然,若要计算整个用户集合,
时间复杂度是O(n^2),太慢了。
后续就有了利用倒排查表进行优化如下: 可以建立个