2003年,Amazon公司的Linden、Smith、York大佬刊发了一篇名为《Item-to-Item Collaborative Filtering》的文章;这篇文章首次解释了Amazon公司商品推荐系统的原理。从那时起,这类算法就一直主导着推荐领域。无论是Netflix、Amazon还是Facebook,每一个拥有大量用户群的网站或应用程序都会使用某种形式的协同过滤算法来推荐产品(可能是电影、产品或社交)。协同过滤试图利用社交网络的力量提供可靠、相关、有时甚至令人惊喜的推荐。如果Alice和Bob在很大程度上喜欢同一部电影(比如The Lion King、Aladdin和Toy Story),而爱丽丝也喜欢Finding Nemo,那么没有看过Finding Nemo鲍勃很可能也会喜欢。这样的推荐结果往往符合一类群体的诉求。为了构建稳定的、良好的协同滤波推荐算法,掌握最基本的Data Mining算法是必须的。今天学习主要关注以下部分:
- 相似性测度Similarity measures:对于两个产品,如何从数学上量化它们之间有多不同或相似?相似性度量有助于我们回答这个问题。在ACM暑校培训构建内容推荐引擎时,已经使用了相似性度量(余弦分数)。今天又学到了更多的相似性分数测度方法~~
- 数据降维Dimensionality reduction:在构建协同滤波推荐算法时,通常要处理数百万用户对数百万个产品的评级。在这种情况下,用户和产品向量的维度将达到数百万。为了提高推荐模型的性能、加快计算速度并避免维度爆炸的诅咒,通常最好在保留大部分信息的同时大幅减少维度的数量。
- 监督学习Supervised learning:监督学习是一类机器学习算法,它利用标签数据推断出一个映射函数,然后用它来预测未标记数据的标签(或类)。这里将研究一些最流行的监督学习算法,例如支持向量机、逻辑回归、决策树和嵌套。
- 聚类Clustering:聚类是一种无监督学习,算法试图将所有数据点划分成一定数量的聚类。因此,在不使用标签数据集的情况下,聚类算法能够将类分配给所有未标记的点。在本文中,我们将研究k-means聚类,这是一种简单但功能强大的算法,广泛应用于协同过滤推荐算法中。
- 评估方法Evaluation methods:用于衡量这些算法性能的评估指标。这些指标包括准确性accuracy、精确性precision、召回率recall、F1 score等。
1. 问题背景

协同过滤算法试图解决预测问题。换句话说,我们得到一个i用户和j产品的矩阵。第i行和第j列中的值(用rij表示)表示用户i对第j项给出的评级。我们的工作是完成这个矩阵。换句话说,我们需要预测矩阵中没有数据的所有单元格。例如,在前面的图中,我们被要求预测用户e是否喜欢音乐播放器项。为了完成这项任务,有些评级是可用的(例如用户A喜欢音乐播放器和视频游戏),而其他评级则不可用(例如,我们不知道用户C和D是否喜欢游戏)。
2. 相似性测度
从前面的评分矩阵中,我们看到每个用户都可以表示为一个j维向量,其中第k维表示该用户对第k个产品的评分。假设1表示相似,-1表示不喜欢,0表示没有评级。因此,用户B的偏好向量可以表示为(0,1,-1,-1)。同理,每一个产品也可以表示为一个i维的向量,其中第k个维度表示第k个用对该产品的评级。因此,上图中游戏这个产品可以表示为(1,-1,0,0,-1)。
- 欧氏距离 Euclidean distance