天天看点

推荐算法基础

推荐系统核心要解决的问题是提高转化率,也就是经过分析,要猜测某一个用户更喜欢什么。

1. 最简单的方法来做推荐

  • 贝叶斯分类:通过统计用户所有购买的物品的分布特性,统计该用户购买物品的分布情况。
  • 利用搜索记录:比如广告位的JavaScript代码可以读取浏览器的本地Cookies(通常可以用来存储浏览器上的表单信息、用户名、搜索关键字等信息)和当前页面的文本信息,并做相应的关键词提取,最后根据这些关键词来猜测用户可能感兴趣的内容,进行推荐。

而目前协同过滤公认的应该是两种思路,第一种是利用比较成熟的邻居方法,而邻居方法中有两个方面的视角,

第一种:基于用户。也就是说,系统通过分析一个用户和哪些用户的特征比较像,然后把相似用户喜欢的商品推荐给该用户。

第二种:基于商品。也就是说,通过分析用户的购买行为来判断用户喜欢的商品,然后进行推荐。

前者称为User-based CF(User-based Collaborative Filtering),或者叫基于用户的协同过滤;后者称为Item-based CF(Item-based Collaborative Filtering),或者叫基于商品的协同过滤

除了邻居方法外,还有就是基于模型的推荐算法。

这里注意的几点

  • User-based CF:假设在得到了一个用户对商品偏好的列表,但怎么找到和该用户兴趣最接近的认呢?这里用的是余弦相似度。

    cos(a,b)=a⋅b|a|⋅|b|

    其中a,b都是向量,这时a,b两个向量在空间上只要方向一致,不论大小是否相同,都会得到 cos(a,b)=1 ,而方向相反,则 cos(a,b)=−1 。这是一种最普通的基于用户的协同过滤算法思路。

  • Item-based CF:这种算法和前面基于用户的协同过滤算法不一样,它并不是要建立一个商品属性的矩阵来计算物品之间的相似度,由于商品之前的属性相差很大,并且计算量也很大,所以这里的Item-based CF主要通过分析用户的行为来计算物品之间的相似度。

    计算步骤分为以下两步:

    (1)计算物品之间的相似度

    (2)根据物品的相似度和用户的偏好来给用户生成推荐列表

这里计算商品A和商品B的相似性也用到了余弦相似度的概念,但略有不同:

cos(A,B)=N(A∩B)N(A)⋅N(B)−−−−−−−−−−−√

分子是同时喜欢A和喜欢B两个商品的用户数量,分母也就很清晰了。

一句话概括就是:有很多人喜欢商品A,同时他们也喜欢商品B,所以A和B应该是比较类似的商品。

2. 优化问题

其中要注意的是在 Item-based CF算法中还存在一种问题就是关于覆盖率和多样性的问题。由于某些原因通过计算我们会得到一些不合适的高相似度的商品,这时我们期望的不是一个高度收敛的推荐算法,而是商品种类要丰富,也即是商品的覆盖率要高,保障它的多样性。这里就要用到物品相似度的归一化。

所谓的归一化就是把商品的相似度矩阵做如下变化:

w′ij=wijmaxj⋅wij

也就是对每一行的相似度值和当前行的最大值计算一个比值。这样得到额结果可以看出原来相似度的分布被拉开了,有了更好的距离感,便于进一步的分类。

3. 分析余弦相似度

在有的地方用余弦相似度而不用欧式距离和曼哈顿距离来度量,是因为余弦相似度用的是夹角概念。

例如度量值向量(5,5)和(3,3)的夹角是0°,也就是她们非常相似,但有欧式距离是 22√ ,解释性显然没有余弦相似度好。

如图:

推荐算法基础

一象限的A、B向量之间的距离是 22√ ,而二三象限的A、B之间的距离也是 22√ ,但这里明显能看出来一象限的两个向量的方向性明显比二三象限的这两个向量的方向性要好很多,在这种情况下用欧式距离来度量就会误判。

参考:《白话大数据与机器学习》

继续阅读